Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx
- 文档编号:21312395
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:15
- 大小:171.58KB
Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx
《Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx》由会员分享,可在线阅读,更多相关《Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
(2).onLoadResource()
加载资源。
其实加载资源多的工作可以放到onLoadScene()里面完成,但是作者既然写了这么个函数,我猜他就是想让代码层次清晰一些,在这里面你可以加载你需要的资源,以便后面加载场景的时候使用。
(3).onLoadScene()
加载场景。
有了镜头,就应该由场景吧,导演一般都是这么想的。
这时候你需要创建一个场景,场景里加载刚才的资源,最后将场景返回,最基本的游戏就可以起来了,此时游戏是没有规则的,但是程序已经可以启动,画面里只有你加载的资源。
(4).onLoadComplete()
这个函数是Option选项,写在其中的代码将在场景加载完毕后执行,相当于善后工作。
4.详细设计:
[Android]平衡球项目之andEngine资源加载
andEngine的资源加载十分简单,大概分为以下几步:
(1).构建实体
andEngine的库里有一个包就是Entity,中文翻译就是实体,Entity类下有很多类,他们都算实体类,可以生成实体,一个简单的举行实体如何定义:
Shaperectangle=newRectangle(0,0,50,50);
参数表明在(0,0)坐标点生成一个宽50高50的矩形,单位是像素,这样,一个实体就构建好了。
(2).加载实体
前面说过,我们看到手机屏幕显示的东西都是透过镜头(Camera)的,镜头看到的永远是场景(Scene),所以实体是加到场景里的,所以可以用如下语句加载实体:
this.scene.getTopLayer().addEntity(rectangle);
因为场景可以分层(Layer),所以我们用getTopLayer()来获取顶层场景。
我们前面谈及了如何在场景里加载实体,下面我们将讲讲我们如何让实体实现物理性质。
[Android]平衡球项目之andEngine的物理世界
很多物理引擎和游戏引擎都会有世界(World)的概念,andEngine也不例外,我们就是通过在场景里设置物理世界使得其中的物体具有物理性质的。
(1).主类中的一个成员变量:
privatePhysicalWorldworld;
(2).创建world实例:
this.world=newFixedStepPhysicsWorld(30,vector,false,8,1);
其中30代表FPS,vector代表了指定的重力加速度矢量,为Vector2类。
(3).这里有一个中间概念,物理对象,加入物理世界的实体通过物理对象赋予物理性质:
PrivatefinalFixtureDefwallFixtureDef=PhysicsFactory.createFixtureDef(1,0.5f,0.5f);
这里的参数决定了物理性质。
(4).为场景里的实体创造body,使其有血有肉:
Bodybody=PhysicsFactory.createBoxBody(world,ball,BodyType.DynamicBody,wallFixtureDef);
其中world指定所在的世界,为ball赋予物理性质,生成一个动态物体,与物理物体关联,产生一样的物理性质。
(5).为实体注册物理世界,这样才能使其具有物理性质:
world.registerPhysicsConnector(newPhysicsConnector(entityBrick,entityBody,true,true,false,false));
为实体entityBrick以entityBody生成物理物体。
至此,一个具有物理性质的实体就创建好了。
5.主要程序说明:
packagead.PW;
importjava.util.ArrayList;
importorg.anddev.andengine.engine.Engine;
importorg.anddev.andengine.engine.camera.Camera;
importorg.anddev.andengine.engine.options.EngineOptions;
importorg.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
importorg.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
importorg.anddev.andengine.entity.primitive.Line;
importorg.anddev.andengine.entity.primitive.Rectangle;
importorg.anddev.andengine.entity.scene.Scene;
importorg.anddev.andengine.entity.shape.Shape;
importorg.anddev.andengine.entity.util.FPSLogger;
importorg.anddev.andengine.extension.physics.box2d.FixedStepPhysicsWorld;
importorg.anddev.andengine.extension.physics.box2d.PhysicsConnector;
importorg.anddev.andengine.extension.physics.box2d.PhysicsFactory;
importorg.anddev.andengine.extension.physics.box2d.PhysicsWorld;
importorg.anddev.andengine.opengl.texture.Texture;
importorg.anddev.andengine.opengl.texture.TextureOptions;
importorg.anddev.andengine.opengl.texture.region.TextureRegion;
importorg.anddev.andengine.opengl.texture.region.TextureRegionFactory;
importorg.anddev.andengine.opengl.texture.region.TiledTextureRegion;
importorg.anddev.andengine.sensor.accelerometer.AccelerometerData;
importorg.anddev.andengine.sensor.accelerometer.IAccelerometerListener;
importorg.anddev.andengine.ui.activity.BaseGameActivity;
importcom.badlogic.gdx.math.Vector2;
importcom.badlogic.gdx.physics.box2d.Body;
importcom.badlogic.gdx.physics.box2d.FixtureDef;
importcom.badlogic.gdx.physics.box2d.BodyDef.BodyType;
publicclassPWActivityextendsBaseGameActivityimplementsIAccelerometerListener{
/**Calledwhentheactivityisfirstcreated.*/
//ForEngine
privateCameracamera;
//ForScene
publicPhysicsWorldworld;
//Gravity
publicVector2vector;
publicfloatGravityX;
publicfloatGravityY;
publicfloatGravityLimit=10;
//Ball
publicTextureballTexture;
publicTiledTextureRegionballTextureRegion;
privateBallball;
//Bricks
privateDoorenterBrick;
privateTextureenterTexture;
privateTextureRegionenterTextureRegion;
privateDoorexitBrick;
privateTextureexitTexture;
privateTextureRegionexitTextureRegion;
publicArrayList<
Brick>
bricks;
//Enter
Door>
enters;
//createaphysicalobject
privatefinalFixtureDefwallFixtureDef=PhysicsFactory.createFixtureDef(1,0.5f,0.5f);
//createborders
publicLinebottom;
publicLinetop;
publicLineleft;
publicLineright;
publicScenescene;
publicSceneprevScene;
staticScenescene1;
staticScenescene2;
publicEngineonLoadEngine(){
camera=newCamera(10,10,460,320);
returnnewEngine(newEngineOptions(true,ScreenOrientation.LANDSCAPE,newRatioResolutionPolicy(460,320),camera));
}
publicvoidonLoadResources(){
ballTexture=newTexture(128,128,TextureOptions.DEFAULT);
ballTextureRegion=TextureRegionFactory.createTiledFromAsset(ballTexture,this,"
silver_ball.png"
0,32,2,1);
enterTexture=newTexture(128,128,TextureOptions.DEFAULT);
enterTextureRegion=TextureRegionFactory.createFromAsset(enterTexture,getApplicationContext(),"
block_enter.png"
0,0);
exitTexture=newTexture(128,128,TextureOptions.DEFAULT);
exitTextureRegion=TextureRegionFactory.createFromAsset(exitTexture,getApplicationContext(),"
block_exit.png"
publicSceneonLoadScene(){
scene=newScene
(2);
//scene.setBackground(newColorBackground(256,256,256));
enters=newArrayList<
();
//createaphysicalworld
vector=newVector2(0,1);
this.world=newFixedStepPhysicsWorld(30,vector,false,8,1);
ball=newBall(5,10,32,32,ballTextureRegion);
Bodyballbody=PhysicsFactory.createCircleBody(world,ball,BodyType.DynamicBody,wallFixtureDef);
world.registerPhysicsConnector(newPhysicsConnector(ball,ballbody,true,true,false,false));
scene.getTopLayer().addEntity(ball);
//create
this.ball.test=this;
this.ball.enterList=enters;
//registeranewFPSLogger
this.mEngine.registerUpdateHandler(newFPSLogger());
//LoadTexture
this.mEngine.getTextureManager().loadTexture(ballTexture);
this.mEngine.getTextureManager().loadTexture(enterTexture);
this.mEngine.getTextureManager().loadTexture(exitTexture);
//createinitialinterfaceenterpoint
enterBrick=newDoor(10,270,50,50,enterTextureRegion);
BodyenterBody=PhysicsFactory.createCircleBody(world,enterBrick,BodyType.StaticBody,wallFixtureDef);
world.registerPhysicsConnector(newPhysicsConnector(enterBrick,enterBody,true,true,false,false));
scene.getTopLayer().addEntity(enterBrick);
enters.add(enterBrick);
exitBrick=newDoor(410,270,50,50,exitTextureRegion);
BodyexitBody=PhysicsFactory.createCircleBody(world,exitBrick,BodyType.StaticBody,wallFixtureDef);
world.registerPhysicsConnector(newPhysicsConnector(exitBrick,exitBody,true,true,false,false));
scene.getTopLayer().addEntity(exitBrick);
enters.add(exitBrick);
//createborders
bottom=newLine(0,320,460,320);
bottom.setColor(0,256,0);
BodybottomBody=PhysicsFactory.createBoxBody(this.world,bottom,BodyType.StaticBody,wallFixtureDef);
world.registerPhysicsConnector(newPhysicsConnector(bottom,bottomBody,true,true,false,false));
scene.getTopLayer().addEntity(bottom);
top=newLine(0,10,460,10);
top.setColor(0,256,0);
BodytopBody=PhysicsFactory.createBoxBody(this.world,top,BodyType.StaticBody,wallFixtureDef);
world.registerPhysicsConnector(newPhysicsConnector(top,topBody,true,true,false,false));
scene.getTopLayer().addEntity(top);
left=newLine(10,0,10,320);
left.setColor(0,256,0);
BodyleftBody=PhysicsFactory.createBoxBody(this.world,left,BodyType.StaticBody,wallFixtureDef);
world.registerPhysicsConnector(newPhysicsConnector(left,leftBody,true,true,false,false));
scene.getTopLayer().addEntity(left);
right=newLine(460,0,460,320);
right.setColor(0,256,0);
BodyrightBody=PhysicsFactory.createBoxBody(this.world,right,BodyType.StaticBody,wallFixtureDef);
world.registerPhysicsConnector(newPhysicsConnector(right,rightBody,true,true,false,false));
scene.getTopLayer().addEntity(right);
this.enableAccelerometerSensor(this);
scene.registerUpdateHandler(this.world);
this.ball.enterList=enters;
this.ball.scene=this.scene;
prevScene=scene;
returnscene;
publicvoidonLoadComplete(){}
publicvoidloadLevel1(){
scene1=newScene
(2);
ball=newBall(200,10,32,32,ballTextureRegion);
scene1.getTopLayer().addEntity(ball);
world.registerPhysicsConnector(newPhysicsConnector(enterBrick,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 平衡 项目 andEngine 物理 世界 开发 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)