第五回主要讲熊碰到 蘑菇 之后向上反弹的效果 预期达到的效果: http://www.html5china.com/html5games/mogu/index4.html 一、由于碰撞的地方比较多,所以定义一个通用的判断2个物体是否碰撞的函…

第五回主要讲熊碰到蘑菇之后向上反弹的效果

预期达到的效果:http://www.html5china.com/html5games/mogu/index4.html

一、由于碰撞的地方比较多,所以定义一个通用的判断2个物体是否碰撞的函数

JavaScript Code 复制内容到剪贴板
  1. //方法用途:检测2个物体是否碰撞
  2. //参数object1:物体1
  3. //参数object1:物体2
  4. //参数overlap:可重叠的区域值
  5. //返回布尔值:碰撞返回true,不碰撞返回false
  6. function CheckIntersect(object1, object2, overlap)
  7. {
  8. //    x-轴                      x-轴
  9. //  A1------>B1 C1              A2------>B2 C2
  10. //  +--------+   ^              +--------+   ^
  11. //  | object1|   | y-轴         | object2|   | y-轴
  12. //  |        |   |              |        |   |
  13. //  +--------+  D1              +--------+  D2
  14. //  看图可知两物体各4个点的位置
  15. A1 = object1.x + overlap;
  16. B1 = object1.x + object1.image.width - overlap;
  17. C1 = object1.y + overlap;
  18. D1 = object1.y + object1.image.height - overlap;
  19. A2 = object2.x + overlap;
  20. B2 = object2.x + object2.image.width - overlap;
  21. C2 = object2.y + overlap;
  22. D2 = object2.y + object2.image.width - overlap;
  23. //假如他们在x-轴重叠
  24. if(A1 > A2 && A1 < B2
  25. || B1 > A2 && B1 < B2)
  26. {
  27. //判断y-轴重叠
  28. if(C1 > C2 && C1 < D1
  29. || D1 > C2 && D1 < D2)
  30. {
  31. //碰撞
  32. return true;
  33. }
  34. }
  35. return false;
  36. }

二、熊碰撞蘑菇发生的事件以及处理

JavaScript Code 复制内容到剪贴板
  1. //动物碰撞蘑菇
  2. function HasAnimalHitMushroom()
  3. {
  4. //假如碰撞
  5. if(CheckIntersect(animal, mushroom, 5))
  6. {
  7. //假如碰撞的位置属于蘑菇的左下位置
  8. if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.25))
  9. {
  10. horizontalSpeed = -speed;//反弹
  11. }
  12. //假如碰撞的位置属于蘑菇的左上位置
  13. else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.5))
  14. {
  15. //反弹速度减半
  16. horizontalSpeed = -speed/2;
  17. }
  18. //假如碰撞的位置属于蘑菇的右上位置
  19. else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.75))
  20. {
  21. horizontalSpeed = speed/2;
  22. }
  23. else
  24. {
  25. horizontalSpeed = speed;
  26. }
  27. verticalSpeed = -speed;//改变垂直速度。也即动物向上移动
  28. }
  29. }

三、在游戏循环GameLoop()尾部中加入熊碰撞蘑菇函数,如下

JavaScript Code 复制内容到剪贴板
  1. //游戏功能循环
  2. function GameLoop()
  3. {
  4. //清除屏幕
  5. ctx.clearRect(0, 0, screenWidth, screenHeight);
  6. ctx.save();
  7. //绘制背景
  8. ctx.drawImage(backgroundForestImg, 0, 0);
  9. //绘制蘑菇
  10. ctx.drawImage(mushroom.image, mushroom.x, mushroom.y);
  11. //绘制熊
  12. //改变移动动物X和Y位置
  13. animal.x += horizontalSpeed;
  14. animal.y += verticalSpeed;
  15. //改变翻滚角度
  16. animal.angle += bearAngle;
  17. //以当前熊的中心位置为基准
  18. ctx.translate(animal.x + (animal.image.width/2), animal.y + (animal.image.height/2));
  19. //根据当前熊的角度轮换
  20. ctx.rotate(animal.angle * Math.PI/180);
  21. //描绘熊
  22. ctx.drawImage(animal.image, - (animal.image.width/2), - (animal.image.height/2));
  23. ctx.restore();
  24. //检测是否碰到边界
  25. HasAnimalHitEdge();
  26. //检测熊碰撞蘑菇
  27. HasAnimalHitMushroom();
  28. }

到此第五回的完整代码如下:

展开 XML/HTML Code 复制内容到剪贴板

第五回就讲到这了,第六回讲描绘奖品

大家有什么建议的话,可以到论坛留言讨论:http://bbs.html5china.com/read.php?tid=2

希望大家在其他地方引用的时候,注明引用来自html5中文网

--作者:深邃老马

