我使用以下代码:它创建一个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;
之前拍子的位置除了一个陈述之外,我没有写任何东西来操纵paddle.x
。日志证明该语句是正确的,但其他一些东西与代码混淆。
如果我移除this.paddle.x = game.input.x;
,则拨片静止不动。并且不会移动。
如果我删除:game.world.enableBody = true;
它有效,但后来我没有物理
我在所有3个主要浏览器中测试过它。我用Xampp在本地运行
还有另一个例子here,但我得到同样的振动'我在我的系统上尝试时划桨。但是它在phaser的网站上运行良好。
答案 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;
这就像魅力一样。