移动速度像按键事件
Moving speed like keypress event
我尽力解释我的问题。我有一款吃豆人游戏,我用键盘移动吃豆人,吃豆人在每个方向移动一个恒定的单位,我根据我之前定义的地图检查碰撞,"-"是障碍,现在我想创造敌人,我希望敌人随机移动,不需要按键,当然,问题是,通过按键控制速度。但随机移动,我不能保证敌人移动像它按下键盘,我想控制帧率在这里我使用requestAnimationFrame,我尝试帧控制,但没有工作,这是我的代码:
function handleKeyPressed(e) {
var PacMan = scene.getObjectByName('PacMan');
gameSong.play();
switch(String.fromCharCode(e.which))
{
case "w": if(!detectaColisao(PacMan.position.x, PacMan.position.y + SCALE))
PacMan.position.y += SCALE;
break;
case "a": if(!detectaColisao(PacMan.position.x - SCALE, PacMan.position.y))
PacMan.position.x -= SCALE;
break;
case "s": if(!detectaColisao(PacMan.position.x, PacMan.position.y - SCALE))
PacMan.position.y -= SCALE;
break;
case "d": if(!detectaColisao(PacMan.position.x + SCALE, PacMan.position.y))
PacMan.position.x += SCALE;
break;
}
}
function anima()
{
var delta=clock.getDelta();
orbitCamera.update(delta);
requestAnimationFrame(anima);
rendere
移动位置。X像10,但每次都移动
你的意思是在动画被处理之前它移动了很多次吗?
这样做的原因是,从你的渲染循环中按下键是异步的——它发生在一个键被按下的时候,只要你有一个键被按下,它是恒定的。
你所要做的就是在每个animate()循环中只移动一次吃豆人。
所以我要改变的是——不要在你按下的函数中移动吃豆人,而是触发一些布尔值,然后在animate()循环中移动吃豆人,就像这样:
var u, d, l, r;
u = d = l = r = false;
function handleKeyPressed(e) {
switch (String.fromCharCode(e.which)) {
case "w":
u = true;
break;
case "a":
l = true;
break;
case "s":
d = true;
break;
case "d":
r = true;
break;
}
}
function handleKeyReleased(e) {
switch (String.fromCharCode(e.which)) {
case "w":
u = false;
break;
case "a":
l = false;
break;
case "s":
d = false;
break;
case "d":
r = false;
break;
}
}
function moveModel(_u, _d, _l, _r, obj) {
if (_u && !detectaColisao(obj.position.x, obj.position.y + SCALE)) {
obj.position.y += SCALE;
}
if (_d && !detectaColisao(obj.position.x, obj.position.y + SCALE)) {
obj.position.y -= SCALE;
}
if (_l && !detectaColisao(obj.position.x, obj.position.y + SCALE)) {
obj.position.x -= SCALE;
}
if (_r && !detectaColisao(obj.position.x, obj.position.y + SCALE)) {
obj.position.x += SCALE;
}
}
function anima() {
var PacMan = scene.getObjectByName('PacMan');
moveModel(u, d, l, r, PacMan);
var delta = clock.getDelta();
orbitCamera.update(delta);
requestAnimationFrame(anima);
rendere();
}
请注意,当键被释放时,您还需要再次关闭这些布尔值,因此我们添加了另一个handleKeyReleased来捕获这种情况。和handleKeyPressed函数相反
所以你需要添加这个抽象层的原因是按键事件发生的时候,它不关心你在动画周期的哪个位置。但是我们只想在每个动画循环中移动一次,所以我们不是直接移动它,而是创建一系列标志来告诉模型是否应该移动以及如何移动。
啊,好吧。也许你可以给它们的userData添加一个值,比如"ghost.userData"。计时器",然后每个周期加1。当它的冷却时间超过了你定义的某个变量,比如60秒,那么你就可以给它们一个随机移动,并将计时器设置回0。
这样他们就会按你规定的时间间隔采取步骤。
- 分派点击事件并保留击键修饰符
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 带有滚动事件的Javascript集翻译速度较慢
- jQuery 事件回调速度:匿名与命名函数
- 打开选择之前的事件.(单击工作速度不够快)
- 页面上的单个图像会显著减慢所有 jquery 事件的速度
- 在jQuery或Javascript中是否有办法确定触摸移动事件的速度
- 如何优化 jQuery 事件处理程序以提高速度
- Can ScriptProcessor's音频处理事件的速度受setInterval或requestAnimat
- 当使用Jquery事件监听器时,使用Jquery.animate会减慢速度
- GridView RowDataBound事件降低了应用程序ASP.NET C#的速度
- 如何减少mousemove事件的速度减慢
- jQuery hashchange事件立即执行动画,没有速度
- 在单击事件上创建统一的滚动速度
- 在Google Chrome和其他WebKit浏览器中,点击事件处理程序速度较慢
- 控制用服务器发送的事件中的数据写入表的速度
- 空事件会减慢 Javascript 处理速度吗?
- 窗户的平均速度是多少?调整事件触发的大小
- 移动速度像按键事件
- 当音频因加载数据不足(速度慢)而挂起时,我可以使用什么事件?