AndEngine 《Android游戏开发实践指南》之“吸血鬼游戏”实例学习(一)

来源:互联网 发布:php eval 替代方法 编辑:程序博客网 时间:2024/06/09 15:03


     购买的《Android游戏开发实践指南》一书用的AndEngine库已经更新过,书上很多代码不适应于AndEngine GLES 2。

     根据书上的步骤通过学习《少女大战吸血鬼》游戏来熟悉AndEngine游戏开发过程,做点笔记,本人用的AndEngine库版本是GLES2 ,代码会和书上有些许出入。

 

游戏开始界面

蝙蝠是动画会挥动翅膀,中间的铃声水印是截屏时不小心截得尴尬,图片都是从书上提供的源码里提取出来的。

 

根据之前的学习知道了 Camera, 贴图区域等概念,知道创建一个 SimpleBaseGameActivity要实现的方法,各方法大概的用途。

这里记录关于 AnimatedSprite 的用法。

1    .AnimatedSprite 专门用来设置动画精灵的类,需要从TiledTextureRegion 对象中提取动画的帧,其他的都和基本的Sprite一样。 TiledTexureRegion通常在一张大图里有很多小图,就像下图一样,这些小图连续播放也就是我们的动画效果,而TextureRegion中只有单一的图,这是他们的区别。

                                        

 

 

实现代码如下:

声明变量:

BitmapTextureAtlas mBatAtlas;ITiledTextureRegion mBatITiledTextureRegion;


onCreateResources()onCreateResource()方法中:

新建mbatatlas时的第二三个参数是取贴图区域的范围,如果这个范围小于图片本身的大小就显示不出来

BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
mBatAtlas = new BitmapTextureAtlas(getTextureManager(), width, high);mBatITiledTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(mBatAtlas, this, "bat_tiled.png", 0, 0,2, 2);mBatAtlas.load();

 

在onCreateScene()方法中:

新建Sprite时前两个参数是定义精灵的位置,左上角的坐标,

final AnimatedSprite mBatSprite = new AnimatedSprite(width * 5.5f / 17f- mBatITiledTextureRegion.getWidth() / 2, high * 6.5f / 11.4f- mBatITiledTextureRegion.getHeight() / 2,mBatITiledTextureRegion, new VertexBufferObjectManager());
mBatSprite.setScale((width / (17f / 3f)) / mBatITiledTextureRegion.getWidth(),    (high / (11.4f / 3f)) / mBatITiledTextureRegion.getHeight());
mBatSprite.animate(150);// 每帧的播放时长 毫秒为单位.默认为循环播放mScene.attachChild(mBatSprite);


 

贴上完整代码:

package com.lyt.myzonbigame;import java.io.IOException;import java.io.InputStream;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.AnimatedSprite;import org.andengine.entity.sprite.Sprite;import org.andengine.entity.util.FPSLogger;import org.andengine.opengl.texture.ITexture;import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;import org.andengine.opengl.texture.bitmap.BitmapTexture;import org.andengine.opengl.texture.region.ITextureRegion;import org.andengine.opengl.texture.region.ITiledTextureRegion;import org.andengine.opengl.texture.region.TextureRegionFactory;import org.andengine.opengl.vbo.VertexBufferObjectManager;import org.andengine.ui.activity.SimpleBaseGameActivity;import org.andengine.util.adt.io.in.IInputStreamOpener;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import com.lyt.myzonbigame.util.Myapplication;public class StartActivity extends SimpleBaseGameActivity {int width = Myapplication.ScreenH;int high = Myapplication.ScreenW;Scene mScene;Sprite mSprite;Handler mHandler = new Handler();// BitmapTextureAtlas mAtlas;ITexture mITexture;ITextureRegion mITextureRegion;BitmapTextureAtlas mBatAtlas;ITiledTextureRegion mBatITiledTextureRegion;@Overrideprotected void onCreate(Bundle pSavedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(pSavedInstanceState);System.out.println("oncreate");}@Overridepublic EngineOptions onCreateEngineOptions() {// TODO Auto-generated method stubSystem.out.println("oncreateengineoption");Camera mCamera = new Camera(0, 0, width, high);return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED,new RatioResolutionPolicy(width, high), mCamera);}@Overrideprotected void onCreateResources() {System.out.println("oncreateresourse");BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");try {mITexture = new BitmapTexture(getTextureManager(),new IInputStreamOpener() {@Overridepublic InputStream open() throws IOException {// TODO Auto-generated method stubreturn getAssets().open("gfx/Splashscreen.png");}});} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// mITextureRegion = BitmapTextureAtlasTextureRegionFactory// .createFromAsset(mAtlas, this, "Splashscreen.png", 0, 0);mITexture.load();mITextureRegion = TextureRegionFactory.extractFromTexture(mITexture);mBatAtlas = new BitmapTextureAtlas(getTextureManager(), width, high);mBatITiledTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(mBatAtlas, this, "bat_tiled.png", 0, 0,2, 2);mBatAtlas.load();}@Overrideprotected Scene onCreateScene() {this.mEngine.registerUpdateHandler(new FPSLogger());mScene = new Scene();mSprite = new Sprite((width - mITexture.getWidth()) / 2,(high - mITexture.getHeight()) / 2, mITextureRegion,new VertexBufferObjectManager());mSprite.setScaleX(width / mSprite.getWidth());mSprite.setScaleY(high / mSprite.getHeight());// mSprite.setScale(2.5f); 按原图比例缩放mScene.attachChild(mSprite);final AnimatedSprite mBatSprite = new AnimatedSprite(width * 5.5f / 17f- mBatITiledTextureRegion.getWidth() / 2, high * 6.5f / 11.4f- mBatITiledTextureRegion.getHeight() / 2,mBatITiledTextureRegion, new VertexBufferObjectManager());mBatSprite.setScale((width / (17f / 3f)) / mBatITiledTextureRegion.getWidth(),(high / (11.4f / 3f)) / mBatITiledTextureRegion.getHeight());mBatSprite.animate(150);// 每帧的播放时长 毫秒为单位.默认为循环播放mScene.attachChild(mBatSprite);return mScene;}private Runnable mRunnable = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubIntent mIntent = new Intent(StartActivity.this,GameChooessItem.class);startActivity(mIntent);}};// 依次执行完上面三个方法后就会执行该方法public synchronized void onGameCreated() {mHandler.postDelayed(mRunnable, 4000);System.out.println("ongamecreated");};}


 


 

0 0
原创粉丝点击