cocos js 代码阅读笔记_170510(一)

35 篇文章 0 订阅
28 篇文章 0 订阅
window 全局对象

公共方法来将cocos studio的文件节点家在到场景中,this就是场景Scene中去
addCachedCCSChildrenTo(res.MaScene1_json, this);
//自己实现了一个 栈处理 ccs上的节点一个个家在到场景中,通过windiw全局对象来操作
var addCachedCCSChildrenTo = function (res, distNode) {
    window.ccsCache = window.ccsCache || {};
    var isRelease = !!window.ccsCache[res];
    window.ccsCache[res] = window.ccsCache[res] || ccs.load(res).node;
    var parent = window.ccsCache[res];
    var arr = [];
    for (var i = 0; i < parent.children.length; i++)
        arr.push(parent.children[i]);
    for (var i = 0; i < arr.length; i++) {
        arr[i].retain();
        arr[i].removeFromParent(false);
    }
    for (var i = 0; i < arr.length; i++) {
        distNode.getChildByName("Scene").addChild(arr[i]);
        arr[i].release();
    }
    if (isRelease)
        window.ccsCache[res].release();
    delete window.ccsCache[res];
};
loadCCSTo这个是加载的主场景Scene的ccs文件,加载到,当场景中的ccs文件加载完成后就
会调用 
onCCSLoadFinish
这个函数来处理界面加载完成后的逻辑
	distNode是scene场景
var loadCCSTo = function (res, distNode, rootName, moreArr, playaction) {
    moreArr = moreArr || [];
    var mainscene = null;
    if (window.ccsCache && window.ccsCache[res]) {
        mainscene = window.ccsCache[res];
        window.ccsCache[res] = null;
        distNode.addChild(mainscene.node);
        mainscene.node.release();
    }
    else {
        mainscene = ccs.load(res);		//加载ccs文件到场景中
        distNode.addChild(mainscene.node);
    }

    var interval = null;			//1毫秒检查一次ccs资源加载,如果加载成功了就往下执行onCCSLoadFinish里面的逻辑,
						//如果没有执行就一直加载隔1毫秒检查一次
    var checkFunc = function () {
        if (!checkAllNodesValid(distNode.getChildByName(rootName)))
            return;
        var rootNode = distNode.getChildByName(rootName);
        for (var i = 0; i < moreArr.length; i++) {
            var node = rootNode.getChildByName(moreArr[i]);
            if (!node || !cc.sys.isObjectValid(node))
                return;
        }
        	(interval);
        interval = null;

        var ret = true;
        if (distNode.getBeforeOnCCSLoadFinish && distNode.getBeforeOnCCSLoadFinish())
            ret = distNode.getBeforeOnCCSLoadFinish()();
        if (ret && distNode.onCCSLoadFinish)
            distNode.onCCSLoadFinish.call(distNode);	//ccs文件的字节点加载完成后调用onCCSLoadFinish函数,call(),绑定disNode节点
    };
    interval = setInterval(checkFunc, 1);		//
setInterval

checkFunc();
	if (playaction) {        
		mainscene.node.runAction(mainscene.action);        
		mainscene.action.play('action', true);    
	}};

null === undefined
false
null == undefined
true
batchSetChildrenZorder 设置孩子的loczorder


getRootNode: function () {
    return this.getChildByName("Scene");
},
$ = create$(this.getRootNode());

