zoukankan      html  css  js  c++  java
  • 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的支持,而且编辑器也已经开始了!很看好!

      

  • 相关阅读:
    【程序15】成绩>=90分用A表示,60-89分用B表示, 60分以下用C表示。
    【程序13】打印出所有的“水仙花数”,运算符和表达式
    cacti安装
    lamp安装
    虚拟机克隆之后网络重启失败
    Linux 标准输入输出、重定向
    /etc/crontab和crontab -e的区别
    nginx安装
    【程序11】有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,问每个月的兔子总数为多少?
    【程序9】输出国际象棋棋盘
  • 原文地址:https://www.cnblogs.com/KevinYuen/p/3013156.html
Copyright © 2011-2022 走看看