贪吃蛇游戏笔记5

时间:2021-01-27 15:24:07
贪吃蛇游戏笔记5 获取不到按钮,加载的文件错误  MainScene.json   Login.json MainScene.json用uname.getstring() 加载cocostudio/ json文件: var LoginJs=ccs.load(res.Login_json);this.addChild(LoginJs);获取Button按钮uiTextField:null,uiTextField1:null,获取按钮  。。。。逻辑标签。。。。。var Tlayer=ccui.seekWidgetByTag(LoginJs.node,92);button=ccui.helper.seekWidgetByTag(Tlayer,93);button.addTouchEventListener(this.touchEvent,this);
获取基础容器var T1=ccui.helper.seekWidgetByTag(LoginJs.node,95);获取文本框 uiTextFiled=ccui.helper.seekWidgetByTag(T1,98);//获取文本框

  var T2=ccui.helper.seekWidgetByTag(LoginJs.node,99);//获取基础容器

  uiTextFiled1=ccui.helper.seekWidgetByTag(T2,102);

seekWidgetByTag???????

helper????????cocos code IDE源码

ccui.helper = {

/**

 * Finds a widget whose tag equals to param tag from root widget.

 * @param {ccui.Widget} root

 * @param {number} tag

 * @returns {ccui.Widget}

 */

seekWidgetByTag: function (root, tag) {

    if (!root)

        return null;

    if (root.getTag() === tag)

        return root;


    var arrayRootChildren = root.getChildren();

    var length = arrayRootChildren.length;

    for (var i = 0; i < length; i++) {

        var child = arrayRootChildren[i];

        var res = ccui.helper.seekWidgetByTag(child, tag);

        if (res !== null)

            return res;

    }

    return null;

},

/**

* Finds a widget whose name equals to param name from root widget.

* @param {ccui.Widget} root

* @param {String} name

* @returns {ccui.Widget}

*/

seekWidgetByName: function (root, name) {

    if (!root)

        return null;

    if (root.getName() === name)

        return root;

    var arrayRootChildren = root.getChildren();

    var length = arrayRootChildren.length;

    for (var i = 0; i < length; i++) {

        var child = arrayRootChildren[i];

        var res = ccui.helper.seekWidgetByName(child, name);

        if (res !== null)

            return res;

    }

    return null;

},

/**

* Finds a widget whose name equals to param name from root widget.

* RelativeLayout will call this method to find the widget witch is needed.

* @param {ccui.Widget} root

* @param {String} name

* @returns {ccui.Widget}

*/

seekWidgetByRelativeName: function (root, name) {

    if (!root)

        return null;

    var arrayRootChildren = root.getChildren();

    var length = arrayRootChildren.length;

    for (var i = 0; i < length; i++) {

        var child = arrayRootChildren[i];

        var layoutParameter = child.getLayoutParameter(ccui.LayoutParameter.RELATIVE);

        if (layoutParameter && layoutParameter.getRelativeName() === name)

            return child;

    }

    return null;

},


    /**

     * Finds a widget whose action tag equals to param name from root widget.

     * @param {ccui.Widget} root

     * @param {Number} tag

     * @returns {ccui.Widget}

     */

seekActionWidgetByActionTag: function (root, tag) {

    if (!root)

        return null;

    if (root.getActionTag() === tag)

        return root;

    var arrayRootChildren = root.getChildren();

    for (var i = 0; i < arrayRootChildren.length; i++) {

        var child = arrayRootChildren[i];

        var res = ccui.helper.seekActionWidgetByActionTag(child, tag);

        if (res !== null)

            return res;

    }

    return null;

} ,

    _activeLayout: true,

    /**

     * Refresh object and it's children layout state

     * @param {cc.Node} rootNode

     */

    doLayout: function(rootNode){

        if(!this._activeLayout)

            return;

        var children = rootNode.getChildren(), node;

        for(var i = 0, len = children.length;i < len; i++) {

            node = children[i];

            var com = node.getComponent(ccui.LayoutComponent.NAME);

            var parent = node.getParent();

            if (null != com && null !== parent && com.refreshLayout)

                com.refreshLayout();

        }

    },


    changeLayoutSystemActiveState: function(active){

        this._activeLayout = active;

    },

    /**

     * restrict capInsetSize, when the capInsets' width is larger than the textureSize, it will restrict to 0,   <br/>

     * the height goes the same way as width.

     * @param {cc.Rect} capInsets

     * @param {cc.Size} textureSize

     */

    restrictCapInsetRect: function (capInsets, textureSize) {

        var x = capInsets.x, y = capInsets.y;

        var width = capInsets.width, height = capInsets.height;


        if (textureSize.width < width) {

            x = 0.0;

            width = 0.0;

        }

        if (textureSize.height < height) {

            y = 0.0;

            height = 0.0;

        }

        return cc.rect(x, y, width, height);

    }

};


winSize怎样获取??????

第二种

//////_login.addLickEventListener(this.btnCallback)btnCallback:function(){ }

var username=ccui.helper.seekWidgetByTag(Tlayer,93);

///////ccui.helper.seekWidgetbyname直接用名字加载文本框

flag??????

seekWidgetByTag函数的原理

seekWidgetByTag: function (root, tag) {

    if (!root)

        return null;

    if (root.getTag() === tag)

        return root;


    var arrayRootChildren = root.getChildren();

    var length = arrayRootChildren.length;

    for (var i = 0; i < length; i++) {

        var child = arrayRootChildren[i];

        var res = ccui.helper.seekWidgetByTag(child, tag);

        if (res !== null)

            return res;

    }

    return null;

}



