JS 게임 (Snake)을 작성하는 중 문제가 발생했습니다. 뱀 몸에서 divs를 분리 할 수 없습니다. 이제 나는 뱀의 몸의 한 부분이 한 방향으로 움직이지만 다른 하나는 다른 블록으로 움직인다는 것을 알게되었다. 나는 그들을 뱀처럼 떼어 내고 싶지만 그것을 어떻게 할 지 모릅니다. 누군가 조언을 해줄 수 있습니까? 여기스네이크 본문에서 div를 분리하는 방법 (Snake JS 게임)
// field object
var fieldObj = {
field: document.getElementById("field"),
w: 480,
h: 580
},
// snake object
snakeObj = {
snakeBody: document.getElementsByClassName("snake-body"),
p: {
x: 0, // position x
y: 0 // position y
},
v: {
x: 1, // velocity(here you can change speed)
y: 1
},
keys: {
up: null,
l: null,
r: null,
down: null
},
update: function() {
// this.snake.style.top = this.p.x + "px";
// this.snake.style.left = this.p.y + "px";
if (this.keys.down) {
this.p.x += this.v.x;
} else if (this.keys.up) {
this.p.x -= this.v.x;
} else if (this.keys.r) {
this.p.y += this.v.y;
}else if (this.keys.l) {
this.p.y -= this.v.y;
}
for (var i = this.snakeBody.length - 1; i >= 0; i--) {
this.snakeBody[i].style.top = this.p.x + "px";
this.snakeBody[i].style.left = this.p.y + "px";
}
}
},
// game object
gameObj = {
getRandom: function(num) {
return Math.floor(Math.random() * num);
},
createSnakeTarget: function() {
var snakeTarget = document.createElement("div");
snakeTarget.className = "snake-target";
snakeTarget.style.top = this.getRandom(fieldObj.h) + "px";
snakeTarget.style.left = this.getRandom(fieldObj.w) + "px";
fieldObj.field.appendChild(snakeTarget);
},
stopGame: function() {
var stopMessage = document.createElement("div");
stopMessage.className = "stop-message";
stopMessage.style.background = "white";
fieldObj.field.appendChild(stopMessage);
//TODO: write message to stopGame
}
};
gameObj.createSnakeTarget();
//gameObj.stopGame();
// Crome works only with keydown and keyup
window.addEventListener('keydown', function() {
// before changing direction you have to put previous direction to false
if (event.keyCode == 38) {
snakeObj.keys.up = true;
snakeObj.keys.down = false;
} else if (event.keyCode == 40) {
snakeObj.keys.down = true;
snakeObj.keys.up = false;
} else if (event.keyCode == 39) {
snakeObj.keys.r = true;
snakeObj.keys.up = false;
snakeObj.keys.down = false;
} else if (event.keyCode == 37) {
snakeObj.keys.l = true;
snakeObj.keys.r = false;
snakeObj.keys.up = false;
snakeObj.keys.down = false;
}
}, false);
//TODO: add event hendler to click to some button
window.addEventListener("load", function gameLoop() {
snakeObj.update();
requestAnimationFrame(gameLoop);
}, false);
가 사전에 http://codepen.io/Kuzyo/pen/esFbf
감사 codepen된다 여기 내 JS 코드 (전용 크롬에서 작동)입니다.
가능한 모든 키를 시도했지만 뱀이 움직이지 않았습니다. 실제로 작동합니까? – MightyPork
작동합니다. 화살표 키를 누릅니다. 어쩌면 필드를 클릭하고 포커스를받은 후 화살표 키 – kuzyoy
을 눌러야 할 것입니다. 방화 광에서 'ReferenceError : event is not defined'를 제공하기 만하면됩니다. – MightyPork