这是在四周内的一系列四个职位第三,会告诉你如何创建一个简单的Windows 8游戏,使用HTML5,JavaScript的,WinJS和CreateJS 。
该游戏是基于XNA游戏示例“弹弓战争实验室” 。 因为我们开发是基于网络技术为Windows 8的新版本,我们会从游戏重用的资产。
在这篇文章中,我们将带的东西生活与一些游戏逻辑和JavaScript。
游戏圈
任何游戏的心跳游戏循环。 这是每秒运行多次,有两个主要的工作功能 - 更新发生了什么事情,然后绘制新的场景。
在第2部分 ,我们已经把大纲到位:
现在的问题是,我们如何获得gameLoop()函数开始,并保持每秒运行多少次?
EaselJS北京时间类
幸运的是,EaselJS拥有北京时间类,有一些功能,我们将使用:
- 管理游戏循环的时机
- 暂停/恢复游戏圈
- 测量经过时间
这是一个静态类,这样我们就可以开始使用它。 在default.js ,添加一个新的startGame()函数,并在年底称之为prepareGame()
这里我们告诉新浪体育讯北京时间使用window.requestAnimationFrame来控制gameLoop功能是如何频繁调用。
requestAnimationFrame是Web应用程序的一个相对较新的API,帮助确保工作不被不必要地进行。 要理解为什么这可能比设定一个固定的定时器更好的(如与setTimeout()看到了在IE试驾场地requestAnimationFrame样品 。
每次requestAnimationFrame准备就绪后,我们的游戏循环运行。
“准备瞄准开火!”
好了,现在我们有一个正在运行的游戏循环游戏,所以它的时候添加一些乐趣!
每个玩家/弹射器将被发射向另一个弹药/摇滚。 我们需要知道,如果一个镜头是目前飞,谁的轮到,以及如何拍摄正在移动。
首先,让我们增加更多的变数default.js :
现在让我们使用其中的一些通过将下面的update()函数:
目前,双方球员自动闪光(在随机速度)在他们的圈。 所述ammoBitma P移动到击发弹射的顶部中心,并且shotVelocity被赋予一个有界范围内的随机值(调整屏幕分辨率。)
我们还将添加一个fireShot()函数来显示拍摄和告诉游戏它在空气中:
更新显示
之前我们通过在空气中移动的镜头,让我们专注于游戏循环式的下半场 - 在屏幕上绘图。 这通常是非常复杂的,但EaselJS舞台负责绘制我们的内容的(所有的孩子 - 位图,文本等 - 我们添加到舞台)到画布上,所以这是我们所需要的:
而已! 如果你运行游戏,玩家1会自动闪光和镜头将出现在红色弹射器...
...但它不会让步。 让我们感动的事情。
移动射击
让我们回到了update()函数,并添加逻辑的if (shotIsFlying)声明:
不要运行它,但我们仍需要两个功能,但这里发生了什么:
- 线149 150 -通过添加速度移动镜头(其可以是负上去和/或左)
- 151线 -应用重力速度慢
- 行153-155 -有射门打在地面或消失在屏幕的左侧或右侧边缘的?
- 行157-160 -错过-结束拍摄并改变播放器
- 行162-168 -玩家1的射门-看它是否击中玩家2.如果是这样,更新播放器2的生活。
- 行169-175 -玩家2的射门-看它是否击中玩家1.如果是这样,更新播放器1的生活。
让我们添加的checkHit(Bitmap)的功能:
什么是则hitTest的那些话? EaselJS 的DisplayObject秒(在其Bitmap是基于)支撑hitTest()方法,这使得它非常容易看到,如果一个点是在当前的对象的位置。 不幸的是,我们正在缩放对象,并只则hitTest与原尺寸的作品,所以我们需要检查自己命中。 只是有点数学的,我们正在设置。
处理点击
现在,添加processHit()函数:
这只是结束拍摄,改变了球员,并确保在比赛还没有结束。
结束游戏
让我们来结束这篇文章通过结束了比赛。 添加endgame(Image)功能:
而已! 现在,您可以运行游戏,看看谁赢。
下一步是什么?
我们在这部分增加了很多 - 事情正在绘制,移动,命中,结束了......但有两个大洞。 首先,玩家没有真正发挥 ,所以我们将添加输入下一个处理。 其次,事情非常安静,尤其是对一战,所以我们会在一些声音折腾为好。
到第4部分:下周!
From: https://www.sitepoint.com//creating-a-simple-windows-8-game-with-javascript-game-logic/