作業中の Java Snake ゲームを JavaScript に移植して、人々が私の Web サイトでプレイできるようにしようとしています。
DEMO TO GAME HERE ... 矢印キーを押して、スプライトの上を走ってみてください。
このスネークでは、カメラのコツをつかみたいと思っていたので、スネークを追うカメラを実装しました (スネークは真ん中にあります)。カメラが「世界」の端に到達すると、ヘビは世界の端に到達するまで進み続けることができます。
通常、配列内の最後の要素を取得して新しいセグメントをスネークの最後に追加し、x,y
最後のセグメントが移動したら、新しいセグメントをそのセグメントに設定します。すべてのセグメントをテールとして移動するには、移動前のセグメントを保存してx,y
から、すべてのセグメントをその前のセグメントに設定します。
何かのようなもの:
function getPrevCoords() {
for (i = 1; i < players.length; i++) {
prevX[i] = players[i-1].x;
prevY[i] = players[i-1].y;
}
}
function moveTail() {
//just need to move head, and set rest of player containers to the last position of head..
for (j = 1; j < players.length; j++) {
players[j].x = prevX[j];
players[j].y = prevY[j];
}
}
私の質問:カメラと、すべてのオブジェクトをカメラ座標とワールド座標の関係に配置することで、私はうんざりします。
カメラを世界の端に移動させてからプレイヤーを移動し続けるには、次のロジックを使用します。
if (direction == "right") {
if (camX < (world.w - camW) && (players[0].x == camW/2)) {
camX+=velocity;
}
else {
if (players[0].x < (camW-15)) {
players[0].x += velocity;
moveTail();
}
else {
console.log("HIT RIGHT WALL. GAME OVER.");
reset();
}
}
}
これに関する問題は、新しいセグメントを追加するときに、x,y
移動後にその前のセグメントに設定することです。上記のように、カメラを移動するときは、カム座標のみを移動し、プレーヤーx,y
をカメラの中央に設定する必要があります。x,y
カメラが世界の端に到達し、プレーヤーが動き続ける必要がある場合にのみ、プレーヤーを変更します。したがって、余分なボディ セグメントは、プレーヤーが更新されたときにのみずらして落下することに気付くでしょうx,y
...カムが動いているとき、プレーヤーはx,y
変化しないため、すべてのボディ セグメントはx,y
互いに等しくなります。
それを解決する方法についてのアイデアはありますか?
更新されたコード:
含めるように更新しましたcenterViewTo
...写真からわかるように、すべてを左上に配置するだけです。
function createPlayers() {
playerBMP = new createjs.Bitmap("Images/cat_sit.png");
playerContainer = new createjs.Container();
playerContainer.addChild(playerBMP);
centerViewTo(stage.canvas, stage, playerContainer, {x:0, y:0, width:bg.image.width, height:bg.image.height});
stage.addChild(playerContainer);
}
function createNPCs() {
npcBMP = new createjs.Bitmap("Images/myBmp.png");
npcBMP2 = new createjs.Bitmap("Images/myBmp.png");
npcContainer = new createjs.Container();
npcContainer2 = new createjs.Container();
npcContainer.addChild(npcBMP);
npcContainer2.addChild(npcBMP2);
centerViewTo(stage.canvas, stage, npcContainer, {x:0, y:0, width:bg.image.width, height:bg.image.height});
centerViewTo(stage.canvas, stage, npcContainer2, {x:0, y:0, width:bg.image.width, height:bg.image.height});
stage.addChild(npcContainer);
stage.addChild(npcContainer2);
}