0

さて、私はJavaの学習を始めたばかりです(私は通常Objective-Cでプログラムします)。私の最初のゲームはポケモンに似たゲームですが、明らかにもっと単純化されています...

私が抱えている問題は、2つのスプライトが互いに「ゴースティング」するのを防ぐ方法が見つからないことです。画面には、境界線(境界線)、プレーヤースプライト、および敵スプライトが設定されています。

public void playerUpdate(GameContainer gc, int delta) throws SlickException
{
    Input input = gc.getInput();

    // Right Key Pressed
    if (input.isKeyDown(Input.KEY_RIGHT) && (leftKeyPressed == false)
            && (upKeyPressed == false) && (downKeyPressed == false))
    {
        player = walkRight;
        playerX += speed * delta;
        rightKeyPressed = true;
        if (playerX >= Main.getWindowWidth() - pImageWidth)
        {
            playerX -= speed * delta;
        }
    } else if (rightKeyPressed == true) 
    {
        player = standRight; 
        rightKeyPressed = false;
    } 

^^ここで衝突検出を実装する必要があります。衝突検出のために各画像に長方形を追加しましたが、長方形を非表示にする方法はありません。あるスプライトが別のスプライトを通り抜けるのを防ぐ方法が必要です。

何か案は?

使ってみました

if (this.playerBoundingBox.intersects(Enemy.getEnemyBoundingBox())
{
    playerX += speed * delta;
}

ただし、これを実装すると、プレーヤーがスタックし、解放できなくなります。

みんなありがとう

4

1 に答える 1

1

衝突検出は広く深いトピックであり、それを実装する方法はたくさんあります。

2Dプラットフォーマーを実装するためのガイドを読むことを強くお勧めします。これはあなたにいくつかの素晴らしいアドバイスを与えるはずです。Sonic RetroPhysicsGuideを使用して2Dプラットフォームエンジンを実装しました。これは非常に便利でした。

私のゲームClover:A Curious Tale I(不必要に!)では、バウンディングボックスとのピクセルごとの衝突のより複雑なハイブリッドを実装しました。アプローチは、目的の移動パスを作成し、ピクセルごとにチェックして、何かが邪魔になっていないかどうかを確認することでした。邪魔になっている場合は、そのピクセルから1を引いた距離まで移動します。

すべての状況で完璧な2Dエンジンを作成することは非常に難しい作業であり、あなたが試みるべきものではありません。俳優のサイズなどにいくつかの制限があり、1ティックで何でも移動できる最大速度は、あなたの生活を楽にします。プレーヤーを押す可能性のあるものを省略すると、衝突検出を1回だけ1つの「方向」で行う必要があるため(つまり、他のすべてのアクターが移動するときではなく、プレーヤーが移動するとき)、はるかに簡単になります。

于 2012-06-26T08:10:06.513 に答える