0
나는 탈출 속도와 비슷한 느낌의 미니 우주선 게임을 만들고 있습니다. 관성이 제대로 작동하지 않는 것 같습니다. 회전 기능에 문제가 있습니다. 왼쪽 또는 오른쪽 화살표 키를 탭하면 순환 형 운동과 유사하지 않습니다. 켜거나 관성 포함하지 않는 고전적인 공간 침략자 형 게임을 함께 할 수 있습니다에서 나는 스택 오버 플로우와 인터넷을 검색하지만, 대부분의 질문에 한우주선 무브먼트
$(function() {
var canvas = Raphael('game', 1000, 800);
var background = canvas.rect(0, 0, 1000, 800);
background.attr("fill", "black");
var ship = canvas.rect(200, 200, 10, 35);
ship.attr("fill", "red");
ship.angle = 0;
ship.turnrate = 4;
ship.maxSpeed = 2;
ship.acc = 0;
ship.accSpeed = 0.25;
ship.vel = [0,0];
var up = 0;
var left = 0;
var right = 0;
var speedx = 0;
var speedy = 0;
function moveShip() {
if (left == 1) {
ship.angle = (ship.angle - ship.turnrate) % 360;
}
if (right == 1) {
ship.angle = (ship.angle + ship.turnrate) % 360;
}
if (up == 1) {
if (ship.acc < ship.maxSpeed) {
ship.acc += ship.accSpeed;
}
if (ship.acc > ship.maxSpeed) {
ship.acc = ship.speed;
}
}
if (up == 0) {
if (ship.acc > 0) {
ship.acc -= ship.accSpeed;
}
if (ship.acc < 0) {
ship.acc = 0;
}
}
speedx = ship.vel[0] + ship.acc * Math.sin(ship.angle);
speedy = ship.vel[1] + ship.acc * Math.cos(ship.angle);
ship.vel = [speedx, speedy];
ship.transform("");
ship.rotate(ship.angle);
ship.attr({x: ship.vel[0], y: ship.vel[1]});
$("#stats").text("ship.angle: " + ship.angle
+ " vel[0]: " + ship.vel[0] + " vel[1]: " + ship.vel[1]
+ " ship.speed: " + ship.maxSpeed + " speedx: " + speedx + " speedy: " + speedy);
}
function keyPressed(evt) {
if (evt.keyCode == 38) {
up = 1;
}
if (evt.keyCode == 37) {
left = 1;
}
if (evt.keyCode == 39) {
right = 1;
}
}
function keyReleased(evt) {
if (evt.keyCode == 38) {
up = 0;
}
if (evt.keyCode == 37) {
left = 0;
}
if (evt.keyCode == 39) {
right = 0;
}
}
function gameloop() {
moveShip();
}
$(document).keydown(keyPressed);
$(document).keyup(keyReleased);
setInterval(gameloop, 30);
});
.
도움이 될만한 점은, 내가 누락 된 부분을 잘 이해하고 싶다는 것입니다.
나는 관성, 내가 그것을 얼마나 다른 확실하지를 제어 할 수 있도록 내가 ship.accSpeed을 필요가 있다고 생각합니다. 또한 speedx 또는 speedy 변수에 문제가 있는지 알고 있습니까? 배는 여전히 예기치 못한 방식으로 변합니다. –
관성 (Inertia)은 물체의 속도를 바꾸기위한 저항입니다. 기세는 질량 시간 속도와 동등한 양이며 외력이 가해지지 않는 한 보존됩니다 (예 : 선박 엔진에서). 모멘텀을 모델링하려면 프레임 사이의 속도를 일정하게 유지해야합니다. 관성을 모델링하려면 배가 너무 빨리 속도를 변경하지 않도록해야합니다. 가속도를 작은 상수로 만들어서 할 수 있습니다. 소화 할 것이 많기 때문에이 대화방에 참여하지 않으시겠습니까? http://chat.stackoverflow.com/rooms/7722/spaceship-physics – Clueless