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;
    }
});*/
    },
});

原文地址:https://www.cnblogs.com/allyh/p/9520890.html

时间: 2024-10-09 20:07:03

CocosCreator动作系统的相关文章

Ngui动作系统(Action)

动作(Action)系统简介 什么是动作呢?顾名思义它是管理运行环境中所有动作的中枢,通俗点讲就是动画.它也是总个框架核心组件之一,它提供动作的创建.删除.插入,以及提供对关键帧与过渡的诸多操作.关键帧的过渡可以使用三次贝塞尔曲线,或内置的曲线 linear/ease/ease_in/ease_out/ease_in_out,这也和大多数主流框架以及游戏引擎类似. 动作是什么原理 动作怎么驱动视图进行流畅运动的呢?其实原理很简单,我们可以把动作系统看做一个独立的系统与视图或渲染完全不相关.它们之

08--动作系统(二)使用即时动作

前一篇文章大致理解了动作系统的结构,今天先学习一个简单的即时动作如何使用.首先使用配置好的环境创建一个项目DemoActionInstant 命令:python create_project.py -project DemoActionInstant -package demo.game.action -language cpp 然后在projects目录下找到win32工程文件,使用vs2010打开 改造一下项目,留下关闭按钮菜单,让他出发动作. 这里使用CCFlipX . CCFlipY.C

实现业务系统中的用户权限管理--实现篇

在设计篇中,我们已经为大家阐述了有关权限管理系统的数据库设计,在本篇中,我们将重点放在其实现代码部分.为了让你能够更直接更有效的看到全部动作的代码,我们使用"动作分解列表"的方式来陈述每个动作以及相关资源. 实现权限管理功能的动作 动作分解 动作名 相关表名 操作集类型 (S,U,I,D,SQL) 表单 模组 字符资源 是否分页? 返回提示? 权限检测 权限初始化安装 setup 无 无 无 setup setupok 否 否 否 显示添加管理组界面 addnewgroup 无 无 a

AvocadoJS视图与布局系统

视图View 在上一篇中我已经为大家讲了AvocadoJS入门,今天我就来介绍avocado的核心部分(视图与布局). View为gui核心部件派生为Notification.用它来描述屏幕上所有可见的元素,它是所有视图的基础类型它也是事件的响应者,这些事件由硬件以及操作系统触发.详细的API文档讲大家去这里查阅. 下面是avocado现在提供的所有View继承关系图:注:带*号的为抽象类型或协议没有构造函数 TextFont* TextLayout* BasicScroll* View Tex

07--动作系统(一)

动作在游戏中有举足轻重的作用,它让游戏中的元素活了起来,比如单击一个按钮使用一个特效让玩家明显的感觉到点了这个按钮:角色的移动,攻击等等都离不开动作.因此Cocos2DX也为我们提供了丰富强大的动作系统. CCNode与动作基类 CCNode中定义了动作有关的函数,也就是说根源种子类以及子类都能够执行动作. //执行一个动作,并返回该动作 CCAction* runAction(CCAction* action); //移除所有动作 void stopAllActions(void); //根据

Simple2D-25 精灵动作

精灵动画作用在精灵上,使精灵表现出动画效果.本文将详细说明如何创建一个简单的动作系统,暂时只有 4 中基本的动作--平移.旋转.缩放和 Alpha 变化,并且这些动作能够自由组合,组成串行动作或并行动作.下图是动作系统的类图: 动作就是进行插值的过程,需要在每一帧被调用.FrameCall 顾名思义是一个帧调用对象,将 FrameCall 添加到帧调用管理器 FrameCallManager 中,FrameCall 的 Step( float frame_time ) 函数则在每一帧中被调用.

动作游戏老是卡?试试从这些方面提升流畅度

动作游戏是市场上一直很受欢迎的游戏类型,经常可以看到一些游戏评论会提到某个游戏的动作流畅.打击感好,直观的感受似乎就是在说游戏的FPS(帧数)比较高而已,但是仔细一想似乎又不那么简单. 客户端性能指标本身是包含了FPS数值的,以此来判断一款游戏的流畅度是否达标,但是这里更侧重的是游戏整体的流畅度,而涉及到更细节的每个打斗动作和效果,似乎还并没有这样的衡量标准,比如当我们评价一款游戏动作特别流畅,打击感特别棒的时候,我们感受到的具体是什么? 带着这个疑问进行了一些搜罗和了解,试着分析和解答一下.

像素鸟,鸟儿飞飞飞

学习CocosCreator有段时间了,现在花了两天时间写了个像素鸟的小游戏,这个游戏之前又看到过,但是不知道怎么又下架了,之前还是蛮火的游戏,想起来后去网上看了看,原来是因为侵犯了 超级玛丽 的游戏元素,都是像素级小游戏,嗯,国外人的版权意识还是挺高的.好了,题外话就到这了,开始切入正题吧. 写这个游戏也不难,最主要的是思路,该怎么去写,我也在网上看到过 C++版 的,易语言的,Cocos2d的,都挺多的,都是大神啊 我这个是Creator版的,跟Cocos2d有点差别,但是差别又不大 好了,

理解互斥量和信号量

互斥量(Mutex) 互斥量表现互斥现象的数据结构,也被当作二元信号灯.一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源. Mutex本质上说就是一把锁,提供对资源的独占访问,所以Mutex主要的作用是用于互斥.Mutex对象的值,只有0和1两个值.这两个值也分别代表了Mutex的两种状态.值为0, 表示锁定状态,当前对象被锁定,用户进程/线程如果试图Lock临界资源,则进入排队等待:值为1,表示空闲状态,当前对象为空闲