javascript - 无法在 Phaser.js 中为 Sprite 设置动画

标签 javascript sprite phaser-framework sprite-sheet

我正在尝试使用 sprite 表通过箭头键移动 Angular 色,但它似乎不起作用。如果我将背景设置为大于 500、500,屏幕将随着 Angular 色移动,但我希望 Angular 色可以自由移动而背景不会随之移动。

我可以在我的代码中更改什么来使 Angular 色使用箭头键移动?并使动画真正起作用?

Here is my Image, it is 256x256

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();
    }
  }

}

最佳答案

您添加了一个名为 test 的 sprite 变量,但是您将动画添加到一个名为 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.

关于javascript - 无法在 Phaser.js 中为 Sprite 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45555491/

相关文章:

html - Sprite css 菜单 - 无法在菜单上对齐 div 中的大 Logo

javascript - 更改背景位置 : "x"px "x"px using jQuery/Javascript for a class 中的 "y"

typescript - Typings.json 有效的 JSON 格式或文档?

phaser-framework - Phaser.io 3 : Get game size in scene

javascript - 重新加载然后在同一函数jquery中刷新

javascript - 在 Node 导出中覆盖函数的 toString()

javascript - 为什么 await 之后的代码没有立即运行?它不应该是非阻塞的吗?

opengl-es - LibGDX - Sprite 到像素图

javascript - 未捕获的类型错误 : Cannot read property 'apply' of undefined phaser

javascript - JavaScript 中 console.log 的缩写