var create$ = function (sceneNode) {
    var func = function (query, rootNode) { 		//JQuery 语句,查找rootNode节点
        var arr = query.split(/\./g); 			//正则表达式,删除. 然后返回string。
        var t = rootNode || sceneNode;
        for (var i = 0; i < arr.length; i++)
            if (t) {
                if (!cc.sys.isObjectValid(t)) {
                    cc.log("-- not a valid object " + query);
                    return null;
                }
                t = t.getChildByName(arr[i]);
            }
            else {
                return null;
            }
        return t;
    };
    var retFunc = null;
    if (_.isArray(sceneNode)) {
        retFunc = function (query, rootNode) {
            if (rootNode)
                return func(query, rootNode);
            else {
                for (var i = 0; i < sceneNode.length; i++) {
                    var ret = func(query, sceneNode[i]);
                    if (ret)
                        return ret;
                }
                return null;
            }
        };
    }
    else
        retFunc = func;
    return retFunc;
};
 

 replace(/\//g, '') 的作用是把/替换成''。

用法如下:比如:var aa= "adsdd/sdsd12/";bb=aa.replace(/\//g, '') ;那么bb=adsddsdsd12

一般来说
$是为了简短输入 在Prototype $('#id')是等于document.getElementById('id'),即DOM对象。
但在jQuery中$('#id')获取的却是jQuery对象,而不是DOM对象。
所以,在Prototype中可以直接使用$('#id').JS内置方法()
但jQuery只能$('#id').jQuery方法()
jQuery有个比较好的实现是,使用jQuery方法后返回的仍然是jQuery对象,所以我们可以一直写下去,如$('#id').css(...).hide().show();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Cocos Creator 中使用 JavaScript 编写触屏事件代码的方法如下: 1. 在场景中添加一个节点,并在该节点上添加脚本组件。 2. 在脚本组件中添加如下代码,以监听触屏事件: ```js cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_START, this.onTouchStart, this); cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_MOVE, this.onTouchMove, this); cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_END, this.onTouchEnd, this); ``` 3. 在脚本组件中添加 onTouchStart,onTouchMove,onTouchEnd 函数来处理触屏事件。 4. 添加相应的逻辑处理函数。 示例代码: ```js cc.Class({ extends: cc.Component, properties: { // foo: { // // ATTRIBUTES: // default: null, // The default value will be used only when the component attaching // // to a node for the first time // type: cc.SpriteFrame, // optional, default is typeof default // serializable: true, // optional, default is true // }, // bar: { // get () { // return this._bar; // }, // set (value) { // this._bar = value; // } // }, }, // LIFE-CYCLE CALLBACKS: onLoad () { cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_START, this.onTouchStart, this); cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_MOVE, this.onTouchMove, this); cc.systemEvent.on(cc.SystemEvent.EventType.TOUCH_END, this.onTouchEnd, this); }, onTouchStart: function (event) { // 处理触摸开始事件 }, onTouchMove: function (event) { // 处理触摸移动事件 }, onTouchEnd: function (event) { // 处理触摸结束事件 }, start () { }, // update (dt) {}, }); `` ### 回答2: 在Cocos Creator中,要编写一个允许触屏的代码,可以按照以下步骤进行操作: 1. 创建一个新的JavaScript脚本文件,例如"TouchScript.js"。 2. 在脚本中定义一个新的类,例如"TouchScript",并继承自cc.Component。 3. 在类的属性中定义一个触点的回调函数,例如"onTouchStart"、"onTouchMove"、"onTouchEnd"。 4. 在onLoad函数中添加触摸监听事件,通过cc.Canvas组件的node属性获取画布节点,然后调用node.on('touchstart', this.onTouchStart, this)等方法添加触摸事件回调函数。 5. 实现每个触点回调函数,并在触摸事件发生时执行相应的代码逻辑。 6. 在需要使用触点的节点上添加TouchScript.js脚本组件。 以下是一个示例代码: ```javascript cc.Class({ extends: cc.Component, properties: {}, onLoad () { let canvasNode = cc.find('Canvas'); canvasNode.on('touchstart', this.onTouchStart, this); canvasNode.on('touchmove', this.onTouchMove, this); canvasNode.on('touchend', this.onTouchEnd, this); }, onTouchStart (event) { let touchPos = event.getLocation(); console.log("触摸开始,触摸位置:", touchPos); // 添加触摸开始的逻辑代码... }, onTouchMove (event) { let touchPos = event.getLocation(); console.log("触摸移动,触摸位置:", touchPos); // 添加触摸移动的逻辑代码... }, onTouchEnd (event) { let touchPos = event.getLocation(); console.log("触摸结束,触摸位置:", touchPos); // 添加触摸结束的逻辑代码... }, }); ``` 在需要使用触点的节点上添加TouchScript组件后,脚本中的触点回调函数就会在触摸事件发生时被触发,并执行相应的代码逻辑。你可以根据具体需求,在触点回调函数中编写相应的业务逻辑。 ### 回答3: 在Cocos Creator中,可以通过监听触摸事件来实现允许触屏的代码编写。以下是一个简单的示例代码: ```javascript // 在场景或节点的脚本中初始化触摸事件监听 // 导入cc模块 const {ccclass, property} = cc._decorator; @ccclass export default class YourScript extends cc.Component { onLoad() { // 添加触摸事件监听 this.node.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this); this.node.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMove, this); this.node.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this); this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onTouchCancel, this); } onTouchStart(touch) { // 触摸开始时的逻辑处理 // 在屏幕上点击触发的事件 } onTouchMove(touch) { // 触摸移动时的逻辑处理 // 手指在屏幕上移动时触发的事件 } onTouchEnd(touch) { // 触摸结束时的逻辑处理 // 手指离开屏幕时触发的事件 } onTouchCancel(touch) { // 触摸取消时的逻辑处理 // 触摸意外取消时触发的事件 } } ``` 在上述代码中,使用了Cocos Creator的cc.Node的on方法来监听触摸事件。在onLoad方法中添加了cc.Node.EventType.TOUCH_START、cc.Node.EventType.TOUCH_MOVE、cc.Node.EventType.TOUCH_END和cc.Node.EventType.TOUCH_CANCEL这四个事件的监听器。然后,我们可以根据需要在对应的触摸事件处理函数(onTouchStart、onTouchMove、onTouchEnd和onTouchCancel)中编写触摸事件的逻辑处理。 通过这样的代码编写,就可以实现允许触屏的功能。当用户触摸屏幕时,相应的触摸事件处理函数将会被调用,从而实现想要的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值