第五回主要讲熊碰到 蘑菇 之后向上反弹的效果 预期达到的效果: http://www.html5china.com/html5games/mogu/index4.html 一、由于碰撞的地方比较多,所以定义一个通用的判断2个物体是否碰撞的函…
第五回主要讲熊碰到蘑菇之后向上反弹的效果
预期达到的效果:http://www.html5china.com/html5games/mogu/index4.html
一、由于碰撞的地方比较多,所以定义一个通用的判断2个物体是否碰撞的函数
JavaScript Code
复制内容到剪贴板
- //方法用途:检测2个物体是否碰撞
- //参数object1:物体1
- //参数object1:物体2
- //参数overlap:可重叠的区域值
- //返回布尔值:碰撞返回true,不碰撞返回false
- function CheckIntersect(object1, object2, overlap)
- {
- // x-轴 x-轴
- // A1------>B1 C1 A2------>B2 C2
- // +--------+ ^ +--------+ ^
- // | object1| | y-轴 | object2| | y-轴
- // | | | | | |
- // +--------+ D1 +--------+ D2
- // 看图可知两物体各4个点的位置
- A1 = object1.x + overlap;
- B1 = object1.x + object1.image.width - overlap;
- C1 = object1.y + overlap;
- D1 = object1.y + object1.image.height - overlap;
- A2 = object2.x + overlap;
- B2 = object2.x + object2.image.width - overlap;
- C2 = object2.y + overlap;
- D2 = object2.y + object2.image.width - overlap;
- //假如他们在x-轴重叠
- if(A1 > A2 && A1 < B2
- || B1 > A2 && B1 < B2)
- {
- //判断y-轴重叠
- if(C1 > C2 && C1 < D1
- || D1 > C2 && D1 < D2)
- {
- //碰撞
- return true;
- }
- }
- return false;
- }
二、熊碰撞蘑菇发生的事件以及处理
JavaScript Code
复制内容到剪贴板
- //动物碰撞蘑菇
- function HasAnimalHitMushroom()
- {
- //假如碰撞
- if(CheckIntersect(animal, mushroom, 5))
- {
- //假如碰撞的位置属于蘑菇的左下位置
- if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.25))
- {
- horizontalSpeed = -speed;//反弹
- }
- //假如碰撞的位置属于蘑菇的左上位置
- else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.5))
- {
- //反弹速度减半
- horizontalSpeed = -speed/2;
- }
- //假如碰撞的位置属于蘑菇的右上位置
- else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.75))
- {
- horizontalSpeed = speed/2;
- }
- else
- {
- horizontalSpeed = speed;
- }
- verticalSpeed = -speed;//改变垂直速度。也即动物向上移动
- }
- }
三、在游戏循环GameLoop()尾部中加入熊碰撞蘑菇函数,如下
JavaScript Code
复制内容到剪贴板
- //游戏功能循环
- function GameLoop()
- {
- //清除屏幕
- ctx.clearRect(0, 0, screenWidth, screenHeight);
- ctx.save();
- //绘制背景
- ctx.drawImage(backgroundForestImg, 0, 0);
- //绘制蘑菇
- ctx.drawImage(mushroom.image, mushroom.x, mushroom.y);
- //绘制熊
- //改变移动动物X和Y位置
- animal.x += horizontalSpeed;
- animal.y += verticalSpeed;
- //改变翻滚角度
- animal.angle += bearAngle;
- //以当前熊的中心位置为基准
- ctx.translate(animal.x + (animal.image.width/2), animal.y + (animal.image.height/2));
- //根据当前熊的角度轮换
- ctx.rotate(animal.angle * Math.PI/180);
- //描绘熊
- ctx.drawImage(animal.image, - (animal.image.width/2), - (animal.image.height/2));
- ctx.restore();
- //检测是否碰到边界
- HasAnimalHitEdge();
- //检测熊碰撞蘑菇
- HasAnimalHitMushroom();
- }
到此第五回的完整代码如下:
展开
XML/HTML Code
复制内容到剪贴板
第五回就讲到这了,第六回讲描绘奖品
大家有什么建议的话,可以到论坛留言讨论:http://bbs.html5china.com/read.php?tid=2
希望大家在其他地方引用的时候,注明引用来自html5中文网
--作者:深邃老马
-----------------逆水行舟,不进则退