免费获取|
论文天下网
  • 论文天下网 |
  • 原创毕业论文 |
  • 论文范文 |
  • 论文下载 |
  • 计算机论文 |
  • 论文降重 |
  • 毕业论文 |
  • 外文翻译 |
  • 免费论文 |
  • 开题报告 |
  • 心得体会 |

当前位置:论文天下网 -> 免费论文 -> 计算机论文

基于HTML5的跨平台游戏设计与实现(二)

游戏要跨平台,画面自适应屏幕大小是非常关键的一步。刚好JS提供了window.innerWidth(后文以W简称)和window.innerHeight(后文以H简称)两个对象属性获取当前游戏运行环境窗口的宽高。然后再以该宽高为基础,进行游戏的坐标系统的设计。比如当前运行窗口的宽高已知,我们就可以知道窗口的四个顶点坐标,中点坐标等等。无论是游戏UI布局还是游戏对象的移动都变得非常简单。
JS可以在所有的浏览器里运行,而浏览器是手机,电脑设备都自带的系统级软件,这给跨平台游戏带来了极大的便利。解决了设备硬件层的问题。剩下的工作只需将游戏画面的自适应做好,就可以顺利完成一个跨平台游戏的开发。
(三)敌人AI实现
AI是人工智能的简写,是对人的意识,信息,思维过程的模拟。会使玩家体验到更真实的游戏。当然本设计只是设计了几个简单的AI:做直线运动且会在水平线上瞬移的敌人AI,左右水平匀速循环运动的敌人AI以及根据三角函数做弧形运动的AI。以此增加游戏难度和趣味性。
敌人直线运动且会在水平线上瞬移:在update()方法里,根据游戏帧计数器frames(该变量会在后面章节介绍)进行取模算法,实现每隔10帧(一般游戏以60帧运行,那么10帧相当于1/6秒)对当前敌人的position属性进行改变x,y坐标改变,则可以实现该AI动作。我们为了使运动更加拟真,不对position属性直接操作,而是改变敌人的velocity属性为velocity.x = W/2,如此敌人便会在下一帧游戏画面渲染时,瞬间移动到屏幕中央。当检测position.x<0或position.x>W时,也就是到达屏幕窗口边界时,需要对velocity.x作反方向运动:velocity.x = -W/2,以避免移动出屏幕窗口外。
敌人左右水平匀速循环运动:这是在上一个AI基础上变化而来的,需要游戏中每帧都进行一次位置改变。运动所需基础属性,设置velocity.x为当前敌人size。也就是每帧向x正轴运动size像素。这只是单方向,当x正轴坐标到达屏幕边界时,再改变size为-size。同理,当x<0时,也就是坐标到屏幕左边界时,也需要改变回size,如此可实现敌人左右匀速循环运动。
斜线运动AI:该敌人不再是水平线移动,而是以当前点x坐标轴与到屏幕边界的连线成45度夹角方向运动。到达屏幕边界后,再次以45度夹角向x轴反方向运动,循环往复。这里取了下三角函数的小窍门。在坐标系中,求45度的夹角刚好是等腰的。所以每次移动只需要x==y像素就可以。这里设置velocity.x 和velocity.y同时等于size即可。同样需要判定当x到达屏幕边界0和W时,要进行-size反转。
(四)元素绘制
使用JS可以轻松完成游戏元素绘制。设置全局变量canvas = document.getElementById('game');获取html文件的canvas标签。设置全局变量ctx = canvas.getContext("2d");获取canvas上下文。这是canvas API提供给JS绘画交互的核心。canvas.width = W;canvas.height = H;将当前的游戏绘制窗口与设备屏幕大小设置为一样。
(五)碰撞检测
游戏边界的碰撞已经在实体类的update()方法里实现了,现在只剩下玩家子弹和敌人的碰撞检测,就可以完成整个游戏的碰撞系统。游戏的碰撞检测方法有很多,2d的就有:多外接图形判别法--1.轴对称包围盒(Axis-Aligned Bounding Box),即无旋转矩形外接图形判别法;2.圆形碰撞;3.圆形与矩形(无旋转);4.圆形与旋转矩形(以矩形中心点为旋转轴)。光线投射法--1.分离轴定理;2.其他;3.地图格子划分;4.像素检测等等。
碰撞不是本次毕业设计的重点,并且是小游戏类型,因此选用最简单经典的AABB无旋转矩形判定。rect1.x < rect2.x + rect2.width &&rect1.x + rect1.width > rect2.x &&rect1.y < rect2.y + rect2.height &&rect1.height + rect1.y > rect2.y。如图4-1所示:
 
图4-1 AABB无旋转矩形碰撞判定
(六)游戏循环实现
window.requestAnimationFrame()函数是JS提供的专门为动画和游戏准备的循环函数,该函数会以每秒60次的速度调用,准确的描述是当上一次执行完,会尽最快速度调用下一次执行。
声明一个Game对象,来进行游戏世界的运转控制。加入对象方法loop()控制循环逻辑。window.requestAnimationFrame(Game.loop),实现游戏每秒60次的调用loop()函数。在loop函数中,给全局帧计数器变量frames++,判定游戏当前场景为开始菜单场景渲染和游戏场景渲染,并且调用实体的render()和update()方法,更新游戏世界中对象的行为逻辑。实体类加上如图4-2所示update()函数,实现游戏中的运动规则计算。
 
图4-2 游戏实体的位置更新和边界判定
(七)交互实现


首页 上一页 1 2 3 下一页 尾页 2/3/3

相关论文
上一篇:计算机网络安全浅析 下一篇:防火墙技术浅析
推荐论文 本专业最新论文
Tags:基于 HTML5 跨平台 游戏 设计 实现 【返回顶部】

相关栏目

自动化相关
计算机论文
工程管理论文
法律论文
医学论文
人力资源
电子专业
电气工程
英语论文
行政管理
电子商务
社科文学
教育论文
物流专业
金融专业
财务管理
会计专业
化学化工材料科学
电子通信
环境科学
经济类
机械模具类
报告,总结,申请书
其他专业论文


关于我们 | 联系方式 | 论文说明 | 网站地图 | 免费获取 | 钻石会员 | 原创毕业论文

 

论文天下网提供论文检测,论文降重,论文范文,论文排版,网站永久域名WWW.GEPUW.NET

本站部分文章来自网友投稿上传,如发现侵犯了您的版权,请联系指出,本站及时确认并删除  E-mail: 893628136@qq.com

Copyright@ 2009-2022 GEPUW.NET 论文天下网 版权所有