搜索
  • TA的每日心情
    郁闷…
    2020-12-25 12:59
  • 签到天数: 157 天

    [LV.7]社区八爷

    发表于 2020-7-2 19:59:22 120 浏览 0 回复

    【脚本开发记录】变量初始化踩坑,为何数组越来越多?

    VC-MP使用的编程语言是松鼠语言,这是一种弱语言,尽管很多功能都可以实现,但是有一些坑却不得不防范,要不然怎么看代码都是对的,但结果就是有问题。

    这个问题我是在写中文套件遇到的,最近搞迈阿密之城也遇到了这个问题,好在当时就已经解决了。
    其实这个问题倒并不是什么多复杂的问题,说白了只是对松鼠语言不是太了解导致的。

    具体是啥问题呢?
    一般在写代码时候很经常会用到数组,在松鼠语言里定义应该有两种办法:
    1.数组名 = [];(或数组名 <- [];)
    2.数组名 = array(数量, 默认值[默认NULL])

    这两种中,我个人比较爱用第一种,也正是因为第一种用法,导致了这个问题的发生。

    我将这个数组放置在一个类里面(玩家类statusClass)
    通常情况下,我会在onPlayerJoin时候将这个类给新的玩家赋值,也就是new了一个新的类,正常来讲肯定是所有类里面的变量都=类中设置的默认值才对,但是唯独第一种写法的数组,这里需要特别注意。

    1. Health = 100;
    2. IsReady = true;
    3. UniqueName = "ABCDE";
    复制代码

    以上代码声明都是正确的,结果也是正确的

    但如果声明了一个数组?
    1. WeaponList = [];
    复制代码

    如果仅仅是这样,那么一定不会报错,但是就会出错!

    原因也比较简单,因为之前那些变量都属于硬性的定义默认值,唯独数组这个,松鼠管理起来比较松散,也许[]不能作为一个“空数组”的默认值来使用,换句话说,这样定义的变量,在new Class时并不会清空这个值。

    所以,本来在一些高级语言中自动完成的事情,就需要我们来手动做,也就是加一个类的构造函数。

    1. constructor()
    2. {
    3.         WeaponList = [];
    4. }
    复制代码


    你只需要这样,也就是在构造函数中,new Class时告诉类重置一下这个数组,就解决了这样的问题。

    其实也有另外一种办法,就是每次new Class后,在下一行把这个数组也 = [];重置,不过这样就相对看着复杂了些。
    两点半社区 @ 230club.com
    回复

    使用道具 举报

    返回列表
    您需要登录后才可以回帖 登录 | 加入社区

    本版积分规则

    登录或注册到社区吧!

    运营团伙

    幻想乐趣工作室

    官方QQ群

    37880111(做饭+女装交流)

    扫一扫快速加入

    群号652692981

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