11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2146|回复: 1
上一主题 下一主题

[算法 & 公式] 【9RIA—伱永远不可以】—【S7】子弹时间,碰撞检测加强【游戏新手教程】

[复制链接] TA的其它主题
发表于 2018-2-9 16:41:34 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 TKCB 于 2018-2-9 16:42 编辑

转载:9RIA游戏开发者社区(天地会)
作者:伱永远不可以(原天地会大神)


先借用一段百度百科子弹时间

在游戏中运用子弹时间技术相对简单,也是在《黑客帝国》之后开始广泛使用的。该特效一般用于动作性较强的游戏,如一人称射击,动作类角色扮演,竞赛类。游戏允许玩家临时将时间减慢,让玩家看到子弹,躲避敌人攻击,同时还可以在观察和瞄准时保持常速。

说白了,子弹时间就是 放慢了时间。。。

----
很多新手在刚开始做游戏的时候,碰撞检测,用的都是 Display.hitTestObject(),用的都是 原生显示对象的碰撞检测。好处是简单方便快捷,坏处就是 这是基于帧的,一帧刷新一次画面,当速度大的时候,检测不到碰撞。

所以将画面皮肤,与对象数据 分离开是很有必要的,【设计模式】(新手也可以先了解了解)


既然是新手教程,那就做个简单例子吧。
滑动滑块重置小球及其速度,碰撞的时候会 有红色圈圈显示!(60fps)



滑动上面例子的滑块,可以发现,当速度比较小的时候(<30左右),碰撞检测比较正常,都能看见碰撞,但是速度越来越大,可以看见碰撞检测变得不稳定,有时候能检测到,有时候就无法检测到....这是因为检测用的是 hitTestObject() 并且,一帧只运行一次!速度大的时候,他们就直接跳过对方了,就无法检测。
代码很简单。

[Actionscript3] 纯文本查看 复制代码
if(小球皮肤1.hitTestObject (小球皮肤2)) {
    做出碰撞反应()
             }

那如何做子弹时间的效果呢? 首先,不能用 显示对象 来直接代表小球,用一个Point对象来代表。
1.jpg
更新的代码:
[Actionscript3] 纯文本查看 复制代码
point球1.x+=速度1;
 point球2.x+=速度2;
 
皮肤1.x= point球1.x
皮肤2.x= point球2.x
///而不是
皮肤1.x+=速度1


-------因为要实现慢动作。所以代码就变成了:
[Actionscript3] 纯文本查看 复制代码
//时间速度 越大越快
for(var i:int=0;i<时间速度;i++)
{
point球1.x+=速度1;
point球2.x+=速度2;
}
皮肤1.x= point球1.x
皮肤2.x= point球2.x


代码意思是---当球的数据更新了 【时间速度】次,球的皮肤才更新一次。


来看看新的例子:
旁边多了一个调节 时间速度的滑动条,滑动它,可以看见时间的变化,实现慢动作,并且当 速度很大的时候,也能够看见碰撞的痕迹!


表达的不好,只是给新手们一个思想,一个思路,希望有帮助!


下载:
教程.fla (419.54 KB, 下载次数: 6)
发表于 2018-3-13 09:35:10 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表