修复我的每秒伤害功能

时间:2014-06-07 23:23:19

标签: php jquery

虽然它有一些需要解决的错误,但我已经创建了每秒一次的工作损坏。

  1. 我希望即时显示'目标已被破坏'消息,而不是在当前生命值达到0后1.2秒。
  2. 主要的错误是,如果多次单击攻击按钮,它会多次启动setInterval,每次点击它时每1.2秒就会造成一次伤害,因此它可以执行多次。
  3. 最初的攻击应该立即发生。
  4. 任何想法或想法?我已经尝试过使用do while循环,但我根本无法使用该代码。我只使用setInterval函数获得了成功。

    我的网站上有一个工作脚本,我也会在这里发布代码。

    $(document).ready(function(){
    var dmg = 60;
    var curr_hp = 1200;
    var tot_hp = 1200; 
    $('#attk_spd').html('1.2 seconds');
    $('#dmg').html('60');   $('#curr_hp').html('1200');
    $('#tot_hp').html('1200');
            $("#btn").click(function(){
                $('#attk').html('You are currently attacking your target.');
                setInterval(
                    function () {
                        if (curr_hp > 0) {
                            curr_hp = curr_hp - dmg;
                            $('#curr_hp').html(curr_hp);
                        } else { $('#attk').html('Your target has been destroyed.');
                        }
    
                    },
                1200);
            })
    
    }); 
    

    这是当前正在运行的工作版本: http://www.evenstar-online.com/Jquery_snippets/dpsloop.php

1 个答案:

答案 0 :(得分:1)

使用setTimeout代替setInterval,这样您就可以精确控制是否再次攻击。然后你可以只调用一次该函数,并立即发生第一次攻击。解释这有点奇怪;请遵循以下代码:)

此外:

  • 注意正确缩进代码,一目了然地更容易理解:)
  • 除非您实际分配HTML,否则请勿使用$.html!养成使用$.text的习惯,否则你最终会试图在某个地方插入一个尖括号,并且不知道为什么所有文本都会消失。

我最终得到了:

$(document).ready(function(){
    var dmg = 60;
    var curr_hp = 1200;
    var tot_hp = 1200;
    $('#attk_spd').text('1.2 seconds');
    $('#dmg').text('60');
    $('#curr_hp').text('1200');
    $('#tot_hp').text('1200');

    var attack_timer;
    $("#btn").click(function() {
        if (attack_timer) {
            // We're already waiting for the next attack, so do nothing
            return;
        }

        $('#attk').text('You are currently attacking your target.');

        var attack_once = function() {
            // Always attack immediately
            curr_hp -= dmg;
            $('#curr_hp').text(curr_hp);

            // Only schedule another attack if the target is still alive
            if (curr_hp > 0) {
                attack_timer = setTimeout(attack_once, 1200);
            }
            else {
                $('#attk').text('Your target has been destroyed.');
            }
        };
        attack_once();
    })
});