0

帆布に宇宙船があります。速度がship.vxあり、ship.vy。キャンバスの境界線から30px離れたら、背景オブジェクトを船の反対方向に設定して移動しship.vxます。この瞬間、船はある地点で立ち往生しています。それはすべて良いです。ここで、左右()または上から下( )に移動しようとすると、 &がに設定されているポイントでスタックしているため、移動しません。ship.vy0stuck at top/bottomstuck at left/rightvxvy0

反対方向に加速すると、その速度(約2)を選択するのに5秒ほどかかるので、基本的に同じポイントで5秒間です。

X軸から外れたとき、またはその逆に設定vyしないようにしましたが、船はもう一方の軸でゆっくりと動き続けます。0

ですから、私が達成しようとしているのは、船が境界から30ピクセル離れたときにスタックすることですが、他の3方向に移動または加速しようとすると、スタックしていないふりをします。

メカニズムを知っている人はいますか?
ありがとう。

function stuckShip(){
    if(
                (ship.x - ship.width < 0)  || 
                (ship.x + ship.width > w)  ||
                (ship.y + ship.height > h) ||
                (ship.y - ship.height < 0))
              {
        ship.vx = 0;
        ship.vy = 0;
     }

}


function againAndAgain(){
    var angle = ship.rotation;

    var x = Math.cos(angle);
    var y = Math.sin(angle);        

    var ax = x*thrust,
        ay = y*thrust;

    ship.vx += ax;
    ship.vy += ay;

            stuckShip();
            ship.draw(context);

}

document.addEventListener('keydown', function(e){
    switch(e.keyCode){
        case 38:
            thrust = 0.35;
        break;
        case 37:
            ship.rotation -= 3;
        break;
        case 39:
            ship.rotation += 3;
        break;


    }
}
4

2 に答える 2

0

表示目的で画面上の位置に基づいてオブジェクトの速度を操作することは、決して最善のアイデアではありません。多くの場合、親ベースのシステムを使用するため、メインコンテナが1つあり、すべてのオブジェクト(船を含む)はそのコンテナの子であり、メインコンテナに対して相対的に移動します。これで、船のグローバル位置がその30px帯域にある場合、コンテナの位置を更新して、画面の端で「ロック」することができます。

于 2013-03-25T08:04:10.177 に答える
0

ははは、シンプルで、船の位置を国境から31pxに設定するだけです。

if(ship.x <= 30){
   ship.x = 30 + 1;
}

船が左から30pxのとき、ship.x31に設定されるので、スタックすることはなく、1px前後に振るだけです。それが完璧な解決策かどうかはわかりませんが、5秒間船を引き戻すことはできません。

于 2013-03-25T10:48:21.137 に答える