在Phaser中定义位置

时间:2018-03-27 13:49:00

标签: javascript html phaser-framework

我正在使用Phaser目录在Javascript中制作一个非常基本的游戏。我以前曾多次与Phaser进行过游戏,但这一次我遇到了一个对我来说很新的问题,而且我以前从未有过这个问题。我在网上查了一下,似乎没有人遇到过这个问题。在移相器中,它告诉我我的&​​#34; x"当我将x称为位置时未定义。我如何将x定义为一个位置或我面临的错误?我目前在Mac上使用VS Code和Chrome浏览器以及最新版本的Phaser。 谢谢您的帮助, Murdoc



var game = new Phaser.Game(640, 360, Phaser.Auto);
var car1;

var GameState = {
  preload: function(){
    game.load.image("thecar1", "../assets/car_1.png");
    //game.load.image("thecar2", "../assets/car_2.png");
    //game.load.image("backgroundImg", "../assets/thebackground.png");
  },
  create: function(){
    var car1 = game.add.sprite(200, 270, "thecar1");
    //var car2 = game.add.sprite(200, 270, "thecar2");

    /*game.input.keyboard.addKey(Phaser.Keyboard.W)
      .onDown.add(car1Up);*/

    game.input.keyboard.addKey(Phaser.Keyboard.A)
      .onDown.add(car1Left);

    /*game.input.keyboard.addKey(Phaser.Keyboard.S)
      .onDown.add(car1Down);

    game.input.keyboard.addKey(Phaser.Keyboard.D)
      .onDown.add(car1Right);*/
  },
  update: function(){
    
  }
};

function car1Left() {

  car1.x = car1.x + 10;

}

game.state.add('GameState', GameState);
game.state.start('GameState');

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Pixel Soccer</title>

        <script src="phaser.js"></script>
        <script src="main.js"></script>
        <style>
            body {
                background: white;
                margin: 0;
                padding: 0; 
            }

            body canvas {
                margin-left: auto;
                margin-right: auto;
            }
        </style>
    </head>

    <body>
    </body>
</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您要两次声明相同的变量。你正在处理所谓的&#34;变量阴影&#34;。当您在var car1 = game.add.sprite(200, 270, "thecar1");函数中执行create()时,范围将更改为仅函数,并且具有您指定给它的精灵的变量仅在该函数的范围内可用。该错误基本上告诉您在函数作用域之外声明的var car1是未定义的(它是)。尝试在car1 = game.add.sprite(200, 270, "thecar1");内进行create(),这应该没问题。