我使用下面的代码来移动播放器,但问题是只要按下按钮并保持播放器继续移动。如何更改此行为,以便无论按下按钮多长时间,玩家只能移动一次?
if (cursor.up.isDown){
player.body.velocity.y = -200;
player.animations.stop('move');
}
答案 0 :(得分:4)
作为触发开关的布尔应该做的工作:
var flipFlop;
function update() {
if (cursor.up.isDown){
if (!flipFlop) {
player.body.velocity.y = -200;
player.animations.stop('move');
flipFlop = true;
}
}
if (cursor.up.isUp) {
flipFlop = false;
}
}
请注意,flipFlop变量在更新循环之外声明,否则将在每一帧重新创建。
答案 1 :(得分:1)
Kamen Minkov的回答确实有效,但是如果你的想法是跳跃,那么bool将不会起作用,只要你按下按钮就可以按下它,然后再往上走,甚至不要接触任何地面。
但您可以使用此功能来验证身体是否正在接触
function touchingDown(someone) {
var yAxis = p2.vec2.fromValues(0, 1);
var result = false;
for (var i = 0; i < game.physics.p2.world.narrowphase.contactEquations.length; i++) {
var c = game.physics.p2.world.narrowphase.contactEquations[i];
if (c.bodyA === someone.data || c.bodyB === someone.data) {
var d = p2.vec2.dot(c.normalA, yAxis); // Normal dot Y-axis
if (c.bodyA === someone.data) d *= -1;
if (d > 0.5) result = true;
}
} return result;
}
并致电发送正文
if ( (cursor.up.isDown) && (touchingDown(player.body)) ){
player.body.velocity.y = -200;
player.animations.stop('move');
}
OBS:P2 Physics的功能,但是对于街机来说,身体已经有一个字段,表明它是否正在降落。
答案 2 :(得分:0)
我知道这是一篇老文章,但我也被困在这里,并使用您的示例提出了一个很好的简单解决方案
this.speed = 100
this.player.setVelocity(0,0)
if (this.cursors.left.isDown){
this.player.setVelocityX(-this.speed)
}else if(this.cursors.right.isDown){
this.player.setVelocityX(this.speed)
}else{
this.player.setVelocityX(0)
}if(this.cursors.up.isDown){
this.player.setVelocityY(-this.speed)
}else if (this.cursors.down.isDown){
this.player.setVelocityY(+this.speed)
}else{
this.player.setVelocityY(0)
}
首先,我们将玩家的速度设置为0,0(x和y)。 我们检查x轴上是否有任何更改,否则将其重置为0。 在y轴上检查是否有更改,否则也将其重置为0。
我发现这可以使角色以更流畅的动作运动。并且还允许将左和上等同时按下。 如果您需要角色像这样移动更多的正方形,则将速度更改为.x或.y