laya 学习备忘(持续更新)

2019-01-17  本文已影响54人  合肥黑

1.默认的name
把一个图片的name命名为mask,真的就遮罩了
类似的还有list的cell中如果出现selected作为name的图片,会自动做为选中状态
同样以btn开头的,会解析为Button
2.作用域
node.on(Event.CLICK, null, resizeHandler, [node]);
注意作用域为null时resizeHandler方法取不到本类中的变量
3.DISPLAY和UNDISPLAY事件
node.as:

/**表示是否在显示列表中显示。是否在显示渲染列表中。*/
public function get displayedInStage():Boolean {
    return _displayedInStage;
}

/** @private */
public function _setDisplay(value:Boolean):void {
    if (_displayedInStage !== value) {
        _displayedInStage = value;
        if (value) event(Event.DISPLAY);
        else event(Event.UNDISPLAY);
    }
}

4.查看源码,可以看到对内存泄露的推荐处理方式

public function set target(value:Sprite):void {
    if (_target) {
        _target.off(Event.MOUSE_WHEEL, this, onTargetMouseWheel);
        _target.off(Event.MOUSE_DOWN, this, onTargetMouseDown);
    }
    _target = value;
    if (value) {
        _mouseWheelEnable && _target.on(Event.MOUSE_WHEEL, this, onTargetMouseWheel);
        _touchScrollEnable && _target.on(Event.MOUSE_DOWN, this, onTargetMouseDown);
    }
}

5.在AS中,如果运行到某些else分支,需要进入Debug,可以使用

try {
    effectNode = this._effectFunction.runWith(key);
    var order = Number(effectLayer.order);
    this.cocosAddChildAt(effectNode, order);
    if (order == 0) Laya.timer.callLater(this, updateZOrder);
    this._effectNodes[key] = effectNode;
} catch(error : Error) {
    //__JS__("debugger")
    debugger;
}

6.VISIBILITY_CHANGE
舞台可见性发生变化时调度(比如浏览器或者当前标签被切换到后台后调度),使用Laya.stage.isVisibility可以获取当前是否处于显示状态

7.Laya.stage.frameRate = Laya.Stage.FRAME_MOUSE;

/**全速模式,以60的帧率运行。*/
public static const FRAME_FAST:String = "fast";
/**慢速模式,以30的帧率运行。*/
public static const FRAME_SLOW:String = "slow";
/**自动模式,以30的帧率运行,但鼠标活动后会自动加速到60,鼠标不动2秒后降低为30帧,以节省消耗。*/
public static const FRAME_MOUSE:String = "mouse";
/**休眠模式,以1的帧率运行*/
public static const FRAME_SLEEP:String = "sleep";

8.layaCanvas后面再放一个canvas时,会出现遮挡。这时候使用Laya.stage.bgColor = "none";是不够的,还需要在前面加上

        Config.isAlpha = true;
        // 不支持WebGL时自动切换至Canvas
        Laya.init(800, 600,WebGL);

isAlpha这个属性,参见源码:

        /**
         * 设置画布是否透明,只对2D(WebGL)、3D有效。
         */
        public static var isAlpha:Boolean = false;

9.getAttribute

let layaCanvas = document.getElementById("layaCanvas");
layaCanvas.getAttribute("height")

10.IDE
打开文件菜单,新建窗口,可以实现双开
如果大家安装的Typescript版本不一致,会出现生成的js文件不一致。可以使用tsc -v来查看版本。
使用npm update -g typescript即可升级到最新版本
也可以通过在后面加版本号的方式安装指定版本,如npm install -g typescript@2.7.1

11.做了一个遮罩页面,去挡住下方的页面不响应事件。设置了宽高,也设置了mouseEnabled,但是却无效。检查了一下,mouseEnabled设置给遮罩sprite是不行的,需要设置给整个view

12.注意变量类型。在复制别的项目代码时,函数方法参数出现xxx:number = null这样的默认值,但是在手写逻辑时,判断参数,是以if(xxx != 0)这样的条件来判断的,这就出现bug(耽误了1小时……)

13.虚拟摇杆
参考【咸鱼教程】虚拟摇杆 以及作者其他分享项目
laya demo fairygui joystick

end

上一篇 下一篇

猜你喜欢

热点阅读