package cn.flyaudio.game;
import javax.microedition.khronos.opengles.GL10;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.menu.MenuScene;
import org.anddev.andengine.entity.scene.menu.MenuScene.IOnMenuItemClickListener;
import org.anddev.andengine.entity.scene.menu.animator.SlideMenuAnimator;
import org.anddev.andengine.entity.scene.menu.item.IMenuItem;
import org.anddev.andengine.entity.scene.menu.item.SpriteMenuItem;
import org.anddev.andengine.entity.scene.menu.item.TextMenuItem;
import org.anddev.andengine.entity.scene.menu.item.decorator.ColorMenuItemDecorator;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.opengl.font.Font;
import org.anddev.andengine.opengl.font.FontFactory;
import org.anddev.andengine.opengl.texture.Texture;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TextureRegion;
import org.anddev.andengine.ui.activity.BaseGameActivity;
import android.graphics.Color;
import android.view.KeyEvent;
import android.widget.Toast;
public class Andengine_Gamemenu_ExampleActivity extends BaseGameActivity
implements IOnMenuItemClickListener {
private static final int CAMERA_WIDTH = 800;
private static final int CAMERA_HEIGHT = 480;
private static final int MENU_ABOUT = 0;
private static final int MENU_QUIT = MENU_ABOUT + 1;
private static final int MENU_PLAY = MENU_QUIT + 1;
private static final int MENU_SCORES = MENU_PLAY + 1;
private static final int MENU_OPTIONS = MENU_SCORES + 1;
private static final int MENU_HELP = MENU_OPTIONS + 1;
// 照相机
private Camera mCamera;
// 主镜头
private Scene mMainScene;
// 菜单背景结构
private BitmapTextureAtlas mMenuBackTexture;
// 背景区域
private TextureRegion mMenuBackTextureRegion;
// 静态菜单镜头 弹出菜单镜头
private MenuScene mStaticMenuScene, mPopUpMenuScene;
// 弹出结构、字体结构
private BitmapTextureAtlas mPopUpTexture;
private Texture mFontTexture;
private Font mFont;
// 菜单结构区域
private TextureRegion mPopUpAboutTextureRegion;
private TextureRegion mPopUpQuitTextureRegion;
private TextureRegion mMenuPlayTextureRegion;
private TextureRegion mMenuScoresTextureRegion;
private TextureRegion mMenuOptionsTextureRegion;
private TextureRegion mMenuHelpTextureRegion;
// 弹出
private boolean popupDisplayed;
@Override
public void onLoadComplete() {
// TODO Auto-generated method stub
}
@Override
public Engine onLoadEngine() {
// TODO Auto-generated method stub
// 与加载图片一致
this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE,
new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
this.mCamera));
}
@Override
public void onLoadResources() {
// TODO Auto-generated method stub
this.mFontTexture = new BitmapTextureAtlas(256, 256,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
// 字体存放位置
FontFactory.setAssetBasePath("font/");
this.mFont = FontFactory.createFromAsset(mFontTexture, this,
"UnrealTournament.ttf", 32, true, Color.WHITE);
// 加载引擎管理结构
this.mEngine.getTextureManager().loadTexture(this.mFontTexture);
this.mEngine.getFontManager().loadFont(mFont);
// 图片存放位置
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
// 菜单背景
this.mMenuBackTexture = new BitmapTextureAtlas(1024, 512,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
// 菜单背景区域,取得存放的资源
this.mMenuBackTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createFromAsset(this.mMenuBackTexture, this,
"snake_background.png", 0, 0);
this.mEngine.getTextureManager().loadTexture(mMenuBackTexture);
// 弹出结构
this.mPopUpTexture = new BitmapTextureAtlas(512, 512,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
// 按菜单按钮弹出关于图片
this.mPopUpAboutTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createFromAsset(this.mPopUpTexture, this, "menu_ok.png", 0, 0);
// 按菜单按钮弹出退出图片
this.mPopUpQuitTextureRegion = BitmapTextureAtlasTextureRegionFactory
.createFromAsset(this.mPopUpTexture, this, "menu_quit.png", 0, 50);
this.mEngine.getTextureManager().loadTexture(mPopUpTexture);
// 弹出设置为false
this.popupDisplayed = false;
}
@Override
public Scene onLoadScene() {
// TODO Auto-generated method stub
this.mEngine.registerUpdateHandler(new FPSLogger());
// 静态菜单和弹出菜单方法
this.createStaticMenuScene();
this.createPopUpMenuScene();
// 菜单设置到屏幕中心
final int centerX = (CAMERA_WIDTH - this.mMenuBackTextureRegion
.getWidth()) / 2;
final int centerY = (CAMERA_HEIGHT - this.mMenuBackTextureRegion
.getHeight()) / 2;
this.mMainScene = new Scene(1);
// 增加精灵和静态菜单
final Sprite menuBack = new Sprite(centerX, centerY,
this.mMenuBackTextureRegion);
this.mMainScene.getLastChild().attachChild(menuBack);
this.mMainScene.setChildScene(mStaticMenuScene);
return this.mMainScene;
}
// 创建弹出按钮镜头
private void createPopUpMenuScene() {
// TODO Auto-generated method stub
this.mPopUpMenuScene = new MenuScene(this.mCamera);
final SpriteMenuItem aboutMenuItem = new SpriteMenuItem(MENU_ABOUT,
this.mPopUpAboutTextureRegion);
aboutMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA,
GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mPopUpMenuScene.addMenuItem(aboutMenuItem);
final SpriteMenuItem quitMenuItem = new SpriteMenuItem(MENU_QUIT,
this.mPopUpQuitTextureRegion);
quitMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA,
GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mPopUpMenuScene.addMenuItem(quitMenuItem);
this.mPopUpMenuScene.setMenuAnimator(new SlideMenuAnimator());
this.mPopUpMenuScene.buildAnimations();
this.mPopUpMenuScene.setBackgroundEnabled(false);
this.mPopUpMenuScene.setOnMenuItemClickListener(this);
}
// 创建静态菜单方法
private void createStaticMenuScene() {
// TODO Auto-generated method stub
this.mStaticMenuScene = new MenuScene(this.mCamera);
final IMenuItem playMenuItem = new ColorMenuItemDecorator(
new TextMenuItem(MENU_PLAY, mFont, "开始游戏"), 0.5f, 0.5f, 0.5f,
1.0f, 0.0f, 0.0f);
playMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA,
GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mStaticMenuScene.addMenuItem(playMenuItem);
final IMenuItem scoresMenuItem = new ColorMenuItemDecorator(
new TextMenuItem(MENU_SCORES, mFont, "分数"), 0.5f, 0.5f, 0.5f,
1.0f, 0.0f, 0.0f);
scoresMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA,
GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mStaticMenuScene.addMenuItem(scoresMenuItem);
final IMenuItem optionsMenuItem = new ColorMenuItemDecorator(
new TextMenuItem(MENU_OPTIONS, mFont, "选项"), 0.5f, 0.5f, 0.5f,
1.0f, 0.0f, 0.0f);
optionsMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA,
GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mStaticMenuScene.addMenuItem(optionsMenuItem);
final IMenuItem helpMenuItem = new ColorMenuItemDecorator(
new TextMenuItem(MENU_HELP, mFont, "帮助"), 0.5f, 0.5f, 0.5f,
1.0f, 0.0f, 0.0f);
helpMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA,
GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mStaticMenuScene.addMenuItem(helpMenuItem);
this.mStaticMenuScene.buildAnimations();
this.mStaticMenuScene.setBackgroundEnabled(false);
this.mStaticMenuScene.setOnMenuItemClickListener(this);
}
@Override
public boolean onMenuItemClicked(MenuScene pMenuScene, IMenuItem pMenuItem,
float pMenuItemLocalX, float pMenuItemLocalY) {
switch (pMenuItem.getID()) {
case MENU_ABOUT:
Toast.makeText(Andengine_Gamemenu_ExampleActivity.this, "关于",
Toast.LENGTH_SHORT).show();
return true;
case MENU_QUIT:
this.finish();
return true;
case MENU_PLAY:
Toast.makeText(Andengine_Gamemenu_ExampleActivity.this, "开始",
Toast.LENGTH_SHORT).show();
return true;
case MENU_SCORES:
Toast.makeText(Andengine_Gamemenu_ExampleActivity.this, "分数",
Toast.LENGTH_SHORT).show();
return true;
case MENU_OPTIONS:
Toast.makeText(Andengine_Gamemenu_ExampleActivity.this, "选项",
Toast.LENGTH_SHORT).show();
return true;
case MENU_HELP:
Toast.makeText(Andengine_Gamemenu_ExampleActivity.this,
"帮助", Toast.LENGTH_SHORT).show();
return true;
default:
return false;
}
}
// 菜单按钮按下事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_MENU
&& event.getAction() == KeyEvent.ACTION_DOWN) {
if (this.popupDisplayed) {
// 移除以及重新设置
this.mPopUpMenuScene.back();
// 设置子场景到静态场景
this.mMainScene.setChildScene(this.mStaticMenuScene);
this.popupDisplayed = false;
} else {
/* Attach the menu */
this.mMainScene.setChildScene(this.mPopUpMenuScene, false,
true, true);
this.popupDisplayed = true;
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}
分享到:
相关推荐
《AndEngine游戏-DeliveryBoy-源代码》是一个用于学习AndEngine游戏开发的示例项目,其主要内容涵盖了AndEngine的基本使用、游戏逻辑构建以及资源管理等多个方面。AndEngine是一款流行的开源Android游戏开发引擎,它...
《深入解析Android游戏引擎AndEngine及其应用》 AndEngine是一款基于OpenGL ES 1.1的开源Android游戏开发引擎,由Nicolas Gramlich开发并维护。它为开发者提供了一个高效、简洁的游戏开发框架,大大简化了2D游戏的...
AndEngine是一款专为Android平台设计的免费且开源的2D游戏引擎,由Nicolas Gramlich开发。它以其高效、易用性以及丰富的功能而受到广大开发者欢迎,特别适合初学者入门游戏开发。以下是对AndEngine核心知识点的详细...
AndEngine是一款开源的2D游戏引擎,专为Android平台设计,提供了强大的图形渲染能力和丰富的游戏组件,使得开发者能够快速构建高质量的RPG(角色扮演游戏)游戏。本文将深入探讨AndEngine在Android RPG游戏开发中的...
AndEngine是一款专为Android平台设计的2D游戏开发引擎,它使用Java语言编写,提供了丰富的图形绘制、动画处理以及物理模拟等功能,使得开发者能够快速构建高质量的2D游戏。这款引擎以其简洁的API和高效的性能获得了...
最后,AndEngine的场景管理器(SceneManager)使得游戏的场景切换变得简单,例如过渡到游戏主菜单、游戏结束画面或者得分屏幕。源代码中的Scene切换逻辑清晰明了,便于理解和修改。 总结起来,"Space Assault"游戏的...
在这个完整的游戏例子中,我们可以深入学习到AndEngine的多个核心技术和游戏开发流程。 1. AndEngine基础知识:AndEngine提供了丰富的图形渲染、物理引擎、动画处理等功能,开发者可以快速构建游戏场景。了解...
通过深入研究这些实例,你不仅可以学习到AndEngine的基本用法,还能掌握2D游戏开发中的许多通用技巧。此外,这些代码示例还提供了良好的注释和结构,对于初学者来说是很好的学习资料。在实际项目中,你可以参考这些...
1. **轻量级**:AndEngine是一个开源的、轻量级的2D游戏引擎,专为Android设计,易于学习和使用。 2. **性能优化**:AndEngine支持硬件加速,能充分利用设备的GPU资源,实现流畅的游戏体验。 3. **扩展性**:...
在Android游戏开发中,AndEngine是一款非常受欢迎的2D游戏引擎,它提供了丰富的功能和工具,使得开发者可以轻松创建各种2D游戏。本教程将深入探讨如何利用AndEngine实现一个类似于“愤怒的小鸟”那样的滑动关卡选择...
在Android平台上,AndEngine是一款广受欢迎的2D游戏开发引擎,以其轻量级、高效且易于学习的特性,深受开发者喜爱。本源码是基于AndEngine老版本开发的捕鱼达人游戏,为开发者提供了宝贵的参考资料,有助于深入理解...
在Android游戏开发领域,AndEngine是一个非常受欢迎的2D游戏引擎,它提供了高效且易于使用的API,使得开发者能够快速构建高质量的游戏应用。本教程将详细阐述如何在Android Studio中配置AndEngine开发环境,并且集成...
AndEngine是一款专为Android平台设计的游戏开发框架,它简化了2D游戏的创建过程,让开发者可以更加专注于游戏逻辑和创意设计,而不需要深入学习复杂的Android SDK底层细节。这款开源库以其高效、灵活和易用性深受...
AndEngine是一款专为Android平台设计的游戏开发引擎,因其开源、轻量级且易于上手的特性,在移动游戏和应用开发领域备受青睐。在本篇中,我们将深入探讨如何利用AndEngine构建一个功能丰富的精美相册应用,涉及...
《AndEngine中的MultiScreen技术详解》 AndEngine是一款流行的开源Android游戏开发引擎,它为开发者提供了许多方便的游戏开发工具和功能。...理解并掌握这一技术,将极大地提升你的AndEngine游戏开发能力。
- `onLoadEngine()`:用于设置AndEngine引擎的相关选项,包括屏幕方向、分辨率策略等。 - `onLoadResources()`:加载游戏所需的资源。 - `onLoadScene()`:加载游戏的第一个场景,这里是绘制了一条线作为示例。 - `...
OPhone平台2D游戏引擎实现总汇主要涵盖了在OPhone操作系统上开发2D游戏的关键技术和实践过程。OPhone是基于Android系统的一个中国移动定制版,它提供了丰富的API和工具集,使得开发者可以充分利用其特性来创建高质量...
1. **场景管理**:AndEngine采用Scene类来组织游戏的不同阶段,如主菜单、游戏场景、暂停界面等。开发者可以通过切换场景实现游戏流程的控制。在AnimalKeeper中,每个场景都有相应的加载和处理逻辑。 2. **精灵...
游戏引擎是游戏开发的核心,它负责处理图形渲染、物理模拟、碰撞检测、音效播放等功能。Android游戏通常基于Unity、Unreal Engine、Cocos2d-x或者自定义的游戏框架。在这个案例中,由于是运动游戏,开发者可能使用了...
AndEngine是一款流行的开源游戏开发引擎,专为Android平台设计,它简化了2D游戏的创建过程,无需深入理解OpenGL ES。本项目是基于Leonard Payne的教程,实现了一个经典的井字游戏(TicTacToe),让我们一起深入探讨...