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);
}
});
}
}
}
相关推荐
封装了个andengine的动画精灵类,可以直接传入多张小图片的名称,直接生成动画精灵
AndEngine游戏引擎进阶之自定义Tiled精灵,AndEngine游戏引擎是一个开源的Android 2D游戏引擎。
在制作动画精灵的时候,为了方便计算,常常需要把场景中的坐标转换为精灵的内部坐标,或者需要把精灵的内部坐标转换为场景坐标.如果精灵没有进行过旋转操作,他们之间只差 一个offse而已
我根据andengine文档和网上的例子,自己加工在androidstadio上运行代码中有我照着文档写的例子,根据自己理解做了一点注释,希望对新人有帮助
AndEngine下载 AndEngine
andengine源码,源码扩展及demo,供14个project
AndEngine是一个开源项目。这使得开发者在遇到问题时可以直接从源码上找到答案,也能按照自己的需要对AndEngine进行修改和扩展。AndEngine的源码在github上托管[2]。 高效 AndEngine主要使用Java语言开发,但在...
AndEngine是一个开源项目。这使得开发者在遇到问题时可以直接从源码上找到答案,也能按照自己的需要对AndEngine进行修改和扩展。AndEngine的源码在github上托管[2]。 高效 AndEngine主要使用Java语言开发,但在...
利用andengine2.0开发的一款小游戏,有兴趣的朋友可以研究下。
AndEngine最新jar包 AndEngine最新jar包 AndEngine最新jar包
andengine 中文文档
AndEngine基于libGDX框架开发,使用OpenGL ES进行图形绘制,底层... 相较Libgdx引擎:AndEngine拥有更多的游戏组件与扩展功能;并且它在默认情况下已经可以支持中文;采用屏幕坐标系绘也更符合一般Android绘图习惯。
android andengine 代码 AnimatedSprite 实例 大家一起学习android andengine 游戏开发吧
andEngine粒子系统使用之采用px文件的方式构建自己的粒子系统,源代码案例
基于AndEngine的滑动选择菜单 类似愤怒小鸟的关卡选择
AndEngine游戏开发示例 详情请链接至:http://blog.csdn.net/lan410812571/article/details/9716743
Andengine全套的git库,包括 AndEngineAugmentedRealityExtension AndEngineLiveWallpaperExtension AndEngineMODPlayerExtension AndEngineMultiplayerExtension AndEngineMultiTouchExtension (Merged into the '...
AndEngine实现自定义Button
AndEngine游戏引擎学习入门篇,如果你想学习Android游戏开发,请从这里开始!详细的注释
andengine.jar 2013最新,andengine+8个拓展jar包,两个案例apk. 包括andengineExample基于GLES2