我正在尝试将我的工作 java Snake 游戏移植到 JavaScript,以便人们可以在我的网站上玩它。
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);
}