类中静态变量的初始化在Flash和CPP目标的小差异

原想写两个静态变量把当前设备的屏幕大小预先保存起来,这样比起在代码中写Lib.current.stage.stageWidth能少打几个字,于是,我就这么写了:

class Util {

public static inline var screenWidth: Int = Lib.current.stage.stageWidth;

public static inline var screenHeight: Int = Lib.current.stage.stageHeight;

...

}

这样代码中需要访问屏幕大小的地方就用Util.screenWidth, Util.screenHeight就好了。

但是发现Flash目标中没有问题,而Windows目标则出现很怪异的现象,运行时连窗口都不会创建就报错了。

通过trace发现,报错的时候甚至连主类的main函数都还没进入呢,这时定位到可能是类加载的问题,经过大量的尝试,发现只要把引入Util类的地方注释起来就不会报错了。

联想起来出错的时候连窗口都还没有,我猜测,haXe在CPP目标上是在创建窗口之前加载所有的类,而这时舞台也就是Lib.current.stage一定还没有就绪,因此上面的类初始化时就会出错。而在Flash目标则相反,因此同样的代码在Flash上面没有问题。这是又一个平台差异性问题,当然,只要稍作注意,还是很容易避免的,只是这种错误在控制台不会有位置提示,确实非常难以排查。

我的解决方案是,给上面Util类增加一个init()函数,在此函数中初始化这两个静态变量,然后在主类main函数的第一行就调用此函数,就能保证变量能够有效初始化了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值