2017-07-27 21 views
1

タイルでマップを作成しました。それのすべての単一のタイルは32x32 pxを測定するので、私の主人公スプライトもそうです。タイルでタイルを移動する

私のクラスPlayer.cppには、Left/Right/Up/Downに行くかどうかを決定するdeltaY/Xを計算する関数がいくつかあり、それらを更新関数で使用します。これまでの私のコードです

void Player::moveX(int moveDirection) { 
    deltaX = moveDirection * PlayerConstants::WALK_SPEED; 
    playAnimation(deltaX > 0 ? "WalkRight" : "WalkLeft"); 
    facing = deltaX > 0 ? DIRECTION ::RIGHT : DIRECTION::LEFT; 
} 

void Player::moveY(int moveDirection) { 
    deltaY = moveDirection * PlayerConstants::WALK_SPEED; 
    playAnimation(deltaY < 0 ? "WalkUp" : "WalkDown"); 
    facing = deltaY < 0 ? DIRECTION ::UP : DIRECTION::DOWN; 
} 

void Player::update(float elapsedTime) { 
    _x += deltaX * elapsedTime; 
    _y += deltaY * elapsedTime; 

    AnimatedSprite::update(elapsedTime); 
} 

ウォークスピードは今0.1です。

どのようにタイルごとにタイルを移動するかについての推測はありますか?

+0

は、 'moveDirection'の値が-1か1ですか? – travisjayday

+0

@travisjayday確かにそれです!あなたのコードに – James

+0

があります。私はその面接がグローバル変数であると推測していますか?通常、グローバル変数を使用するのは良いことではありません。なぜなら、ソフトウェアを書くときにどの関数がグローバル変数を変更しているのかが不明確になる可能性があるからです。グローバル変数がどのように変化しているのか(バグの場合)、それらの関数に戻って幸運を覚えておきたいかもしれません。代わりに、あなたは十分に簡単に直面することができます。 –

答えて

1

あなたができることは次のとおりです。

たとえば、x_overflowy_overflowという2つのグローバル変数を作成します。さて、あなたの更新関数では、_xと_yにdeltaXとdeltaYを直接追加するのではなく、x_overflowとy_overflowにdeltaXとdeltaYを追加してください。次に、x_overflowとy_overflowが希望の距離(私は32pxを推測しています)よりも大きいかどうかを調べるif-statmentsを追加し、そうであれば文字を32px移動します。この

void Player::update(float elapsedTime) { 
x_overflow += deltaX * elapsedTime; 
y_overflow += deltaY * elapsedTime; 

if (x_overflow >= 32) { 
    _x += 32; 
    x_overflow = 0; 
} 
else if (x_overflow <= -32) { 
    _x -= 32; 
    x_overflow = 0; 
} 

if (y_overflow >= 32) { 
    _y += 32; 
    y_overflow = 0; 
} 
else if (y_overflow <= -32) { 
    _y -= 32; 
    y_overflow = 0; 
} 

AnimatedSprite::update(elapsedTime); 
} 

よう

何か私は本当に(すなわちペーストをコピーしません)このコードをテストしていませんが、あなたはその背後にある主要なアイデアを理解し、それを自分で実装する必要があります。がんばろう!

+0

意味があります。私は今すぐ試してみるとすぐにそれが動作するように私はあなたにお知らせします:)ありがとう! – James

+0

どうぞ、よろしくお願いします! – travisjayday

+0

実際に動作します!それは現時点では非常にスムーズに見えませんが、私はそれを修正する方法を考えるでしょう:)!お返事ありがとうございます – James

関連する問題