0

2D マリオのようなゲームで衝突に関するバグが発生しました。

public void collision() {
    if (Rect.intersects(Robot.rect2, r)){
        robot.setSpeedY(0);
        robot.setCenterY(tileY - 32);
        robot.setJumped(false);
    } else if (Rect.intersects(Robot.rect, r)){
            robot.setSpeedY(0); 
            robot.setCenterY(tileY + 32);
    } 
    updateRect();
    if (Rect.intersects(Robot.rect3, r)){
        robot.setCenterX(tileX + 32);
        robot.setSpeedX(0);
    } else if (Rect.intersects(Robot.rect4, r)){
        robot.setCenterX(tileX - 32);
        robot.setSpeedX(0);
    }

}

私のゲームの衝突は、長方形を比較することによってチェックされます。私のロボットの四角形: rect (下の衝突、ロボット スプライトの下半分の四角形)、rect2 (上の衝突)、rect3 (左の衝突)、および rect4 (右の衝突)。

私のゲームのすべてのタイルは、インスタンス化された Rectangle r によって囲まれています。ロボットの四角形とタイルの四角形が交差すると、collision() が呼び出され、ロボットの方向の位置が設定されます。

ここに私の問題があります: ロボットが隅にいて、下と右が衝突している場合、右に移動すると、ロボットが右のタイルに移動し、下の衝突がトリガーされ、すべてが台無しになります。

下/上と右/左の衝突の位置を切り替えても、ロボットが地面に落ちて右/左の衝突が引き起こされるという同じ問題が発生するため、役に立ちません。

基本的に、4 つすべてを同時に実行する方法が必要です。ありがとう

4

2 に答える 2

0

はい、私もそれで問題がありました。あなたが見逃しているのは、 updateRect(); を呼び出すことです。X軸で衝突検出を行った後、もう一度。そして、最初に X 軸を確認することをお勧めします。ここにタイルベースの衝突に関する素晴らしい記事があります: http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/

于 2014-02-21T01:53:50.427 に答える