2D 游戏开发:基于 Canvas 的游戏循环架构
如何使用 Canvas 实现一个 2D 游戏循环?requestAnimationFrame 与 setInterval 实现游戏循环的区别?Delta Time 的作用是什么?如何实现碰撞检测?
回答
Yahuda
gameLoop(timestamp){const dt=(timestamp-lastTime)/1000; lastTime=timestamp; update(dt); render(); requestAnimationFrame(gameLoop)}。requestAnimationFrame 优势: 与显示器 VSync 同步(60fps);页面隐藏时暂停;更平滑。Delta Time 使速度帧率无关: player.x += speed * dt。碰撞检测 AABB: rect1.x<rect2.x+rect2.w && rect1.x+rect1.w>rect2.x && rect1.y<rect2.y+rect2.h && rect1.y+rect1.h>rect2.y。更精确用圆形碰撞或像素级检测。双缓冲 Canvas 默认无需处理。