快速业务通道

[碰撞实现\数学实现非mc检测]

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-13
~。
  • 然后回到fla文档,新建1个元件名为ref,并连接到刚刚建立的类,例如连接到HitAreaReflector.as。
  • 现在ref元件就具有碰撞检测的功能了。 接着加些其他东西,写几个代码。完成测试文件制作。。都是很简单的东西。。看源文件吧。。木多说了
    关于调试
    在编辑as类的时候,语法检查需要用到Reflector这个基类,以及其他1些类的声明,但是这些类只有在编译发布fla文件时才可见,编辑.as文件时还无法找到swc组件中的类来用。
    所以在单独编辑譬如ArcReflector文件时会提示找不到Reflector文件(Reflector在swc中,这里看木到- -)。
    为了能够进行语法检查,必须在类的目录下声明这些类的形式,类似于C:\Documents and Settings\xp\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\Classes中的intrinsic类的声明。
    这里偶也用了intrinsic类来声明已经存在于swc中的类。它们保存在xp文件夹内。用户在使用的时候可以把xp文件夹拷贝到系统class目录中,或当前项目目录。 当系统可以找到这些intrinsic的类时,就会根据这些类的声明进行语法检查,而当发布swf时,系统会忽略掉所有intrinsic的类的声明,结果就是转而使用swc中的类咯~
    评测

    优点:
    - -。。使用简单。。不知道别人是不是也认同自己呢-"-。。
    数学运算,不会出现速度过快会穿过的bug。。恩。也因此会变慢。。
    事件模型,方便耐用。- -。。
    缺点:
    可能会有些慢,因为用了不少运算和函数调用。一直本着''自己解决技术问题,期待cpu升级来解决效率问题''的原则作的- -。。效率和便捷总是不能两全阿。。- - 每个Reflector实例保存所有需要检测碰撞的mc的数据。只适合像玛利那种板子多,目标少的环境了。。 显示和计算的不同步:虽然计算都是准确的,但却经常显示出本应在物体外的点被拉到物体内(但实际位置还是在外面的),例子中可以看到。这是因为计算碰撞的onEnterFrame调用出现在处理点运动的onEnterFrame之前。可以通过只使用1个onEnterFrame来解决。具体见后。

    [插嘴]
    貌似组件总是不太受欢迎,恩- -。偶本人也不是很喜欢用别人写的组件,除非已经对那个组件的结构10分了解了。。不知道那个人的coding习惯,不知道他使用了哪些变量名所以我不能再用,万一遇到bug想调试更是让人受不了。。
    所以这个组件也就不大肆宣传了。。卡卡,把代码拿出来当作1次研究咯~。。- -。。恩,所有代码是前后老长时间内写的,没咋设计过。可能乱了点。。哈哈。

    函数接口
    function collisionCalculate (v1, v2,ins,result):Boolean 这个是用户继承Refelctor类首先要实现的1个函数,在这个函数里要实现碰撞的运算,参数有4个:
    v1:{x:0,y:0}; v2:{x:0,y:0}; ins:MovieClip; result:{x0:0,y0:0,vvx:0,vvy:0}
    v1和v2是两个坐标参数,表示被检测物体的上1帧位置和当前帧位置。 ins是被检测mc的实例引用。 result用于保存计算的结果,(x0,y0)是碰撞发生的位置。(vvx,vvy)是碰后的速度矢量。 所有坐标都是用this内的坐标系。 最后要返回1个boolean表示是否发生了碰撞。 function update () 用于刷新数据,在构造函数中被调用1次。

    Reflector代码
    ?import xp.gameLib.reflect.Reflector_itf;
    //
    //on(collide) or onCollide
    //on(passed) or onPassed
    //on(hit) or onHit
    [Event("collide")]
    [Event("passed")]
    [Event("hit")]
    class xp.gameLib.reflect.Reflector extends MovieClip implements Reflector_itf{
    //
    static var __xp__init__EventDispatcher = xp.events.SimpleEventDispatcher.initialize (Reflector.prototype);
    function dispatchEvent(eventObj:Object):Void{}
    function addEventListener(event:String, handler):Void{}
    function removeEv

    凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

    分享到: 更多

    Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

    地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

    电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

    《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号