是什么动了我的划桨?

时间:2016-11-12 20:45:13

标签: phaser-framework

我使用以下代码:它创建一个paddle,它应该在我移动鼠标时移动。但相反,它会在整个地方振动。

我在最后添加了一些console.log,以便您可以看到结果。有谁知道我做错了什么?

var screenWidth = 800;
var screenHeight = 400;
// Create the state that will contain the whole game
var mainState = {  
    preload: function() {  
        game.load.image('paddle', 'assets/graphics/Paddle.png');
    },
    create: function() {  
        game.physics.startSystem(Phaser.Physics.ARCADE);
        game.world.enableBody = true;

        this.paddle = game.add.sprite(screenWidth/2 - 50, screenHeight - 50, 'paddle');
        this.paddle.body.immovable = true;
    },
    update: function() {  
        var testvalue = this.paddle.x;
        this.paddle.x = game.input.x;
        console.log(testvalue + " / " + this.paddle.x);
    },
};

var game = new Phaser.Game(screenWidth, screenHeight);  
game.state.add('main', mainState);  
game.state.start('main');

控制台输出:第一个数字是在使用this.paddle.x = game.input.x;

之前拍子的位置
  • 360/371
  • 415/371
  • 426/371
  • 382/371
  • ...

除了一个陈述之外,我没有写任何东西来操纵paddle.x。日志证明该语句是正确的,但其他一些东西与代码混淆。 如果我移除this.paddle.x = game.input.x;,则拨片静止不动。并且不会移动。

如果我删除:game.world.enableBody = true;它有效,但后来我没有物理

我在所有3个主要浏览器中测试过它。我用Xampp在本地运行

还有另一个例子here,但我得到同样的振动'我在我的系统上尝试时划桨。但是它在phaser的网站上运行良好。

1 个答案:

答案 0 :(得分:0)

发现它!

  

碰撞依赖于具有速度的碰撞物体。如果你每帧都告诉对象它的x和y位置应该是什么,那么对象没有速度来计算,并且不会发生碰撞......或者会发生但是会发生疯狂,这取决于你在框架中的方式和时间做到这一点。你需要一些更像'moveToPointer'的代码(它设置速度使它移动到指针位置),但只有当指针被按住对象时,才能平滑掉它发生的奇怪的振动/轨道问题到达指针。

Found the answer on html5gamedevs forum

所以现在我实现了以下

var diff =  game.input.x - this.paddle.x
this.paddle.body.velocity.x = diff*10;

这就像魅力一样。