我有一个精灵,必须永远下去,但是当我点击屏幕时它必须上升,像Flappy Bird一样闷闷不乐。我接下来试试
scene.registerUpdateHandler(detect);
IUpdateHandler detect = new IUpdateHandler() {
@Override
public void reset() {
}
@Override
public void onUpdate(float pSecondsElapsed) {
MoveYModifier mod2=new MoveYModifier(0.8f,plSprite.getY(),plSprite.getY()+10);
plSprite.registerEntityModifier(mod2);
}
};
和我键入屏幕时的代码
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
Log.d("myLogs","touch");
MoveYModifier mod2=new MoveYModifier(0.1f,plSprite.getY(),plSprite.getY()-40);
plSprite.registerEntityModifier(mod2);
return false; //To change body of implemented methods use File | Settings | File Templates.
}
但它不起作用,问题在于下一步。精灵只会下降。
答案 0 :(得分:1)
假设你有飞行猪游戏类似Flappy Bird。首先,你必须创建一个像这样的精灵:(x位置,y位置,纹理区域,顶点缓冲区对象管理器)
然后你附上一个肉体。你必须给你的物理世界,精灵,身体类型(你会对KinematicBody感兴趣)和夹具定义,它们是3个物理属性。
请记住将sprite和注册主体附加到您的物理世界。
最后,当你可以使用我提到的最后一种方法时,你应该将onTouch监听器注册到你的场景。它会对身体施加一股力量。请注意,要跳转,您需要传递负浮点参数。多亏了你的物理世界,如果指定引力,所有运动物体都会掉下来。
Sprite sPig = new Sprite(0, 155, ResourcesManager.getInstance().pig_region, vbom);
pigBody = PhysicsFactory.createBoxBody(physicsWorld, sPig, BodyType.KinematicBody, PhysicsFactory.createFixtureDef(10.0f, 0, 0));
physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPig, pigBody, true, false) {
@Override
public void onUpdate(float pSecondsElapsed) {
super.onUpdate(pSecondsElapsed);
//you can do some stuff here if you want.
});
attachChild(sPig);
//in onSceneTouchListener
pigBody.setLinearVelocity(0, -30);
//this is how i create physics world. 100f is y (down) gravitation force.
physicsWorld = new FixedStepPhysicsWorld(60, new Vector2(0, 100.0f), false);
registerUpdateHandler(physicsWorld);
PS你需要包含Box2D扩展名。我建议你看一些教程。