(14)、andengine之ButtonSprite按钮精灵与创建菜单

import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.sprite.ButtonSprite;
import org.andengine.entity.sprite.ButtonSprite.OnClickListener;
import org.andengine.entity.sprite.Sprite;
import org.andengine.entity.util.FPSLogger;
import org.andengine.opengl.texture.TextureOptions;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.atlas.bitmap.BuildableBitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.source.IBitmapTextureAtlasSource;
import org.andengine.opengl.texture.atlas.buildable.builder.BlackPawnTextureAtlasBuilder;
import org.andengine.opengl.texture.atlas.buildable.builder.ITextureAtlasBuilder.TextureAtlasBuilderException;
import org.andengine.opengl.texture.region.TextureRegion;
import org.andengine.opengl.texture.region.TiledTextureRegion;
import org.andengine.ui.activity.SimpleBaseGameActivity;

import android.util.DisplayMetrics;
import android.widget.Toast;
/**
 * 按钮精灵和创建菜单
 */
public class ButtonAndMenuActivity extends SimpleBaseGameActivity implements OnClickListener
{
 private static int winWidth = 854;
 private static int winHeight = 480;
 
 private BuildableBitmapTextureAtlas mBuildableBitmapTextureAtlas;
 private BitmapTextureAtlas mBitmapTextureAtlas;
 //背景
 private TextureRegion mBackgroundTextureRegion,mMenuTextureRegion;
 //按钮
 private TiledTextureRegion mBtnTiledTextureRegion,mAllBtnTiledTextureRegion;
 //按钮精灵
 private ButtonSprite buttonSprite,btnAllSprite1,btnAllSprite2,btnAllSprite3,btnAllSprite4;
 //主场景,菜单场景
 private Scene mScene,menuScene;

