你必须知道我在javascript中对这个新游戏开发还是新手。
首先,我有这个游戏循环
GameLoop = {
//Insert more members here if needed
id : null,
run : function(options) {
var now,
dt = 0,
//last = timestamp(),
last = Date.now(),
slow = options.slow || 1, // slow motion scaling factor
step = 1 / options.fps || 60,
slowStep = slow * step,
update = options.update,
render = options.render;
function frame() {
//now = timestamp();
now = Date.now();
dt = dt + Math.min(1, (now - last) / 1000);
while(dt > slowStep) {
dt = dt - slowStep;
update(step);
}
render(dt / slow);
last = now;
this.id = requestAnimationFrame(frame, options.canvas);
}
this.id = requestAnimationFrame(frame);
},
pause : function() {
cancelAnimationFrame(this.id);
}
};
我是使用互联网上的一些文档和教程创建的。而我想知道如何拥有一个每1秒或每60帧更改一个状态变量的函数。例如,我可以在Draw方法中使用它:
//Moves enemy towards the player 30px every second
function moveEnemy() {
if(one Second Has Passed Since Last Time We Moved) {
enemy.xPosition += '30px';
}
}
这只是我想要实现的一个假设的例子,我希望有这些游戏循环经验的人可以帮助我。如果您需要更多信息,请告诉我,或者我是否因某种原因需要更新我的问题。
谢谢!
答案 0 :(得分:1)
如果你的要求是每秒移动敌人一次,则不需要在框架循环内。
var enemyMoverInterval = setInterval(
function moveEnemy() {
enemy.xPosition += '30px';
}
}, 1000);
编辑:如果你真的想在游戏循环中拥有它......
var enemyLastMoved = new Date();
GameLoop = {
// ...
function frame() {
// ....
if (now - enemyLastMoved > 1000) {
enemy.xPosition += '30px';
enemyLastMoved += 1000;
}
// ...
或混合方法:
var enemyMustMove = false;
setInterval(function() {
enemyMustMove = true;
}, 1000);
并在游戏循环中:
// ....
if (enemyMustMove) {
enemyMustMove = false;
enemy.xPosition += '30px';
}
PS enemy.xPosition += '30px'
可能不会做你想要的。