zoukankan      html  css  js  c++  java
  • CocosCreator动作系统

    废话没有,直接上代码,有注释可以看的,

     
    
    cc.Class({
        extends: cc.Component,
    
        properties: {
            //1
            player:{
                default:null,
                type:cc.Node,
                tooltip:"this is a tips"//属性检查器内的自定义提示信息
            }
        },
     
        onLoad:function(){
            //////////使用动作系统///////////////////////////////////
            //var action1=this.player.moveTo(2,100,100);  cc.
            //this.node.runAction(action1);   error
    
            //action 1 简单移动动作
            //var action1=cc.moveTo(2,100,100);
            //this.player.runAction(action1);
    
            // 2  顺序执行的动作
            //var seq0=cc.sequence(cc.moveBy(2,200,0),cc.moveBy(2,-200,0)) ;
            //this.player.runAction(seq0);
    
            // 3  同步动作   让节点在向上移动的同时缩放
            //var spawn = cc.spawn(cc.moveBy(0.5, 0, 50), cc.scaleTo(0.5, 0.8, 1.4));
            //this.player.runAction(spawn);
    
            // 4 重复动作 cc.repeat 重复动作用来多次重复一个动作
            /*
            var seq=cc.repeat(
                cc.sequence(
                    cc.moveBy(2,200,0),
                    cc.moveBy(2,-200,0)),5 );
            this.player.runAction(seq);  */
    
            //5 永远重复 循环
            /*
            var seq0=cc.repeatForever(cc.sequence(cc.moveBy(2,200,0),cc.moveBy(2,-200,0))) ;
            this.player.runAction(seq0);  */
    
            //6 速度动作
            /*
            var seq1=cc.speed(
                cc.spawn(
                    cc.moveBy(2,200,0),
                    cc.scaleTo(2, 0.8, 1.4)
                ),0.5 );
                this.player.runAction(seq1);  */
            // 一个复杂的跳跃动画
             var JumpAction = cc.sequence(
                cc.spawn(
                    cc.scaleTo(0.1, 0.8, 1.2),
                    cc.moveTo(0.1, 0, 10)
                ),
                cc.spawn(
                    cc.scaleTo(0.2, 1, 1),
                    cc.moveTo(0.2, 0, 0)
                ),
                cc.delayTime(0.5),
                cc.spawn(
                    cc.scaleTo(0.1, 1.2, 0.8),
                    cc.moveTo(0.1, 0, -10)
                ),
                cc.spawn(
                    cc.scaleTo(0.2, 1, 1),
                    cc.moveTo(0.2, 0, 0)
                )
    // 以1/2的速度慢放动画,并重复5次
            ).speed(2).repeat(5);
             this.player.runAction(JumpAction);
        },
    
        start :function() {
            //获取组件所在的节点,只要在组件方法里访问 this.node 变量:
            var node=this.node;
            console.log(node.name+":0000000000000000000000000");
            //获取其他组件,获得同一个节点上的其它组件,这就要用到 getComponent 这个 API
            var canvas=this.getComponent(cc.Canvas);//canvas 为object
            var text=canvas.name+":11111111111111111111111111";
            console.log(text);
            //也可以为 getComponent 传入一个类名
            var label = this.getComponent("cc.Canvas");
            console.log(label.name+":222222222222222222");//输出结果同上
            //对用户定义的组件而言,类名就是脚本的文件名,且区分大小写。
            //在节点上也有一个 getComponent 方法,它们的作用是一样的:
            cc.log( this.node.getComponent(cc.Label) === this.getComponent(cc.Label) );  // true
             /*如果在节点上找不到你要的组件,getComponent 将返回 null,如果你尝试访问 null 的值,
            将会在运行时抛出 "TypeError" 这个错误。因此如果你不确定组件是否存在,记得判断一下:*/
             if(this.node.getComponent(cc.label)){
                 console.log("this node had label component");
             }
             else{
                 console.log("this node don't have this component");
             }
             ////////////////////////////////////////////////////////////////////////
           //获得其它节点及其组件
           // 最直接的方式就是在 属性检查器 中设置需要的对象。只需要在脚本中声明对应属性即可:1
           //接着就可以将层级管理器上的任意一个节点拖到这个 player 控件,即可,之后可以直接在脚本里访问 player:this.player.xxxx
            ///////////////////////查找子节点/////////////////////////////////////////////////////////////
            //游戏场景中有很多个相同类型的对象,像炮塔、敌人和特效通常都有一个全局的脚本来统一管理。此时不适合使用属性检查器一个个关联到脚本。为了更好地统一管理这些对象,可以统一的父物体下,然后通过父物体来获得所有的子物体:
            var cannnos=this.node.children;
             for(var i=0;i<cannnos.length;i++)
             {
                 console.log(cannnos[i].name);//不包括自身
             }
             //还可以使用 getChildByName:this.node.getChildByName("Cannon 01");
           // console.log(this.node.getChildByName("richtext").name);
            //全局名字查找 当 cc.find 只传入第一个参数时,将从场景根节点开始逐级查找:
            //this.backNode = cc.find("Canvas/Menu/Back",this.node);
            ////////////////////////访问已有变量里的值//////////////////////////////////////////////////////////////
        //1,通过全局变量访问
            /*你应当很谨慎地使用全局变量,当你要用全局变量时,应该很清楚自己在做什么,我们并不推荐滥用全局变量,即使要用也最好保证全局变量只读。
        让我们试着定义一个全局对象 window.Global,这个对象里面包含了 backNode 和 backLabel 两个属性。
        // Globals.js, this file can have any name
        window.Global = {
        backNode: null,
        backLabel: null,
        };
        由于所有脚本都强制声明为 "use strict",因此定义全局变量时的 window. 不可省略。
        接着你可以在合适的地方直接访问并初始化 Global:
        // Back.js
        cc.Class({
        extends: cc.Component,
        onLoad: function () {
            Global.backNode = this.node;
            Global.backLabel = this.getComponent(cc.Label);
        }
        });
        初始化后,你就能在任何地方访问到 Global 里的值:
        // AnyScript.js
        cc.Class({
        extends: cc.Component,
        // start 会在 onLoad 之后执行,所以这时 Global 已经初始化过了
        start: function () {
            var text = 'Back';
            Global.backLabel.string = text;
        }
    });
    访问全局变量时,如果变量未定义将会抛出异常。
    添加全局变量时,请小心不要和系统已有的全局变量重名。
    你需要小心确保全局变量使用之前都已初始化和赋值。 */
    //2,通过模块访问
            /*通过模块访问
    如果你不想用全局变量,你可以使用 require 来实现脚本的跨文件操作,让我们看个示例:
    // Global.js, now the filename matters
    
    module.exports = {
        backNode: null,
        backLabel: null,
    };
    每个脚本都能用 require + 文件名(不含路径) 来获取到对方 exports 的对象。
    // Back.js
    
    // this feels more safe since you know where the object comes from
    var Global = require("Global");
    
    cc.Class({
        extends: cc.Component,
    
        onLoad: function () {
            Global.backNode = this.node;
            Global.backLabel = this.getComponent(cc.Label);
        }
    });
    // AnyScript.js
    
    // this feels more safe since you know where the object comes from
    var Global = require("Global");
    
    cc.Class({
        extends: cc.Component,
    
        // start 会在 onLoad 之后执行,所以这时 Global 已经初始化过了
        start: function () {
            var text = "Back";
            Global.backLabel.string = text;
        }
    });*/ 
        }, 
    });
  • 相关阅读:
    TCP四种定时器--学习笔记
    Python魔术师--self
    python的socket里 gethostbyname 与 gethostbyname_ex 的区别
    用python查看URL编码的中文
    基于linux 的2048
    用灵活的指针访问类私有变量
    ie8无法拉伸背景图
    图片的onerror 事件解析
    stream.js
    Promise
  • 原文地址:https://www.cnblogs.com/allyh/p/9520890.html
Copyright © 2011-2022 走看看