我试图让我的游戏中的敌人上上下下;因为我使用的是带有 Sprite 的物理体,所以我不能使用实体修饰符,所以我决定每次它的 sprite 到达某个点时使用 .setLinearVelocity(float x, float y) 方法稍微推动一下身体在屏幕中。
只有一个身体效果很好,但我需要让其他敌人(相同的精灵,不同的身体)每 5 秒产生一次并做同样的事情,但我不知道如何跟踪它们......我的意思是,我不知道不知道如何控制每个物体是否彼此独立地到达 Y 位置...
例如,现在的代码是这样的:
private void add_Box_Face()
{
float random_x = (float) (28 + (int)(Math.random() * ((this.CAMERA_WIDTH - 28*2) + 1)));
final Body rectangle_face_body;
final Sprite rectangle_face = new Sprite(random_x, this.y, this.mRectangleFaceTextureRegion, this.getVertexBufferObjectManager());
rectangle_face_body = PhysicsFactory.createBoxBody(this.m_PhysicsWorld, rectangle_face, BodyType.DynamicBody, this.BOX_FIXTURE_DEF);
rectangle_face_body.setUserData("target");
//I give the body a initial push
rectangle_face_body.setLinearVelocity(0, -5);
//I register an update handler to the sprite to control if it reaches a certain Y value
rectangle_face.registerUpdateHandler(new IUpdateHandler()
{
@Override
public void onUpdate(float pSecondsElapsed)
{
if (rectangle_face.getY() >= y-50)
{
//Here I just use a flag so that later on below I can do the push
MyApp.this.setLinearVelocity = true;
}
}
@Override
public void reset()
{
// TODO Auto-generated method stub
}
});
//Here I register the physic connector and if the flag permits it, I push the body up
this.m_PhysicsWorld.registerPhysicsConnector(new PhysicsConnector(rectangle_face, rectangle_face_body, true, false)
{
@Override
public void onUpdate(float pSecondsElapsed)
{
super.onUpdate(pSecondsElapsed);
if(MyApp.this.setLinearVelocity)
{
rectangle_face_body.setLinearVelocity(0, -3);
MyApp.this.setLinearVelocity = false;
}
}
});
this.mscene.attachChild(rectangle_face);
}
使用这样的代码,第一个主体执行计划的操作,它上下移动,但是一旦另一个主体弹出,它就会下降,另一个主体会上升,因为布尔值 setLinearVelocity 总是设置为 true,所以有一个不断向上推;当第三个身体进来时,第二个身体也会倒下,最后一个身体会上升
有了这段代码,我并没有期待太多……但我不知道我还能尝试什么……我该如何控制呢?
提前致谢 :)
编辑:在下面的 anwser 中添加了工作代码