1、(2).onLoadResource() 加载资源。其实加载资源多的工作可以放到onLoadScene()里面完成,但是作者既然写了这么个函数,我猜他就是想让代码层次清晰一些,在这里面你可以加载你需要的资源,以便后面加载场景的时候使用。(3).onLoadScene() 加载场景。有了镜头,就应该由场景吧,导演一般都是这么想的。这时候你需要创建一个场景,场景里加载刚才的资源,最后将场景返回,最基本的游戏就可以起来了,此时游戏是没有规则的,但是程序已经可以启动,画面里只有你加载的资源。(4).onLoadComplete() 这个函数是Option选项,写在其中的代码将在场景加载完毕后执行,相当
2、于善后工作。4. 详细设计:Android平衡球项目之andEngine资源加载 andEngine的资源加载十分简单,大概分为以下几步:(1).构建实体 andEngine的库里有一个包就是Entity,中文翻译就是实体,Entity类下有很多类,他们都算实体类,可以生成实体,一个简单的举行实体如何定义: Shape rectangle=new Rectangle(0,0,50,50); 参数表明在(0,0)坐标点生成一个宽50高50的矩形,单位是像素,这样,一个实体就构建好了。(2).加载实体 前面说过,我们看到手机屏幕显示的东西都是透过镜头(Camera)的,镜头看到的永远是场景(Sce
3、ne),所以实体是加到场景里的,所以可以用如下语句加载实体: this.scene.getTopLayer().addEntity(rectangle); 因为场景可以分层(Layer),所以我们用getTopLayer()来获取顶层场景。 我们前面谈及了如何在场景里加载实体,下面我们将讲讲我们如何让实体实现物理性质。Android平衡球项目之andEngine的物理世界 很多物理引擎和游戏引擎都会有世界(World)的概念,andEngine也不例外,我们就是通过在场景里设置物理世界使得其中的物体具有物理性质的。(1).主类中的一个成员变量: private PhysicalWorld wo
4、rld;(2).创建world实例: this.world = new FixedStepPhysicsWorld(30, vector, false, 8, 1); 其中30代表FPS,vector代表了指定的重力加速度矢量,为Vector2类。(3).这里有一个中间概念,物理对象,加入物理世界的实体通过物理对象赋予物理性质:Private final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f); 这里的参数决定了物理性质。(4).为场景里的实体创造body,使其有血有肉:Body bo
5、dy=PhysicsFactory.createBoxBody(world,ball,BodyType.DynamicBody,wallFixtureDef);其中world指定所在的世界,为ball赋予物理性质,生成一个动态物体,与物理物体关联,产生一样的物理性质。(5).为实体注册物理世界,这样才能使其具有物理性质:world.registerPhysicsConnector(new PhysicsConnector(entityBrick, entityBody, true, true, false, false);为实体entityBrick以entityBody生成物理物体。至此,一
6、个具有物理性质的实体就创建好了。5. 主要程序说明:package ad.PW;import java.util.ArrayList;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
7、.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;import org.anddev.andengine.entity.primitive.Line;import org.anddev.andengine.entity.primitive.Rectangle;import org.anddev.andengine.entity.scene.Scene;import org.anddev.andengine.entity.shape.Shape;import org.anddev.andengine.e
8、ntity.util.FPSLogger;import org.anddev.andengine.extension.physics.box2d.FixedStepPhysicsWorld;import org.anddev.andengine.extension.physics.box2d.PhysicsConnector;import org.anddev.andengine.extension.physics.box2d.PhysicsFactory;import org.anddev.andengine.extension.physics.box2d.PhysicsWorld;impo
9、rt org.anddev.andengine.opengl.texture.Texture;import org.anddev.andengine.opengl.texture.TextureOptions;import org.anddev.andengine.opengl.texture.region.TextureRegion;import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;import org.anddev.andengine.opengl.texture.region.TiledTextu
10、reRegion;import org.anddev.andengine.sensor.accelerometer.AccelerometerData;import org.anddev.andengine.sensor.accelerometer.IAccelerometerListener;import org.anddev.andengine.ui.activity.BaseGameActivity;import com.badlogic.gdx.math.Vector2;import com.badlogic.gdx.physics.box2d.Body;import com.badl
11、ogic.gdx.physics.box2d.FixtureDef;import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;public class PWActivity extends BaseGameActivity implements IAccelerometerListener /* Called when the activity is first created. */ /For Engine private Camera camera; /For Scene public PhysicsWorld world; /Gravi
12、ty public Vector2 vector; public float GravityX; public float GravityY; public float GravityLimit=10; /Ball public Texture ballTexture; public TiledTextureRegion ballTextureRegion; private Ball ball; /Bricks private Door enterBrick; private Texture enterTexture; private TextureRegion enterTextureReg
13、ion; private Door exitBrick; private Texture exitTexture; private TextureRegion exitTextureRegion; public ArrayList bricks; /EnterDoor enters; /create a physical object private final FixtureDef wallFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f); /create borders public Line bottom; publi
14、c Line top; public Line left; public Line right; public Scene scene; public Scene prevScene; static Scene scene1; static Scene scene2; public Engine onLoadEngine() camera=new Camera(10, 10, 460, 320); return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(46
15、0, 320), camera); public void onLoadResources() ballTexture=new Texture(128, 128, TextureOptions.DEFAULT); ballTextureRegion=TextureRegionFactory.createTiledFromAsset(ballTexture, this, silver_ball.png, 0, 32, 2, 1); enterTexture=new Texture(128, 128, TextureOptions.DEFAULT); enterTextureRegion=Text
16、ureRegionFactory.createFromAsset(enterTexture, getApplicationContext(), block_enter.png, 0, 0); exitTexture=new Texture(128, 128, TextureOptions.DEFAULT); exitTextureRegion=TextureRegionFactory.createFromAsset(exitTexture, getApplicationContext(), block_exit.png public Scene onLoadScene() scene=new
17、Scene(2);/ scene.setBackground(new ColorBackground(256, 256, 256); enters=new ArrayList(); /create a physical world vector=new Vector2(0, 1); this.world = new FixedStepPhysicsWorld(30, vector, false, 8, 1); ball=new Ball(5,10,32,32,ballTextureRegion); Body ballbody = PhysicsFactory.createCircleBody(
18、world, ball, BodyType.DynamicBody, wallFixtureDef); world.registerPhysicsConnector(new PhysicsConnector(ball, ballbody, true, true, false, false); scene.getTopLayer().addEntity(ball); /create this.ball.test=this; this.ball.enterList=enters; /register a new FPSLogger this.mEngine.registerUpdateHandle
19、r(new FPSLogger(); /Load Texture this.mEngine.getTextureManager().loadTexture(ballTexture); this.mEngine.getTextureManager().loadTexture(enterTexture); this.mEngine.getTextureManager().loadTexture(exitTexture); /create initial interface enter point enterBrick=new Door(10,270,50,50,enterTextureRegion
20、); Body enterBody=PhysicsFactory.createCircleBody(world, enterBrick, BodyType.StaticBody, wallFixtureDef); world.registerPhysicsConnector(new PhysicsConnector(enterBrick, enterBody, true, true, false, false); scene.getTopLayer().addEntity(enterBrick); enters.add(enterBrick); exitBrick=new Door(410,2
21、70,50,50,exitTextureRegion); Body exitBody=PhysicsFactory.createCircleBody(world, exitBrick, BodyType.StaticBody, wallFixtureDef); world.registerPhysicsConnector(new PhysicsConnector(exitBrick, exitBody, true, true, false, false); scene.getTopLayer().addEntity(exitBrick); enters.add(exitBrick); /cre
22、ate borders bottom=new Line(0, 320, 460, 320); bottom.setColor(0,256,0); Body bottomBody=PhysicsFactory.createBoxBody(this.world, bottom, BodyType.StaticBody, wallFixtureDef); world.registerPhysicsConnector(new PhysicsConnector(bottom, bottomBody, true, true, false, false); scene.getTopLayer().addEn
23、tity(bottom); top=new Line(0,10,460,10); top.setColor(0,256,0); Body topBody=PhysicsFactory.createBoxBody(this.world, top, BodyType.StaticBody, wallFixtureDef); world.registerPhysicsConnector(new PhysicsConnector(top, topBody, true, true, false, false); scene.getTopLayer().addEntity(top); left=new L
24、ine(10,0,10,320); left.setColor(0, 256, 0); Body leftBody=PhysicsFactory.createBoxBody(this.world, left, BodyType.StaticBody, wallFixtureDef); world.registerPhysicsConnector(new PhysicsConnector(left, leftBody, true, true, false, false); scene.getTopLayer().addEntity(left); right=new Line(460,0,460,
25、320); right.setColor(0, 256, 0); Body rightBody=PhysicsFactory.createBoxBody(this.world, right, BodyType.StaticBody, wallFixtureDef); world.registerPhysicsConnector(new PhysicsConnector(right, rightBody, true, true, false, false); scene.getTopLayer().addEntity(right); this.enableAccelerometerSensor(
26、this); scene.registerUpdateHandler(this.world); this.ball.enterList=enters; this.ball.scene=this.scene; prevScene=scene; return scene; public void onLoadComplete() public void loadLevel1() scene1=new Scene(2); ball=new Ball(200,10,32,32,ballTextureRegion); scene1.getTopLayer().addEntity(ball); world.registerPhysicsConnector(new PhysicsConnector(enterBrick,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1