1

AndEngineゲームでは、ボールの物理ボディを投げたいです。ユーザーは角度と力を設定して投げます。そのシナリオは、AngryBirdsで見ることができるものと同じです。力と角度の両方を計算しましたが、両方を同時にボールに適用する方法がわかりません。つまり、ボールは計算された角度で、特定の力で投げられる必要があります。誰かが私を正しい方向に導くことができますか?

これが私のコードスニペットです:

@Override
public boolean onAreaTouched(TouchEvent event,ITouchArea pTouchArea, float x, float y) {
    // TODO Auto-generated method stub
    if(event.isActionDown()) {
        ......
    }
    else if(event.isActionMove()) {
        ......
    }
    else if(event.isActionCancel() || event.isActionOutside() || event.isActionUp()) {
        .....
        launchHero(hero, string1.getX1()/PIXEL_TO_METER_RATIO_DEFAULT, string1.getY1()/PIXEL_TO_METER_RATIO_DEFAULT, x/PIXEL_TO_METER_RATIO_DEFAULT, y/PIXEL_TO_METER_RATIO_DEFAULT);
}

public void launchHero(Hero hero, float originX, float originY, float fingerX, float fingerY) {
    Vector2 shoot = new Vector2((originX - fingerX), -(originY - fingerY));
    shoot = shoot.nor().mul(10);

    hero.getBody().setLinearVelocity(shoot);

}
    }

    return false;

}

(originY-fingerY)にネガティブを追加しました。これを行わないと、ボールが最初に下がってから、ベースに衝突した後、上に上がるからです。

4

2 に答える 2

4

とても簡単Body.setLinearVelocity(Vector2 pVector)です。方向と力の両方が、ベクトルのパラメータによって決定されます。サンプルコードは次のとおりです。

Vector2 shoot = new Vector2((originX - fingerX), (originY - fingerY));
body.setLinearVelocity(shoot);

これは、指と元の場所、または Angry Birds の場合は指とスリングの方向に体を撃ちます。

力を一定にして何倍にもしたい場合は、射撃前にこれを行うことができます:

shoot = shoot.nor().mul(multiplier);
于 2012-09-25T11:32:21.550 に答える
0

使用できます

body.applyLinearImpulse(Vector2 impulse, Vector2 point)

setLinearVelocityより多くの可能性が得られるため、私はこの機能をオンにすることを好みます。この関数を使用するには、インパルスを適用する座標とボディのポイントの両方に与える必要があります。

于 2012-09-26T16:56:44.383 に答える