我是 HTML5/Canvas/Game 编程的新手,但在阅读了几本书后一直在修改它。我认为我对事情的发展有相当好的了解。这个问题提出了几个较小的问题,但总的来说基本上是一个“结构方法”的问题。我不期待冗长的回应,但希望这里和那里的小指针:) 这是一个非滚动的链接,目前相当无聊的超级马里奥世界。
注意:控件是左/右和空格键跳跃。这只是我现在正在学习的 Firefox 的设置。
我在这一点上做错了吗?
目前我只关注马里奥如何跑和跳,并认为我已经把它搞定了。硬币盒没有任何作用,背景只是为了外观而加载的图像。这是我的方法,如果有什么完全错误的,请告诉我:
- 允许马里奥通过 2 Y 速度(重力和跳跃变量)进行跳跃
- 允许马里奥以 1 速度运行(左或右“摩擦”+ 加速度)
- 根据 keypress/keydown 使用和定位精灵
- 我不确定这是否正确,但我正在使用构造函数来构建一个对象,然后在主动画循环中我调用该对象的原型函数来更新所有变量并重绘对象。
- 我每帧都清理整个画布
- 我是否应该将其拆分为不仅仅是一个绘图函数,比如 Mario.move()?
- 我设置了一个 GroundLevel 和一个 JumpLevel 变量来创建 2 个游戏平面。JumpLevel 设置为允许控制马里奥在飞行中可以跳多高。这两个地方可以让地面像一座小山一样上升 - 保持重力超过马里奥的跳跃力的点与地面的距离相同。
- 为清楚起见,所有内容都被分成不同的 JS 文件,但显然会合并。
向前进:
现在我已经完成了马里奥如何移动的设置(我认为我可能会做一些其他的小事情,比如蘑菇向上/向下和射击火球)。我想我可以弄清楚,但是在可视化以下内容以及 HTML5/Canvas 如何轻松处理这一点时,我真的迷失了:
滚动背景(我尝试设置地面瓷砖并使用屏幕环绕,但这似乎会导致很多不均匀的问题,因为我正在向相反方向移动瓷砖。不幸的是,由于我试图考虑加速,这扔掉计数并在地面上造成间隙。我放弃了这个想法。画布下方带有大背景图像的 DIV 会是最好的解决方案吗?
敌人:我会以同样的方式创建敌人并在每一帧中对每个敌人运行一个循环来检测碰撞吗?
背景框:我试图让马里奥站在背景中的框上,但不确定如何处理。我目前为马里奥设置了边界以留在画布上,我是否继续扩展这些条件以根据框设置不同的边界?我可以看到在屏幕上显示几个框并以这种方式进行操作会有点疯狂,尤其是如果我要对敌人进行相同的命中测试?我知道我在这里遗漏了一些东西......
水平运动:这有点相关。当按下 Right 键时,基本上关卡中的所有内容都需要向左移动。我是否需要在每个动画帧中追踪所有可能触及马里奥的物体的所有位置(让他站立的盒子和让他碰撞的敌人)?这似乎会变得效率低下?
谢谢大家!我会用结果/解决方案来更新这个:)