1

私は過去数日間、単純なコリジョンを単純なゲームに入れようと試みてきました。私はインターネット上の多くの場所を見てきましたが、役立つものは何も見つかりませんでした. 私はバウンディングボックスを使用しているだけで、プレーヤーボックスが4つの側面のいずれかからブロックに当たったときに停止するだけです(ブロックに引っかかったり跳ね返ったりしません)。それほど難しくないように聞こえますが、信じられないほど難しいことがわかりました。if ステートメントの括弧に入れる必要があるコードを本当に知りたいだけです。私が取ることができるすべての理論を読んで聞いたことがあります。できれば助けてください。

if(bb_collide(player,block)){  //detection works just fine, 
                                      //just not sure what to do afterwards


    }
    else{
        player.setX((player.getX() + velx));
        player.setY((player.getY() - vely));
        player.set_coll(player.getX(),player.getY(),player.getWidth(),player.getHeight());
        block.set_coll(block.getX(),block.getY(),block.getWidth(),block.getHeight());

    }

私は実際にそれを理解しました.私はちょうど数日悪い日を過ごしていました.悪い態度や何かが好きだったら申し訳ありません. これは、ある移動オブジェクト (ムーバー) が別の静止オブジェクト (シッター) に衝突する場合に非常にうまく機能するため、誰かが興味を持っている場合に私が行ったことです。衝突する側面間の距離を検出し、速度をその距離から数を引いた値に設定して、重なり合わないようにします。境界ボックスをレンダリングしたので、それらが重なっていることがわかりました。返信ありがとうございます。

    public void Fix_Vel(Player mover, Terrain sitter){

    if(sitter.coll_box.contains(mover.getX() + mover.getHeight() + mover.getVelX(), mover.getY()) || 
            sitter.coll_box.contains(mover.getX() + mover.getHeight() + mover.getVelX(), mover.getY() + mover.getHeight()) ){        //mover top right and bottom right coords right collision testing

        mover.setVelX(sitter.getX() - (mover.getX() + mover.getWidth()) - 2);

    }

    if(sitter.coll_box.contains(mover.getX() + mover.getVelX(), mover.getY()) || 
            sitter.coll_box.contains(mover.getX() + mover.getVelX(), mover.getY() + mover.getHeight()) ){                               //mover top left + bottom left coords left collision testing

        mover.setVelX((sitter.getX() + sitter.getWidth()) - mover.getX() + 2);  

    }

    if(sitter.coll_box.contains(mover.getX(), mover.getY() + mover.getVelY()) || 
            sitter.coll_box.contains(mover.getX() + mover.getWidth(), mover.getY() + mover.getVelY())){                                 //mover top left + top right coords top collision testing

        mover.setVelY((sitter.getY() + sitter.getHeight()) - mover.getY() + 2);


    }

    if(sitter.coll_box.contains(mover.getX(), mover.getY() + mover.getHeight() + mover.getVelY()) ||                                //mover bottom left and bottom right coords bottom collision testing
            sitter.coll_box.contains(mover.getX() + mover.getWidth(), mover.getY() + mover.getHeight() + mover.getVelY())){

        mover.setVelY(sitter.getY() - (mover.getY() + mover.getHeight()) - 2);
        jumping = false;

        if(mover.getVelY() < 0)
            mover.setVelY(0);   

    }
}
4

2 に答える 2

0

たぶん、あなたはこのようなことをしたいですか?

if(bb_collide(player,block)){
    velx = 0;
    vely = 0;
}
else{
    player.setX((player.getX() + velx));
    player.setY((player.getY() - vely));
    player.set_coll(player.getX(),player.getY(),player.getWidth(),player.getHeight());
    block.set_coll(block.getX(),block.getY(),block.getWidth(),block.getHeight());

}
于 2013-05-14T12:10:32.210 に答える