2016-11-07 10 views
-2

「泥」のようなオブジェクトを作って、プレイヤーのxとyのスピードとジャンプスピードが立つときに遅くなるようにしたいのですが、どうすればいいですか?ここで今、プレイヤーのスピードを扱う私のコードの一部です:プラットフォームゲームでプレイヤーの速度を落とすオブジェクトを作成するにはどうすればよいですか?

var playerXSpeed = 7; 

Player.prototype.moveX = function(step, level, keys) { 
    this.speed.x = 0; 
    if (keys.left) this.speed.x -= playerXSpeed; 
    if (keys.right) this.speed.x += playerXSpeed; 

    var motion = new Vector(this.speed.x * step, 0); 
    var newPos = this.pos.plus(motion); 
    var obstacle = level.obstacleAt(newPos, this.size); 

    if (obstacle) 
    level.playerTouched(obstacle); 
    else 
    this.pos = newPos; 
}; 

var gravity = 34; 
var jumpSpeed = 15: 
var playerYSpeed = 6; 

Player.prototype.moveY = function(step, level, keys) { 
    // Accelerate player downward (always) 
    this.speed.y += step * gravity;; 
    var motion = new Vector(0, this.speed.y * step); 
    var newPos = this.pos.plus(motion); 
    var obstacle = level.obstacleAt(newPos, this.size); 
    // The floor is also an obstacle -- only allow players to 
    // jump if they are touching some obstacle. 
    if (obstacle) { 
    level.playerTouched(obstacle); 
    if (keys.up && this.speed.y > 0) 
     this.speed.y = -jumpSpeed; 
    else 
     this.speed.y = 0; 
    } else { 
    this.pos = newPos; 
    } 
}; 

答えて

0

私はそれは少し厳しいだったし、あなたの質問は右のバット1人のダウン票を得たことを不当と思いました。この問題に関するアドバイスをしてみましょう。

移動機能内から障害物のロジックを評価しているようです。これは、あなたの職務に独特の責任を持たせるというベストプラクティスに反するものです。私はあなたのコードをリファクタリングして、動き関数が "動き"を行うようにし、他の場所で障害物を評価すると、あなたの更新ループの中に素晴らしい場所ができます。

ここでは、軽量リファクタリングを使用して、コードをどのように再構成するかを説明します。私はあなたがこれが助けになると思う!

YourGameController.prototype.update = function() { 
    this.referenceToYourPlayer.movePlayer(this.keysReference); 
    this.referenceToYourLevel.handleCollisions(); 
} 

var gravity = 34; 
var jumpSpeed = 15: 
var playerYSpeed = 6; 
var playerXSpeed = 7; 

Player.prototype.movePlayer = function (keys) { 
    this.moveX(keys); 
    this.moveY(); 
} 

Player.prototype.moveX = function(keys) { 
    this.speed.x = 0; 
    if (keys.left) this.speed.x -= playerXSpeed; 
    if (keys.right) this.speed.x += playerXSpeed; 

    var motion = new Vector(this.speed.x * step, 0); 
    var newPos = this.pos.plus(motion); 
}; 

Player.prototype.moveY = function() { 
    // Accelerate player downward (always) 
    this.speed.y += step * gravity;; 
    var motion = new Vector(0, this.speed.y * step); 
    var newPos = this.pos.plus(motion); 
}; 
関連する問題