Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在倒计时运行时生成敌人_Javascript_Jquery - Fatal编程技术网

Javascript 在倒计时运行时生成敌人

Javascript 在倒计时运行时生成敌人,javascript,jquery,Javascript,Jquery,我目前正在尝试使用HTML CSS Javascript和jQuery在gamejam期间创建一个游戏 我有一个倒计时,向玩家显示他还剩多少时间,当主角被敌人击中时会损失2秒 我想做的是找到一种方法,只要计时器没有达到30秒(他赢的地方)或0秒(他输的地方),每x秒生成一个敌人 到目前为止,我使用了两个库,用于physic的QuintusJS和jchavannes的倒计时,试图让它们一起工作。 到目前为止,一切都很好,但我无法创建如下所示的jQuery循环 while(currentTime &

我目前正在尝试使用HTML CSS Javascript和jQuery在gamejam期间创建一个游戏

我有一个倒计时,向玩家显示他还剩多少时间,当主角被敌人击中时会损失2秒

我想做的是找到一种方法,只要计时器没有达到30秒(他赢的地方)或0秒(他输的地方),每x秒生成一个敌人

到目前为止,我使用了两个库,用于physic的QuintusJS和jchavannes的倒计时,试图让它们一起工作。 到目前为止,一切都很好,但我无法创建如下所示的jQuery循环

while(currentTime < 30000){ //30s in milliseconds
    stage.insert(new Q.Enemy({ x: 700, y: 0 })); //Allows ennemies to be generated by QuintusJS
    //TODO : adding a delay between enemies generation
}
while(currentTime<30000){//30s(毫秒)
stage.insert(新的Q.defect({x:700,y:0}));//允许QuintusJS生成ennemies
//待办事项:增加两代之间的延迟
}
因为昆图斯创造的画布变成了一片空白。我还尝试创建一个函数,将
checkCurrentTime
设置为
true
,而
currentTime
不等于
0
,但在这种情况下将其更改为
false
,但仍然不起作用


我做错了吗?如果是这样的话,我怎样才能创建一个能够正确生成敌人的循环呢?

您可以创建一个每N毫秒执行一次操作的循环器。例如:

var looper = function (delay, callImmediately, callback) {
    var self = this;
    var deferred = $.Deferred();
    if (callImmediately) {
        callback.call(self);
    }
    var iv = setInterval(function () {
        if (deferred.state() === "resolved" || deferred.state() === "rejected") {
            clearInterval(iv);
        } else {
            callback.call(self);
        }
    }, delay);
    return deferred;
};
然后,您可以随时启动和停止它:

// Every second add a new enemy
var loop = looper(1000, false, function () {
    console.log("Adding an enemy");
    //stage.insert(new Q.Enemy({ x: 700, y: 0 }));
});
// Handle done and fail
loop.done(function () { console.log("All enemies were added!"); });
loop.fail(function () { console.log("The loop was stopped before all enemies were added!"); });

// Resolve the looper after 30 seconds (calls .done())
setTimeout(loop.resolve, 30000);
// Or if something went wrong you can also reject it (calls .fail())...
setTimeout(loop.reject, 5000);
下面是一个小例子:

var player = {
    health: 100,
};
// Damage the player every second
var iv = setInterval(function () {
    player.health -= Math.floor(Math.random() * 10);
    if (player.health <= 0) {
        clearInterval(iv);
    }
}, 1000);
// Every second add a new enemy
var loop = looper(1000, false, function () {
    if (player.health <= 0) {
        loop.reject("The player is dead. Stopping.");
    } else {
        //stage.insert(new Q.Enemy({ x: 700, y: 0 }));
        console.log("Inserting an enemy; health is", player.health);
    }
});
loop.done(function () { console.log("All enemies were added, and player is still alive!"); });
loop.fail(function (message) { console.log(message) });

// Stop the looper after 30 seconds
setTimeout(loop.resolve, 30000);
var播放器={
健康:100,
};
//每秒对玩家造成伤害
var iv=设置间隔(函数(){
player.health-=Math.floor(Math.random()*10);

如果(player.health
30000s
是一个无效值。我不知道您是否拼写错误,但以防万一,我必须指出您在毫秒旁边有一个“s”,您不应该有。控制台上有任何错误吗?抱歉,我手工重写了我尝试过的代码,该值没有“s”(我将编辑我的问题)