ゲーム内の敵を上下させようとしていました。スプライトのある物理ボディを使用しているため、エンティティ修飾子を使用できないため、スプライトが特定のポイントに到達するたびに .setLinearVelocity(float x, float y) メソッドを使用してボディを少し押すことにしました。画面で。
体が1つだけでもうまくいきますが、他の敵(同じスプライト、別の体)を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 に設定されているためです。コスタントは上向きに押します。3番目の体が入ってくると、2番目の体も落ち、この最後の体が代わりに上昇します
このコードでは、他にあまり期待していませんでした...しかし、他に何を試すことができるかわかりません...どうすればこれを制御できますか?
前もって感謝します :)
編集:以下のアンサーに作業コードを追加