Я пытаюсь использовать лист спрайтов для перемещения персонажа с помощью клавиш со стрелками, но он, похоже, не работает. Если я установил, что фон будет больше 500, 500, экран будет перемещаться вместе с символом, но я хочу, чтобы персонаж свободно перемещался без движения фона с ним.
Что я могу изменить в своем коде, чтобы заставить символ перемещаться с помощью клавиш со стрелками? И заставить анимацию работать на самом деле?
window.onload = function () {
var game = new Phaser.Game(500, 500, Phaser.AUTO, 'phaser-example',{ preload: preload, create: create });
function preload() {
game.stage.backgroundColor = '#fc6b84';
game.load.spritesheet('player', 'reddude.png', 64, 64);
}
function create() {
// This simply creates a sprite using the player image we loaded above and positions it at 200 x 200
var test = game.add.sprite(250, 250, 'player');
player.animations.add('walk');
player.anchor.setTo(0.5, 1);
game.physics.arcade.enable(player);
player.body.collideWorldBounds = true;
addItems();
addPlatforms();
cursors = game.input.keyboard.createCurosrKeys();
//game set up
}
function update() {
game.physics.arcade.collide(player, platforms);
game.physics.arcade.overlap(player, items, itemHandler);
game.physics.arcade.overlap(player, badges, badgeHandler);
player.body.velocity.x = 0;
// is the left cursor key presssed?
if (cursors.left.isDown) {
player.animations.play('walk', 10, true);
player.body.velocity.x = -50
player.scale.x = - 1
}
// is the right cursor key pressed?
else if (cursors.right.isDown) {
player.animations.play('walk', 10, true);
player.body.velocity.x = 50
player.scale.x = 1
}
else if (cursors.up.isDown) {
player.animations.play('walk', 10, true);
player.body.velocity.y = 50
player.scale.y = 1
}
else if (cursors.down.isDown) {
player.animations.play('walk', 10, true);
player.body.velocity.y = -50
player.scale.y = -1
}
// player doesn't move
else {
player.animations.stop();
}
}
}
Вы добавляете переменную sprite, называемую test
, но вы добавляете анимацию в переменную с именем player
. Это может быть ошибка, которую вы сделали, я имею в виду, где определяется var player
?
Что касается различных анимаций для работы, вы должны добавить каждую анимацию отдельно в свою переменную sprite. Вы должны указать, какие кадры предназначены для анимации "ходьбы влево", кадры для анимации "ходьбы" и т.д. И создания отдельных анимаций. Что-то вроде этого:
// define variable globally, outside "create()", so then "update" can also use the variable
var playersprite;
// create a sprite in the "create()" function
// note: playersprite is the variable name and 'player' is the spritesheet name string
playersprite = game.add.sprite(250, 250, 'player');
// add animations to sprite
playersprite.animations.add('walk_down', [0,1,2,3]);
playersprite.animations.add('walk_left', [4,5,6,7]);
playersprite.animations.add('walk_right', [8,9,10,11]);
playersprite.animations.add('walk_up', [12,13,14,15]);
И затем в зависимости от направления движения игрока, играйте в другую анимацию.
// when LEFT cursor key presssed
if (cursors.left.isDown) {
playersprite.animations.play('walk_left', 10, true);
// etc.
Вы можете сделать камеру, следуя за вашим плеером. Сначала создайте скипетр, затем добавьте следующую строку:
game.camera.follow(player);
Вы можете найти по этой ссылке, что вам нужно. https://phaser.io/examples/v2/camera/basic-follow
Кроме того, не следует ли объявлять переменную как "var player" вместо "var test" внутри функции create?