-----------------逆水行舟,不进则退

一步一步学做游戏 第五回:熊碰撞蘑菇处理相关推荐

  1. html5(熊与蘑菇)一步一步学做游戏 第一回:游戏分析

    该游戏教程主要参考了老外Jason Croucher的博客 http://jacebook.co.uk/blog/2010/09/11/html5-writing-a-game/ 游戏代码也下载自他的 ...

  2. 我在日本学做游戏期间的所见所闻与所想

    "想去日本学做游戏",我当初只有这么一个懵懵懂懂的想法.或许有些朋友的情况与我类似,从小接触游戏,自然而然有了投身游戏行业的想法.国内现在还没有成熟的游戏开发教育体系,而邻国日本作 ...

  3. 蘑菇游戏_熊碰撞蘑菇处理

    <!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content=& ...

  4. 用python的tkinter做游戏(五)—— 魔塔 篇

    好久没更新了,今天继续:用python自带的tkinter做游戏系列的第五弹,魔塔 篇 之前的四篇博文介绍的分别是贪食蛇和俄罗斯方块,推箱子的简易版和推箱子的重制版. 用python自带的tkinte ...

  5. 一步一步学做游戏 第二回:让蘑菇随鼠标动起来

    上回分析了游戏,在这一回我们将让蘑菇跟随鼠标动起来~ 达到这个效果: http://www.html5china.com/html5games/mogu/index1.html 一.写html代码 X ...

  6. unity零基础开始学习做游戏(五)看看你的完成度,进度条了解一下?

    -------小基原创,转载请给我一个面子 上回书说道,英雄和魔王都做完了,子弹也能发射了,就是不知道啥时候能干死魔王.那小基得做个血条来展示一下,他离死不远了(•౪• ) 其实血条也可以看作是进度条 ...

  7. 一天一天学做外挂@第五天-物品清单我知道[武林外传]

    经过前四天的学习,我想很多朋友一定已经完成一个简单的挂机程序了,不过是不是觉得还不够智能,不够完善呢!如果我们能得到更多的数据,就能更好的控制流程. 学习目的: 1.第四天教程后续延伸 2.地面物品显 ...

  8. 跟hoowa学做智能路由(五):熟悉OpenWRT

    题记:呦呦鹿鸣,食野之苹.我有嘉宾,鼓瑟吹笙. 从本章开始,我们要更多的了解系统的特性,以及不论是智能路由还是智能家居,我们用路由器的处理器到底能做多少事情. 系统结构 在上一章我们已经完成了刷机工作 ...

  9. html5 游戏制作教程,【整理】一步一步学做HTML5游戏教程

    本帖最后由 蓝色力量1221 于 2012-11-29 01:26 编辑 游戏源码下载地址:http://l13.yunpan.cn/lk/QMQFfWQjvWGvg 该游戏教程主要参考了老外Jaso ...

最新文章

  1. ef延迟加载不到导航属性问题
  2. 阿里宣布Atlas正式开源:带你重返App开发的田园时代
  3. 做一个基于python的树莓派MCU性能-温度监控仪表盘
  4. CUBA在查询语句如何添加参数
  5. LeetCode 791. 自定义字符串排序(map)
  6. html侧滑菜单mui,mui侧滑菜单点击含有mui-action-menu类的控件无法实现侧滑
  7. PYTHON知识梳理
  8. 强类型的JavaScript(TypeScript)–现在没有任何理由不要深入JavaScript!
  9. 计算机运算器存储器知识点,计算机一级知识点:运算器、控制器
  10. RayMarching1:用射线的方式画一个球
  11. JavaScript的作用域详解
  12. [2018.10.18 T3] 小 G 的线段树
  13. c语言计算器括号怎么解决,C语言计算器,该如何解决
  14. 原来我也可以写Android小游戏
  15. java解方程_JAVA解N元一次方程组(矩阵) | 学步园
  16. WIN10更新卸载出错解决
  17. python实现图像的白平衡,破坏图像的白平衡(冷、暖)和调节图像的亮度
  18. APP手机软件开发方案怎么做?
  19. 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP
  20. python pymsql 下载_python pymysql的安装

热门文章

  1. 数字廉江地理空间框架 三维景观数据专业技术设计书
  2. 使用apifox进行接口并发测试
  3. 牵手PeckShield,当红DeFi项目Aave爆炸式增长的背后?
  4. vc 写c语言程序步骤,VC++ 6.0编写程序的详细步骤
  5. echarts x轴显示time
  6. Python ---------- 文件操作
  7. python中xor是什么_Python中的XOR异或符号^运用
  8. 论城市公共供水管网漏损控制的内涵与要求
  9. python对excel两列相乘_[Python与数据分析]-2对Excel按列进行拆分而后合并
  10. VUE内使用RSA加解密