I am struggling with player movement in moving canvas game. Moving means left, right or jump using keys. Canvas movement is presented by an offset variables which moves all object on the scene left or right but it also moves the player. So basically the player stands on one spot all the time and canvas is moving left or right... So the player gets off the canvas screen. You can check on this website
If you need more information, just leave a comment but I think there should be everything what is necessary for the logic.
Thanks
function Player(x, y) {
var size = 80;
GameObject.call(this, x, y, size);
this.img = document.getElementById("lopta");
this.rotation = 0;
this.dx = 0;
this.dy = 0;
}
var r = this.size * 0.5;
// Dedi vlastnosti z GameObject
Player.prototype = Object.create(GameObject.prototype);
Player.prototype.move = function(dt) {
var x = this.x;
var y = this.y;
this.dx = 0;
var sirka = canvas.width;
var vyska = canvas.height;
var bounce = 0.6;
// Posun
if ( keys[37] ) {
offsetX++;
this.rotation -= dt;
//this.dx -= offsetX;
if(candy != 0)
candy -= 1;
else
gameOver();
}
if ( keys[39] ) {
offsetX--;
this.rotation += dt;
//this.dx += offsetX;
if(candy != 0)
candy -= 1;
else
gameOver();
}
if ( keys[38] && Math.abs(this.dy)<2) {
this.dy -= 70;
keys[38] = false;
if(candy != 0)
candy -= 3;
else
gameOver();
}
// Posun
x = x + this.dx;
y = y + this.dy*dt;
// Test novej pozicie
var collision = false;
for (i in enemy) {
var obj_enemy = enemy[i];
var r = this.size * 0.5;
var test_enemy =
//kolizia od objektu napravo
x - r >= obj_enemy.x + obj_enemy.size ||
//kolizia od objektu nalavo
x + r <= obj_enemy.x ||
//kolizia pod objektom
y - r >= obj_enemy.y + obj_enemy.size ||
//kolizia nad objektom
y + r <= obj_enemy.y;
//podmienka ak lopta spadne na kaktus na pichliace, tak bude game over :)
//if ( !(y + r <= obj_enemy.y) && !test_enemy)
//gameOver();
if (!test_enemy) {
collision = true;
break;
}
}
//mince
//test kolizie pri naraze na mince + zbieranie bodov a mazanie mince pri naraze....
for (i in coins) {
var obj_coins = coins[i];
var test_coins =
//kolizia od objektu napravo
x - r >= obj_coins.x + obj_coins.size ||
//kolizia od objektu nalavo
x + r <= obj_coins.x ||
//kolizia pod objektom
y - r >= obj_coins.y + obj_coins.size ||
//kolizia nad objektom
y + r <= obj_coins.y;
if (!test_coins) {
collision = true;
score += 5;
coins.splice(i, 1); // vymazanie mince, ktoru hrac ziska - narazi do nej
break;
}
}
//oxygen
for (i in outu) {
var obj_outu = outu[i];
var test_outu =
//kolizia od objektu napravo
x - r >= obj_outu.x + obj_outu.size ||
//kolizia od objektu nalavo
x + r <= obj_outu.x ||
//kolizia pod objektom
y - r >= obj_outu.y + obj_outu.size ||
//kolizia nad objektom
y + r <= obj_outu.y;
if (!test_outu) {
collision = true;
ox += 10;
outu.splice(i, 1); // vymazanie mince, ktoru hrac ziska - narazi do nej
break;
}
}
//candy bars
for (i in energy) {
var obj_energy = energy[i];
var test_energy =
//kolizia od objektu napravo
x - r >= obj_energy.x + obj_energy.size ||
//kolizia od objektu nalavo
x + r <= obj_energy.x ||
//kolizia pod objektom
y - r >= obj_energy.y + obj_energy.size ||
//kolizia nad objektom
y + r <= obj_energy.y;
if (!test_energy) {
collision = true;
candy += 10;
energy.splice(i, 1);
break;
}
}
// Posun bez kolizie
if (!collision) {
this.x = x;
this.y = y;
// Gravitacia
this.dy += 9.8 * dt;
}else {
this.dx = x;
this.dy *= -bounce;
if(this.dy * (-bounce) < 4)
this.dy = 0;
if (!collision)
{
this.x = x;
this.y = y;
//this.dy *= (-bounce);
}
}
// podmienky aby lopta nevysla z hracieho pola cize z canvasu
/* if (this.x + this.size - this.size*0.5> canvas.width) {
this.x = canvas.width - this.size + this.size*0.5;
}
if (this.x -this.size*0.5 < 0) {
this.x = this.size*0.5;
}
*/
if (this.y+this.size - this.size*0.5 > canvas.height-80) {
this.y = canvas.height - 80 - this.size + this.size*0.5;
this.dy *= -bounce;
if(this.dy * (-bounce) < 4)
this.dy = 0;
}
//if (this.y - this.size*0.5< 0) { //pomienka pre strop canvasu, ....
// this.y = this.size*0.5;
//};
};
Player.prototype.draw = function() {
ctx.save();
ctx.translate(this.x + offsetX, this.y + offsetY);
ctx.rotate(this.rotation);
ctx.translate(-this.size*0.5, -this.size*0.5);
ctx.drawImage(this.img, 0, 0, this.size, this.size);
ctx.restore();
};
Aucun commentaire:
Enregistrer un commentaire