Я новичок и двигатель.В настоящее время я хочу, чтобы мой игровой герой прыгал с помощью AndEngine и Box2D.Я перепробовал много способов сделать это.Но не удалось.
Вот мой код для перемещения персонажа влево и вправо при касании стрелок влево и вправо, отображаемых на экране.Теперь я хочу, чтобы он подпрыгнул при касании стрелки вверх.Вот мой код ...
public jump(int pLayerCount, final BaseGameActivity game) {
super(pLayerCount);
this.game=game;
gravity=new Vector2(0,SensorManager.GRAVITY_EARTH);
physicsWorld=new PhysicsWorld(gravity, false);
fixture=PhysicsFactory.createFixtureDef(1f, 1f, 1f);
camera_height=game.getEngine().getCamera().getHeight();
camera_width=game.getEngine().getCamera().getWidth();
bottom=new Rectangle(0, camera_height-5,camera_width,3);
PhysicsFactory.createBoxBody(physicsWorld, bottom,BodyType.StaticBody, fixture);
this.registerUpdateHandler(physicsWorld);
this.attachChild(bottom);
//walking image
texture=new Texture(256,256,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
tiletextureRegion=TextureRegionFactory.createTiledFromAsset(texture,game, "images/walk_forward.png",0,90,5,1);
game.getEngine().getTextureManager().loadTexture(texture);
walk_forward=new AnimatedSprite(0.0f,160.0f,tiletextureRegion);
this.attachChild(walk_forward);
//Up_arrow
texture=new Texture(256,256,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
textureRegion=TextureRegionFactory.createFromAsset(texture,game, "images/up_arrow.png",0,0);
game.getEngine().getTextureManager().loadTexture(texture);
Sprite up_arrow=new Sprite(30.0f,10.0f,textureRegion){
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
float pTouchAreaLocalX, float pTouchAreaLocalY)
{
left_touch=false;
right_touch=false;
up_touch=true;
return true;
}
};
//Left Arrow
texture=new Texture(256,256,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
textureRegion=TextureRegionFactory.createFromAsset(texture,game, "images/left_arrow.png",0,0);
game.getEngine().getTextureManager().loadTexture(texture);
Sprite left_arrow=new Sprite(2.0f,34.0f,textureRegion){
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
float pTouchAreaLocalX, float pTouchAreaLocalY)
{
left_touch=true;
right_touch=false;
walk_forward.animate(150);
return true;
}
};
//right Arrow
texture=new Texture(256,256,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
textureRegion=TextureRegionFactory.createFromAsset(texture,game, "images/right_arrow.png",0,0);
game.getEngine().getTextureManager().loadTexture(texture);
Sprite right_arrow=new Sprite(60.0f,34.0f,textureRegion){
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
float pTouchAreaLocalX, float pTouchAreaLocalY)
{
right_touch=true;
left_touch=false;
//walk_forward.animate(150);
return true;
}
};
//Down Arrow
texture=new Texture(256,256,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
textureRegion=TextureRegionFactory.createFromAsset(texture,game, "images/down_arrow.png",0,0);
game.getEngine().getTextureManager().loadTexture(texture);
Sprite down_arrow=new Sprite(30.0f,60.0f,textureRegion);
this.attachChild(up_arrow);
this.attachChild(left_arrow);
this.attachChild(right_arrow);
this.attachChild(down_arrow);
this.registerTouchArea(right_arrow);
this.registerTouchArea(left_arrow);
this.registerTouchArea(up_arrow);
this.setTouchAreaBindingEnabled(true);
//jumping image_physics
texture=new Texture(256,256,TextureOptions.BILINEAR_PREMULTIPLYALPHA);
textureRegion=TextureRegionFactory.createFromAsset(texture,game, "images/jump_up.png",0,90);
game.getEngine().getTextureManager().loadTexture(texture);
jump_up=new Sprite(0.0f,220.0f,textureRegion);
this.attachChild(jump_up);
fixture_jump=PhysicsFactory.createFixtureDef(1f, 0f, 1f);
jump_up_body=PhysicsFactory.createBoxBody(physicsWorld, jump_up,BodyType.DynamicBody, fixture_jump);
//jump_up_body.fixedRotation=true;
physicsWorld.registerPhysicsConnector(new PhysicsConnector(jump_up,jump_up_body));
// physicsWorld.clearForces();
hero_speed = 2; //just test and find values that work well
hero_max_speed = 4;
hero_normal = new Vector2(0, 0);
jump_speed = 16;
}
protected void onManagedUpdate(float pSecondsElapsed)
{
if(right_touch==true)
{
x=x+1f;
walk_forward.setPosition(x, walk_forward.getY());
}
if(left_touch==true)
{
x=x-1f;
walk_forward.setPosition(x, walk_forward.getY());
}
if(up_touch==true)
{
jump_up_body.applyLinearImpulse(new Vector2(0, -jump_speed), jump_up_body.getWorldCenter());
walk_forward.getY()+30);
}
super.onManagedUpdate(pSecondsElapsed);
}