判断食物不出现在蛇的身体上    方法:遍历,食物JS      resource加载文件类project.json加载一下main入口menu菜单     菜单设置左下角    0,0    后面可以根据场景来设置坐标window.location.href=“http://baidu.com”,超链接
锚点设置,否则中心点处浏览器     导致九宫格形变//静态方法SnakeGame.create=function(){var  snake=;return snake;}Math.round()保证为整数;Math.sin()清空节点,,,,,,清空蛇的身体数组setString()从后往前的遍历方法,移动身体var target=event.getCurrentTarget(); 得到this

旋转的函数解析,注意参数到使用

cc.rotateTo = function (duration, deltaAngleX, deltaAngleY) {

    return new cc.RotateTo(duration, deltaAngleX, deltaAngleY);

};

director.pause();全部的场景都进行了暂停,如何解决?????,再次进入主游戏界面,图片若是旋转的 会出现倒转的现象,,,当游戏GameOver的时候,该语句暂停了 游戏的所有场景,目前本人还没有解决办法,暂停主循环:cc.director.pause()恢复主循环:cc.director.resume()

场景管理

通常来说,一个游戏会包含用于不同用例的几个场景,程序应该通过cc.director的API来控制场景流。

// 让导演对象执行目标场景cc.director.runScene(scene);  // 获取当前正在执行的脚本var scene = cc.director.getRunningScene();  // 将一个新场景推入场景栈中,并替换运行场景为这个新场景var scene = cc.director.pushScene(scene);// 将场景栈顶的场景推出场景栈,并替换运行场景为推出后栈顶的新场景cc.director.popScene();// 将场景栈中除了栈底的根场景以外的所有场景推出,并替换运行场景为根景。
cc.director.popToRootScene()

除此之外,你可以通过cc.TransitionScene的效果类的转场特效来切换场景。


// 转场特效持续两秒var transitionTime = 2;// 创建下一个场景var nextScene = new cc.Scene();// 使用下一个场景创建转场特效场景var transitionScene = new cc.TransitionProgressInOut(transitionTime, nextScene);// 替换运行场景为转场特效场景cc.director.runScene(transitionScene);JS关于局部变量和全局变量

javascript中变量的作用域跟其它编程语言中变量的作用域一样也有两种:局部变量和全局变量。

下面用具体的例子来了解一下局部变量和全局变量的关系:

实例一:

  1. <span style="font-size:18px;">var msg = "全局变量";  
  2. function show(){  
  3.        msg = "局部变量";  
  4.        document.writeln(msg);  
  5. }  
  6. show();  
  7. document.writeln(msg);</span>  

最后执行的结果是:

           局部变量

           局部变量

实例二:

  1. <span style="font-size:18px;">var msg = "全局变量";  
  2. function show() {  
  3.       var msg;  
  4.       msg = "局部变量";  
  5.       document.writeln(msg);  
  6. }  
  7. show();  
  8. document.writeln(msg);</span>  

最后执行的结果是:

      局部变量

      全局变量

 分析:调用show()函数会打印出“局部变量”这个不难理解;实例一中的show()函数操作的是全局变量msg,当show()函数结束的时候局部变量msg已经被修改成别的值了,所以会打印出“局部变量”;而实例二中的show()函数中重新定义了一个自己局部的变量msg,操作的也是自己的局部变量(覆盖了全局变量msg),当show()函数结束的时候,剩下的代码就跟show()函数没有半毛钱的关系了,所以会打印出“全局变量”。

// 获取游戏主循环是否被暂停var paused = cc.director.isPaused();// 设置或获取动画帧间隔,这个设置会直接影响帧率var interval = cc.director.getAnimationInterval();cc.director.setAnimationInterval(value);// 设置或获取导演对象的内容放缩比例var scale = cc.director.getContentScaleFactor();cc.director.setContentScaleFactor(scaleFactor);  // 设置或获取游戏世界可视窗口的原点和大小var origin = cc.director.getVisibleOrigin();var size = cc.director.getVisibleSize();// 获取游戏世界大小,winSize的大小通常等同于设计分辨率,而winSizeInPixel的大小是游戏世界的像素大小var winSize = cc.director.getWinSize();var winSizeInPixel = cc.director.getWinSizeInPixels();// 设置或获取调试信息是否被显示var isDisplaying = cc.director.isDisplayStats();cc.director.setDisplayStats(displayStats);// 设置或获取视图,它指向`cc.view`var view = cc.director.getOpenGLView();cc.director.setOpenGLView(openGLView);// 设置或获取WebGL/OpenGL的投影,// 可能的投影类型包括:cc.Director.PROJECTION_2D, cc.Director.PROJECTION_3D, cc.Director.PROJECTION_CUSTOMcc.director.getProjection();cc.director.setProjection(projection);

导演对象还有一些内建的系统事件:

cc.Director.EVENT_AFTER_DRAW:这个事件在每一帧图像的绘制完成之后被触发。

cc.Director.EVENT_AFTER_VISIT:这个事件在每一帧场景树遍历之后被触发。

cc.Director.EVENT_AFTER_UPDATE:这个事件在每一帧计时器任务执行完成之后被触发。

cc.Director.EVENT_PROJECTION_CHANGED:这个事件在导演对象的投影属性被修改之后触发。