3

クライアント+サーバーは両方ともJavascriptで書かれています。戦闘は控えめに行われ、ゲームにはループを必要とするものが他にないため、マスターゲームループはありません。2人のプレイヤーが戦闘を開始すると、次のような自動攻撃ループに入ります。

if ( combat key is pressed ) {

    check a bunch of stuff;
    setTimeout( combatLoop(); 5000 );

}

combatLoop = function() {

    attack(player1,player2);

    var loop = setTimeout( combatLoop(); 5000 );

    if ( skill variable == 1 ) { clearTimeout(loop); skill(); }

}

したがって、combatLoop関数は5秒ごとに何度も呼び出されます。攻撃機能は、2人の入力プレイヤーが互いに攻撃したときに何が起こるかを処理します。プレーヤーがスキルを使用する場合、clearTimeoutを使用してループから抜け出し、関連するskill()関数が呼び出されます。スキル関数は、combatLoopを再度呼び出す場合と呼び出さない場合があります。

質問1

私はJavascriptを初めて使用しますが、この方法で大きな欠陥が見られるかどうか疑問に思っていました。

質問2

私がやろうとしていることの同様の例を見たことがないので、スキルボタンの部分を一緒にハックします。この方法で戦闘ループをスキルボタンの押下を「リッスン」し(スキルボタンの押下=>スキル変数を設定= 1)、clearTimeoutを使用してメインループをクリアするのは「間違っています」ですか?したがって、スキルは次の攻撃中に実行されます(攻撃の合間にではありません)。これは私にとっては問題ありません。工業規格が何であるかわかりません。:p

4

1 に答える 1

0

私は大ファンではありませんが、あなたはこれを行うことができますsetInterval()

if (keypressed) { //change this to a proper event handler ;)
  Engine.combatStart();
}

var Engine = {
  combatTimer: null, //timer var
  combatStart: function() {
    Engine.combatTimer = setTimeout(Engine.combatLogic, 5000);
  },
  combatLogic: function() {
    //calculate attacks etc...

    if (skill === 1) {
      clearTimeout(Engine.combatTimer);
      skill();
    }

    Engine.combatTimer = setTimeout(Engine.combatLogic, 5000);
  }
};

あなたもすることができます:

document.addEventListener("keypress", function(e) {
    if (e.keyCode === XX) {
         clearTimeout(Engine.combatTimer);
         skill()            
    }        
});

したがって、をリッスンし、スキルキーのキーコードにkeypress置き換えてから、タイムアウトループをクリアします...:/XX

于 2012-06-28T12:52:24.713 に答える