移相器,流体扫描(对角线输入)

时间:2016-02-14 18:00:30

标签: javascript game-physics phaser-framework

我一直在玩一个精灵,试图让它按照我所期望的方式进行攻击 - 厄运风格。

所以问题是我可以设置我的精灵的角度,并且我使用velocityFromRotation相对于当前角度向上,向下,向左和向右移动它。 到目前为止,真可爱。

问题在于我无法对角移动,也就是说,我需要能够相对于精灵的角度同时向上和向左移动。 我有一个功能,每个动作,向上,向下,向左和向右 - 由于所有动作都使用velocityFromRotation,最新按下的按键将覆盖第一个动作。

据推测,我也可以简单地为每个对角线创建函数,虽然我并不完全确定我传递给velocityFromRotation方法来实现的功能 - 但即使这样也行然后,它可能会阻止我使用模拟输入类型,因为对角线逻辑将被硬编码。我没有使用模拟输入,但是我试图将我的预制件设置为“插入式”。可以重复使用。

这是我目前的代码:

Ship.prototype.moveForward = function() {
    // Move the player up
    this.game.physics.arcade.velocityFromAngle(this.angle - 90, this.speed, this.body.velocity);
}

Ship.prototype.moveBackward = function() {
    this.game.physics.arcade.velocityFromAngle(this.angle + 90, this.speed, this.body.velocity);
}

Ship.prototype.bankLeft = function() {
    // Move the player left
    this.game.physics.arcade.velocityFromAngle(this.angle + 180, this.speed, this.body.velocity);
}

Ship.prototype.bankRight = function() {
    // Move the player left
    this.game.physics.arcade.velocityFromAngle(this.angle, this.speed, this.body.velocity);
}

1 个答案:

答案 0 :(得分:1)

没关系,我找到了。

对我而言,诀窍是记录精灵当前正在做的事情,并在功能中检查它以手动调整角度。

所以,我在更新函数中存储了一些变量 - 它们会在各种运动函数中被覆盖:

this.movement.movingForward     = false;
this.movement.movingBackward    = false;
this.movement.moving            = false;

然后我的运动功能看起来像这样:

// Player movement
Ship.prototype.moveForward = function() {
    // Move the player up
    this.game.physics.arcade.velocityFromAngle(this.angle - 90, this.speed, this.body.velocity);
    this.movement.moving = true;
    this.movement.movingForward = true;
}

Ship.prototype.moveBackward = function() {
    // Move the player down
    this.game.physics.arcade.velocityFromAngle(this.angle + 90, this.speed, this.body.velocity);
    this.movement.moving = true;
    this.movement.movingBackward = true;
}

Ship.prototype.bankLeft = function() {
    // Move the player left
    this.game.physics.arcade.velocityFromAngle(this.angle + 180 - ((this.movement.movingForward ? -45 : 0) + (this.movement.movingBackward ? 45 : 0)), this.speed, this.body.velocity);
    this.movement.moving = true;
    this.movement.bankingLeft = true;
}

Ship.prototype.bankRight = function() {
    // Move the player left
    this.game.physics.arcade.velocityFromAngle(this.angle + ((this.movement.movingForward ? -45 : 0) + (this.movement.movingBackward ? 45 : 0)), this.speed, this.body.velocity);
    this.movement.moving = true;
    this.movement.bankingRight = true;
}

如果你想知道我为什么要将角度调整90度,那是因为精灵面向上,而Phaser似乎在向右倾斜0度。