Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx

上传人:b****6 文档编号:21312395 上传时间:2023-01-29 格式:DOCX 页数:15 大小:171.58KB
下载 相关 举报
Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx_第1页
第1页 / 共15页
Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx_第2页
第2页 / 共15页
Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx_第3页
第3页 / 共15页
Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx_第4页
第4页 / 共15页
Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx

《Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx》由会员分享,可在线阅读,更多相关《Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

Android平衡球项目之andEngine的物理世界开发文档Word文档格式.docx

(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,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1