 @Override
 public EngineOptions onCreateEngineOptions()
 {
  setScreenDisplay();
  Camera camera = new Camera(0,0,winWidth,winHeight);
  return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(winWidth, winHeight), camera);
 }

 @Override
 protected void onCreateResources()
 {
  BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("images/");
  //手动收集的地图纹理区域
  mBitmapTextureAtlas = new BitmapTextureAtlas(getTextureManager(), 256, 256, TextureOptions.DEFAULT);
  //菜单背景
  mMenuTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mBitmapTextureAtlas, this, "menu_bg.png", 0, 0);
  mBitmapTextureAtlas.load();

  //自动收集的地图纹理区域
  mBuildableBitmapTextureAtlas = new BuildableBitmapTextureAtlas(this.getTextureManager(), 1024, 1024, TextureOptions.DEFAULT);
  mBackgroundTextureRegion = BitmapTextureAtlasTextureRegionFactory
    .createFromAsset(mBuildableBitmapTextureAtlas, this, "parallax_background_layer_back.png");
  mBtnTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
    .createTiledFromAsset(mBuildableBitmapTextureAtlas, this, "toggle_button.png", 2, 1);
  mAllBtnTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory
    .createTiledFromAsset(mBuildableBitmapTextureAtlas, this, "btn_all.png", 3, 1);
  
  try
  {
   mBuildableBitmapTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(0, 1, 1));
   mBuildableBitmapTextureAtlas.load();
  } catch (TextureAtlasBuilderException e)
  {
   e.printStackTrace();
  }
 }

 @Override
 protected Scene onCreateScene()
 {
  this.mEngine.registerUpdateHandler(new FPSLogger());
  mScene = new Scene();
  
  float startX = (winWidth-mBackgroundTextureRegion.getWidth())/2;
  float startY = (winHeight-mBackgroundTextureRegion.getHeight())/2;
  
  //创建背景精灵
  Sprite backgroundSprite = new Sprite(startX, startY, mBackgroundTextureRegion, getVertexBufferObjectManager());
  
  buttonSprite = new ButtonSprite(startX+20, startY+20, mBtnTiledTextureRegion, getVertexBufferObjectManager(), this);
  
  mScene.attachChild(backgroundSprite);
  mScene.attachChild(buttonSprite);
  
  //注册buttonSprite的触摸机制
  mScene.registerTouchArea(buttonSprite);
  
  createMenu();
  
  return mScene;
 }
 /**
  * 创建菜单
  */
 private void createMenu()
 {
  menuScene = new Scene();
  float menuX = 200;
  float menuY = 30;
  //创建背景精灵
  Sprite menuBgSprite = new Sprite(menuX, menuY, 240, 320, mMenuTextureRegion, getVertexBufferObjectManager());
  
  btnAllSprite1 = new ButtonSprite(menuX+28, menuY+20, mAllBtnTiledTextureRegion, getVertexBufferObjectManager(), this);
  btnAllSprite2 = new ButtonSprite(menuX+28, menuY+70, mAllBtnTiledTextureRegion, getVertexBufferObjectManager(), this);
  btnAllSprite3 = new ButtonSprite(menuX+28, menuY+130, mAllBtnTiledTextureRegion, getVertexBufferObjectManager(), this);
  btnAllSprite4 = new ButtonSprite(menuX+28, menuY+200, mAllBtnTiledTextureRegion, getVertexBufferObjectManager(), this);
  
  menuScene.attachChild(menuBgSprite);
  menuScene.attachChild(btnAllSprite1);
  menuScene.attachChild(btnAllSprite2);
  menuScene.attachChild(btnAllSprite3);
  menuScene.attachChild(btnAllSprite4);

  //注册buttonSprite的触摸机制
  menuScene.registerTouchArea(btnAllSprite1);
  menuScene.registerTouchArea(btnAllSprite2);
  menuScene.registerTouchArea(btnAllSprite3);
  menuScene.registerTouchArea(btnAllSprite4);
  
  // 如果你还要复用之前的背景话(就是看到之前的场景层),这里设置为false,否则就是一片黑色背景
  menuScene.setBackgroundEnabled(false);
 }

 /**
  * 设置屏幕大小
  */
 private void setScreenDisplay()
 {
  DisplayMetrics displayMetrics = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
  winWidth = displayMetrics.widthPixels;
  winHeight = displayMetrics.heightPixels;
 }

 /**
  * 按钮精灵点击事件
  */
 @Override
 public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY)
 {
  if (pButtonSprite == buttonSprite)
  {
   //安全的做法是在更新线程做删除,更新等操作
   this.runOnUpdateThread(new Runnable()
   {
    @Override
    public void run()
    {
     //主场景设置子场景
     mScene.setChildScene(menuScene);
     //将buttonSprite
     mScene.detachChild(buttonSprite);
    }
   });
   
  }
  else if (pButtonSprite == btnAllSprite1)
  {
   ButtonAndMenuActivity.this.runOnUiThread(new Runnable()
   {
    @Override
    public void run()
    {
     Toast.makeText(ButtonAndMenuActivity.this, "点击了按钮精灵buttonSprite1", 3000).show();
    }
   });
  }
  else if (pButtonSprite == btnAllSprite2)
  {
   ButtonAndMenuActivity.this.runOnUiThread(new Runnable()
   {
    @Override
    public void run()
    {
     Toast.makeText(ButtonAndMenuActivity.this, "点击了按钮精灵buttonSprite2", 3000).show();
    }
   });
  }
  else if (pButtonSprite == btnAllSprite3)
  {
   ButtonAndMenuActivity.this.runOnUiThread(new Runnable()
   {
    @Override
    public void run()
    {
     Toast.makeText(ButtonAndMenuActivity.this, "点击了按钮精灵buttonSprite3", 3000).show();
    }
   });
  }
  else if (pButtonSprite == btnAllSprite4)
  {
   //安全的做法是在更新线程做删除,更新等操作
   this.runOnUpdateThread(new Runnable()
   {
    @Override
    public void run()
    {
     //返回到最开始状态
     mScene.clearChildScene();
     mScene.attachChild(buttonSprite);
    }
   });
  }
 }
 
 
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值