私は、脱出速度に似た感じのミニ宇宙船のゲームを作成しています。私は慣性が正しく働くように見えません。 私は回転機能にも問題があります。左または右の矢印キーをタップすると、起こっているはずの円形の動きに似た何かを追いかけません。宇宙船の動き
$(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の変数に間違いがあるかどうかも知っていますか?船はまだ完全に予期せぬ方法で変わります。 –
慣性はオブジェクトの速度を変更するための抵抗です。モーメントは、質量の速度に等しい量であり、外力が加えられていない限り(船のエンジンなどから)保存されている量です。モデルの勢いをモデル化するためには、船の速度をフレーム間で一定に保つだけです。慣性をモデル化するには、船の速度があまりにも速く変化しないようにする必要があります。これは、加速を小さな定数にすることで可能です。ダイジェストがたくさんあるので、なぜこのチャットルームに参加しないでください:http://chat.stackoverflow.com/rooms/7722/spaceship-physics – Clueless