`
李楚男
  • 浏览: 117853 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Andengine游戏引擎的学习之游戏菜单

 
阅读更多
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游戏-DeliveryBoy-源代码》是一个用于学习AndEngine游戏开发的示例项目,其主要内容涵盖了AndEngine的基本使用、游戏逻辑构建以及资源管理等多个方面。AndEngine是一款流行的开源Android游戏开发引擎,它...

    最新android游戏引擎示例及源码 andEngine

    《深入解析Android游戏引擎AndEngine及其应用》 AndEngine是一款基于OpenGL ES 1.1的开源Android游戏开发引擎,由Nicolas Gramlich开发并维护。它为开发者提供了一个高效、简洁的游戏开发框架,大大简化了2D游戏的...

    android免费游戏引擎andEngine

    AndEngine是一款专为Android平台设计的免费且开源的2D游戏引擎,由Nicolas Gramlich开发。它以其高效、易用性以及丰富的功能而受到广大开发者欢迎,特别适合初学者入门游戏开发。以下是对AndEngine核心知识点的详细...

    andengine引擎的android RPG游戏

    AndEngine是一款开源的2D游戏引擎,专为Android平台设计,提供了强大的图形渲染能力和丰富的游戏组件,使得开发者能够快速构建高质量的RPG(角色扮演游戏)游戏。本文将深入探讨AndEngine在Android RPG游戏开发中的...

    AndEngine引擎开发所需要的各种包

    AndEngine是一款专为Android平台设计的2D游戏开发引擎,它使用Java语言编写,提供了丰富的图形绘制、动画处理以及物理模拟等功能,使得开发者能够快速构建高质量的2D游戏。这款引擎以其简洁的API和高效的性能获得了...

    Space Assault 游戏 andengine源代码

    最后,AndEngine的场景管理器(SceneManager)使得游戏的场景切换变得简单,例如过渡到游戏主菜单、游戏结束画面或者得分屏幕。源代码中的Scene切换逻辑清晰明了,便于理解和修改。 总结起来,"Space Assault"游戏的...

    TheHardestGame for andengine完整游戏例子。

    在这个完整的游戏例子中,我们可以深入学习到AndEngine的多个核心技术和游戏开发流程。 1. AndEngine基础知识:AndEngine提供了丰富的图形渲染、物理引擎、动画处理等功能,开发者可以快速构建游戏场景。了解...

    AndEngine 经典实例

    通过深入研究这些实例,你不仅可以学习到AndEngine的基本用法,还能掌握2D游戏开发中的许多通用技巧。此外,这些代码示例还提供了良好的注释和结构,对于初学者来说是很好的学习资料。在实际项目中,你可以参考这些...

    Android OpenGL 游戏引擎

    1. **轻量级**:AndEngine是一个开源的、轻量级的2D游戏引擎,专为Android设计,易于学习和使用。 2. **性能优化**:AndEngine支持硬件加速,能充分利用设备的GPU资源,实现流畅的游戏体验。 3. **扩展性**:...

    基于AndEngine的滑动关卡选择菜单

    在Android游戏开发中,AndEngine是一款非常受欢迎的2D游戏引擎,它提供了丰富的功能和工具,使得开发者可以轻松创建各种2D游戏。本教程将深入探讨如何利用AndEngine实现一个类似于“愤怒的小鸟”那样的滑动关卡选择...

    android捕鱼达人-andengine源码

    在Android平台上,AndEngine是一款广受欢迎的2D游戏开发引擎,以其轻量级、高效且易于学习的特性,深受开发者喜爱。本源码是基于AndEngine老版本开发的捕鱼达人游戏,为开发者提供了宝贵的参考资料,有助于深入理解...

    android studio 配置andengine 开发环境带jar包

    在Android游戏开发领域,AndEngine是一个非常受欢迎的2D游戏引擎,它提供了高效且易于使用的API,使得开发者能够快速构建高质量的游戏应用。本教程将详细阐述如何在Android Studio中配置AndEngine开发环境,并且集成...

    AndEngine包

    AndEngine是一款专为Android平台设计的游戏开发框架,它简化了2D游戏的创建过程,让开发者可以更加专注于游戏逻辑和创意设计,而不需要深入学习复杂的Android SDK底层细节。这款开源库以其高效、灵活和易用性深受...

    基于andengine的精美相册

    AndEngine是一款专为Android平台设计的游戏开发引擎,因其开源、轻量级且易于上手的特性,在移动游戏和应用开发领域备受青睐。在本篇中,我们将深入探讨如何利用AndEngine构建一个功能丰富的精美相册应用,涉及...

    MultiScreen for andengine

    《AndEngine中的MultiScreen技术详解》 AndEngine是一款流行的开源Android游戏开发引擎,它为开发者提供了许多方便的游戏开发工具和功能。...理解并掌握这一技术,将极大地提升你的AndEngine游戏开发能力。

    Andengine使用实例

    - `onLoadEngine()`:用于设置AndEngine引擎的相关选项,包括屏幕方向、分辨率策略等。 - `onLoadResources()`:加载游戏所需的资源。 - `onLoadScene()`:加载游戏的第一个场景,这里是绘制了一条线作为示例。 - `...

    OPhone平台2D游戏引擎实现 总汇

    OPhone平台2D游戏引擎实现总汇主要涵盖了在OPhone操作系统上开发2D游戏的关键技术和实践过程。OPhone是基于Android系统的一个中国移动定制版,它提供了丰富的API和工具集,使得开发者可以充分利用其特性来创建高质量...

    android游戏源码

    1. **场景管理**:AndEngine采用Scene类来组织游戏的不同阶段,如主菜单、游戏场景、暂停界面等。开发者可以通过切换场景实现游戏流程的控制。在AnimalKeeper中,每个场景都有相应的加载和处理逻辑。 2. **精灵...

    android 游戏源代码 运动游戏 疯狂足球

    游戏引擎是游戏开发的核心,它负责处理图形渲染、物理模拟、碰撞检测、音效播放等功能。Android游戏通常基于Unity、Unreal Engine、Cocos2d-x或者自定义的游戏框架。在这个案例中,由于是运动游戏,开发者可能使用了...

    AndEngine-TicTacToe:使用 AndEngine 的井字游戏,基于 Leonard Payne 的教程

    AndEngine是一款流行的开源游戏开发引擎,专为Android平台设计,它简化了2D游戏的创建过程,无需深入理解OpenGL ES。本项目是基于Leonard Payne的教程,实现了一个经典的井字游戏(TicTacToe),让我们一起深入探讨...

Global site tag (gtag.js) - Google Analytics