我希望以与本视频相同的方式移动精灵。我正在使用AndEngine。如何使用 AndEngine Box2D 物理扩展移动忍者(精灵),完成移动和跳跃。
这是我的 MainActivity1.class:
public class MainActivity1 extends BaseGameActivity {
Scene scene;
private TiledTextureRegion mPlayerTextureRegion;
private BoundCamera mBoundChaseCamera;
private static final int CAMERA_WIDTH = 1024;
private static final int CAMERA_HEIGHT = 600;
private BitmapTextureAtlas mBitmapTextureAtlas;
private BitmapTextureAtlas mBitmapTextureAtlasp;
private BitmapTextureAtlas mBitmapTextureAtlashm;
private TextureRegion mhomeTextureRegion;
private BitmapTextureAtlas mBitmapTextureAtlas1;
AnimatedSprite player;
private Body playerBody;
private PhysicsWorld mPhysicsWorld;
private BitmapTextureAtlas sheetBitmapTextureAtlas1;
private BitmapTextureAtlas sheetBitmapTextureAtlasplaybtn1;
private TiledTextureRegion mTargetTextureRegionplaybtn1;
public void onLoadComplete() {
// TODO Auto-generated method stub
}
public Engine onLoadEngine() {
// TODO Auto-generated method stub
final Display display = getWindowManager().getDefaultDisplay();
int cameraWidth = display.getWidth();
int cameraHeight = display.getHeight();
// Toast.makeText(this, "The tile the player is walking on will be highlighted.", Toast.LENGTH_LONG).show();
this.mBoundChaseCamera = new BoundCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(cameraWidth, cameraHeight), this.mBoundChaseCamera));
}
public void onLoadResources() {
// TODO Auto-generated method stub
mBitmapTextureAtlas = new BitmapTextureAtlas(512, 512,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
mBitmapTextureAtlas1 = new BitmapTextureAtlas(1024, 1024,
TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.sheetBitmapTextureAtlasplaybtn1 = new BitmapTextureAtlas(512, 512);
mTargetTextureRegionplaybtn1 = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset(sheetBitmapTextureAtlasplaybtn1, this,
"gfx/gameplay_stormstrike_full.png", 0, 212,1, 1);
this.mBitmapTextureAtlasp = new BitmapTextureAtlas(512, 512, TextureOptions.DEFAULT);
this.mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlasp, this, "gfx/storm_strike.png", 0, 0, 1, 1); // 72x128
mTargetTextureRegion1 = BitmapTextureAtlasTextureRegionFactory
.createTiledFromAsset(sheetBitmapTextureAtlas1, this,
"gfx/kolobok_04_walk.png", 0, 212,12, 1);
this.mEngine.getTextureManager().loadTexture(this.sheetBitmapTextureAtlas);
this.mEngine.getTextureManager().loadTexture(this.sheetBitmapTextureAtlas1);
BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlashm, this, "gfx/loading_ipad.png", 0, 0);
mEngine.getTextureManager().loadTexture(mBitmapTextureAtlas);
mEngine.getTextureManager().loadTexture(sheetBitmapTextureAtlasplaybtn1);
mEngine.getTextureManager().loadTexture(mBitmapTextureAtlasp);
mEngine.getTextureManager().loadTexture(mBitmapTextureAtlas1);
mEngine.getTextureManager().loadTexture(mBitmapTextureAtlashm);
}
public Scene onLoadScene() {
// TODO Auto-generated method stub
this.mEngine.registerUpdateHandler(new FPSLogger());
scene = new Scene();
scene.setBackground(new ColorBackground(0, 0, 0.8784f));
this.mPhysicsWorld = new FixedStepPhysicsWorld(30, new Vector2(0, 0), false, 8, 1);
final Sprite help = new Sprite(50, 70, mProjectileTextureRegionhelp);
scene.attachChild(help);
help.setVisible(false);
player = new AnimatedSprite(100, 200, 150,150,this.mPlayerTextureRegion)
{
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
switch(pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
playerBody.setLinearVelocity(10f,-10f);
break;
case TouchEvent.ACTION_MOVE:
break;
case TouchEvent.ACTION_UP:
break;
}
return true;
}
};
scene.attachChild(player);
scene.registerTouchArea(player);
projectilesToBeAdded.add(player);
AnimatedSprite playerbtn = new AnimatedSprite(10, 200, this.mTargetTextureRegionplaybtn1)
{
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
switch(pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
playerBody.applyForce(new Vector2(200,-1500), new Vector2(playerBody.getWorldCenter()));
break;
case TouchEvent.ACTION_MOVE:
break;
}
return true;
}
};
scene.attachChild(playerbtn);
scene.registerTouchArea(playerbtn);
final FixtureDef carFixtureDef = PhysicsFactory.createFixtureDef(10.0f, 0.5f, 0.5f);
this.playerBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld, this.player, BodyType.DynamicBody, carFixtureDef);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(this.player, this.playerBody, true,false));
scene.setTouchAreaBindingEnabled(true);
this.scene.registerUpdateHandler(this.mPhysicsWorld);
return scene;
}
}