• Torque2D MIT 学习笔记(26) 关于SimSet的一些注意事项


    前言

      SimSet在TorqueScript中可以说是最重要,也是用的最多,使用方法简单,但是有些地方需要注意,毕竟脚本调试不是那么容易.

    如何组建脚本对象

      在TorqueScript中,可以像C++中一样,定义类,有自己的变量(DynamicField),方法(Method),只要不是帧更新的对象,比如管理器,封装体等等都推荐使用脚本类来完全实现,而不是修改C++代码.

      脚本类非常灵活,它是作为一个独立的方法集合嵌入到某个控制台对象的,比如SceneObject,Sprite,SimObject,SimSet都可以,视情况而定.比如:

      1: 要实现一个独立的管理器或者服务类

        有两种选择, 一种直接作为一个独立的模块,这种在Toy中很明显,不再描述. 另一种就是如下方法:  

    %service = new SimSet()
    {
       class = "MyService"; 
    };
    
    function MyService::QuerySth( %this )
    {
       // do sth
    }
    
    %service.QuerySth();
    

         class在前面的笔记中已经详细解释过了,包括Namespace的关系.

      2: 对已知的对象扩展方法  

    %player = new Sprite()
    {
       class = "EnemySprite"; 
    };
    
    function EnemySprite::Fire( %this )
    {
       // Fire
    }
    
    %player.getPosition();
    %player.Fire()
    

       严格意义上,上面两种其实是一种情况,都是属于对已有对象类的扩展,但是理念上是不一样的.在设计过程中自行决策.

    删除与移除

      在大量使用SimSet的脚本中,如果涉及到对象的共享问题,那么就要特别注意,什么情况下使用delete,什么时候使用remove.比如:

    %set1 = new SimSet();
    for( %index =  0; %index < 3; %index++ )
    {
       %obj = new SimObject();
       %set1.add( %obj );   
    }
    
    %set2 = new SimSet();
    for( %index =  0; %index < 3; %index++ )
    {
       %set2.add( %set1.getObject(%index) );   
    }
    

       这种情况下,set1与set2中其实是同一个对象,对任意一个使用deleteobjects,另一个也会被清空,这里要非常注意,如果不能保证,那么最好是clone一下,各保存各的.

      比如set1是配置库或者模版库,而set2是具体的使用方,那么就需要克隆,不能直接add.

    总结

      TorqueScript非常强大,还在不断完善,虽然Melv不知道为什么跳槽了,但是项目还在继续,最近增加了IOS reactor和Leap的支持,而且编辑器也已经开始了!很看好!

      

  • 相关阅读:
    Python学习(18)——函数
    Python学习(17)——推导式
    labview隐藏任务栏
    labview下载地址
    labview出现系统998错误
    油猴使用指南
    无法执行该VI,必须使用LabVIEW完整版开发系统才可以解决该错误
    修改远程桌面连接默认端口
    labview使用了报表模块,在生成exe时需要添加以下内容,否则打包后不能开启excel功能
    腾讯通二次开发接口
  • 原文地址:https://www.cnblogs.com/KevinYuen/p/3013156.html
Copyright © 2020-2023  润新知