cocos creater常用的函数

1.cc.moveTo

参数列表
-时间
-位置

var actionBy = cc.moveTo(2, cc.v2(80, 80));

2.cc.sequence

顺序执行动作,创建的动作将按顺序依次运行。

参数列表

  • actionOrActionArray FiniteTimeAction | FiniteTimeAction[]参 数数组
  • tempArray FiniteTimeAction
// example
// create sequence with actions
var seq = cc.sequence(act1, act2);

// create sequence with array
var seq = cc.sequence(actArray);

3.Action类

API

/**
 * @module cc
 */

/**
 * !#en Base class cc.Action for action classes.
 * !#zh Action 类是所有动作类型的基类。
 * @class Action
 */
cc.Action = cc.Class({
    name: 'cc.Action',

    //**************Public Functions***********

    ctor:function () {
        this.originalTarget = null;
        this.target = null;
        this.tag = cc.Action.TAG_INVALID;
    },

    /**
     * !#en
     * to copy object with deep copy.
     * returns a clone of action.
     * !#zh 返回一个克隆的动作。
     * @method clone
     * @return {Action}
     */
    clone:function () {
        var action = new cc.Action();
        action.originalTarget = null;
        action.target = null;
        action.tag = this.tag;
        return action;
    },

    /**
     * !#en
     * return true if the action has finished.
     * !#zh 如果动作已完成就返回 true。
     * @method isDone
     * @return {Boolean}
     */
    isDone:function () {
        return true;
    },

    // called before the action start. It will also set the target.
    startWithTarget:function (target) {
        this.originalTarget = target;
        this.target = target;
    },

    // called after the action has finished. It will set the 'target' to nil.
    stop:function () {
        this.target = null;
    },

    // called every frame with it's delta time. <br />
    step:function (dt) {
        cc.logID(1006);
    },

    // Called once per frame. Time is the number of seconds of a frame interval.
    update:function (dt) {
        cc.logID(1007);
    },

    /**
     * !#en get the target.
     * !#zh 获取当前目标节点。
     * @method getTarget
     * @return {Node}
     */
    getTarget:function () {
        return this.target;
    },

    /**
     * !#en The action will modify the target properties.
     * !#zh 设置目标节点。
     * @method setTarget
     * @param {Node} target
     */
    setTarget:function (target) {
        this.target = target;
    },

    /**
     * !#en get the original target.
     * !#zh 获取原始目标节点。
     * @method getOriginalTarget
     * @return {Node}
     */
    getOriginalTarget:function () {
        return this.originalTarget;
    },

    // Set the original target, since target can be nil.
    // Is the target that were used to run the action.
    // Unless you are doing something complex, like cc.ActionManager, you should NOT call this method.
    setOriginalTarget:function (originalTarget) {
        this.originalTarget = originalTarget;
    },

    /**
     * !#en get tag number.
     * !#zh 获取用于识别动作的标签。
     * @method getTag
     * @return {Number}
     */
    getTag:function () {
        return this.tag;
    },

    /**
     * !#en set tag number.
     * !#zh 设置标签,用于识别动作。
     * @method setTag
     * @param {Number} tag
     */
    setTag:function (tag) {
        this.tag = tag;
    },

    // Currently JavaScript Bindigns (JSB), in some cases, needs to use retain and release. This is a bug in JSB,
    // and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.
    // This is a hack, and should be removed once JSB fixes the retain/release bug.
    retain:function () {
    },

    // Currently JavaScript Bindigns (JSB), in some cases, needs to use retain and release. This is a bug in JSB,
    // and the ugly workaround is to use retain/release. So, these 2 methods were added to be compatible with JSB.
    // This is a hack, and should be removed once JSB fixes the retain/release bug.
    release:function () {
    }
});

/**
 * !#en Default Action tag.
 * !#zh 默认动作标签。
 * @property TAG_INVALID
 * @constant
 * @static
 * @type {Number}
 * @default -1
 */
cc.Action.TAG_INVALID = -1;


/**
 * !#en
 * Base class actions that do have a finite time duration. <br/>
 * Possible actions: <br/>
 * - An action with a duration of 0 seconds. <br/>
 * - An action with a duration of 35.5 seconds.
 *
 * Infinite time actions are valid
 * !#zh 有限时间动作,这种动作拥有时长 duration 属性。
 * @class FiniteTimeAction
 * @extends Action
 */
cc.FiniteTimeAction = cc.Class({
    name: 'cc.FiniteTimeAction',
    extends: cc.Action,

    ctor:function () {
        //! duration in seconds
        this._duration = 0;
    },

    /**
     * !#en get duration of the action. (seconds).
     * !#zh 获取动作以秒为单位的持续时间。
     * @method getDuration
     * @return {Number}
     */
    getDuration:function () {
        return this._duration * (this._timesForRepeat || 1);
    },

    /**
     * !#en set duration of the action. (seconds).
     * !#zh 设置动作以秒为单位的持续时间。
     * @method setDuration
     * @param {Number} duration
     */
    setDuration:function (duration) {
        this._duration = duration;
    },

    /**
     * !#en
     * Returns a reversed action. <br />
     * For example: <br />
     * - The action will be x coordinates of 0 move to 100. <br />
     * - The reversed action will be x of 100 move to 0.
     * - Will be rewritten
     * !#zh 返回一个新的动作,执行与原动作完全相反的动作。
     * @method reverse
     * @return {Null}
     */
    reverse:function () {
        cc.logID(1008);
        return null;
    },

    /**
     * !#en
     * to copy object with deep copy.
     * returns a clone of action.
     * !#zh 返回一个克隆的动作。
     * @method clone
     * @return {FiniteTimeAction}
     */
    clone:function () {
        return new cc.FiniteTimeAction();
    }
});

/**
 * @module cc
 */

/*
 * Changes the speed of an action, making it take longer (speed > 1)
 * or less (speed < 1) time. <br/>
 * Useful to simulate 'slow motion' or 'fast forward' effect.
 *
 * @warning This action can't be Sequenceable because it is not an cc.IntervalAction
 * @class Speed
 * @extends Action
 *
 * @param {ActionInterval} action
 * @param {Number} speed
 */
cc.Speed = cc.Class({
    name: 'cc.Speed',
    extends: cc.Action,

    ctor:function (action, speed) {
        this._speed = 0;
        this._innerAction = null;

		action && this.initWithAction(action, speed);
    },

    /*
     * Gets the current running speed. <br />
     * Will get a percentage number, compared to the original speed.
     *
     * @method getSpeed
     * @return {Number}
     */
    getSpeed:function () {
        return this._speed;
    },

    /*
     * alter the speed of the inner function in runtime.
     * @method setSpeed
     * @param {Number} speed
     */
    setSpeed:function (speed) {
        this._speed = speed;
    },

    /*
     * initializes the action.
     * @method initWithAction
     * @param {ActionInterval} action
     * @param {Number} speed
     * @return {Boolean}
     */
    initWithAction:function (action, speed) {
        if (!action) {
            cc.errorID(1021);
            return false;
        }

        this._innerAction = action;
        this._speed = speed;
        return true;
    },

    clone:function () {
        var action = new cc.Speed();
        action.initWithAction(this._innerAction.clone(), this._speed);
        return action;
    },

    startWithTarget:function (target) {
        cc.Action.prototype.startWithTarget.call(this, target);
        this._innerAction.startWithTarget(target);
    },

    stop:function () {
        this._innerAction.stop();
        cc.Action.prototype.stop.call(this);
    },

    step:function (dt) {
        this._innerAction.step(dt * this._speed);
    },

    isDone:function () {
        return this._innerAction.isDone();
    },

    reverse:function () {
        return new cc.Speed(this._innerAction.reverse(), this._speed);
    },

    /*
     * Set inner Action.
     * @method setInnerAction
     * @param {ActionInterval} action
     */
    setInnerAction:function (action) {
        if (this._innerAction !== action) {
            this._innerAction = action;
        }
    },

    /*
     * Get inner Action.
     * @method getInnerAction
     * @return {ActionInterval}
     */
    getInnerAction:function () {
        return this._innerAction;
    }
});

/**
 * @module cc
 */

/**
 * !#en
 * Creates the speed action which changes the speed of an action, making it take longer (speed > 1)
 * or less (speed < 1) time. <br/>
 * Useful to simulate 'slow motion' or 'fast forward' effect.
 * !#zh 修改目标动作的速率。
 * @warning This action can't be Sequenceable because it is not an cc.IntervalAction
 *
 * @method speed
 * @param {ActionInterval} action
 * @param {Number} speed
 * @return {Action}
 * @example
 * // change the target action speed;
 * var action = cc.scaleTo(0.2, 1, 0.6);
 * var newAction = cc.speed(action, 0.5);
 */
cc.speed = function (action, speed) {
    return new cc.Speed(action, speed);
};

/*
 * cc.Follow is a follow action which makes its target follows another node.
 *
 * @example
 * //example
 * //Instead of using cc.Camera as a "follower", use this action instead.
 * layer.runAction(cc.follow(hero));
 *
 * @property {Number}  leftBoundary - world leftBoundary.
 * @property {Number}  rightBoundary - world rightBoundary.
 * @property {Number}  topBoundary - world topBoundary.
 * @property {Number}  bottomBoundary - world bottomBoundary.
 *
 * @param {cc.Node} followedNode
 * @param {Rect} rect
 * @example
 * // creates the action with a set boundary
 * var followAction = new cc.Follow(node, cc.rect(0, 0, s.width * 2 - 100, s.height));
 * this.runAction(followAction);
 *
 * // creates the action with no boundary set
 * var followAction = new cc.Follow(node);
 * this.runAction(followAction);
 *
 * @class
 * @extends Action
 */
cc.Follow = cc.Class({
    name: 'cc.Follow',
    extends: cc.Action,

	/*
     * Constructor function, override it to extend the construction behavior, remember to call "this._super()" in the extended "ctor" function. <br />
	 * creates the action with a set boundary. <br/>
	 * creates the action with no boundary set.
     * @param {cc.Node} followedNode
     * @param {Rect} rect
	 */
    ctor:function (followedNode, rect) {
        // node to follow
        this._followedNode = null;
        // whether camera should be limited to certain area
        this._boundarySet = false;
        // if screen size is bigger than the boundary - update not needed
        this._boundaryFullyCovered = false;
        // fast access to the screen dimensions
        this._halfScreenSize = null;
        this._fullScreenSize = null;

        this.leftBoundary = 0.0;
        this.rightBoundary = 0.0;
        this.topBoundary = 0.0;
        this.bottomBoundary = 0.0;
        this._worldRect = cc.rect(0, 0, 0, 0);

		if(followedNode)
			rect ? this.initWithTarget(followedNode, rect)
				 : this.initWithTarget(followedNode);
    },

    clone:function () {
        var action = new cc.Follow();
        var locRect = this._worldRect;
        var rect = new cc.Rect(locRect.x, locRect.y, locRect.width, locRect.height);
        action.initWithTarget(this._followedNode, rect);
        return action;
    },

    /*
     * Get whether camera should be limited to certain area.
     *
     * @return {Boolean}
     */
    isBoundarySet:function () {
        return this._boundarySet;
    },

    /*
     * alter behavior - turn on/off boundary.
     *
     * @param {Boolean} value
     */
    setBoudarySet:function (value) {
        this._boundarySet = value;
    },

    /*
     * initializes the action with a set boundary.
     *
     * @param {cc.Node} followedNode
     * @param {Rect} [rect=]
     * @return {Boolean}
     */
    initWithTarget:function (followedNode, rect) {
        if (!followedNode) {
            cc.errorID(1022);
            return false;
        }

        var _this = this;
        rect = rect || cc.rect(0, 0, 0, 0);
        _this._followedNode = followedNode;
        _this._worldRect = rect;

        _this._boundarySet = !(rect.width === 0 && rect.height === 0);

        _this._boundaryFullyCovered = false;

        var winSize = cc.winSize;
        _this._fullScreenSize = cc.v2(winSize.width, winSize.height);
        _this._halfScreenSize = _this._fullScreenSize.mul(0.5);

        if (_this._boundarySet) {
            _this.leftBoundary = -((rect.x + rect.width) - _this._fullScreenSize.x);
            _this.rightBoundary = -rect.x;
            _this.topBoundary = -rect.y;
            _this.bottomBoundary = -((rect.y + rect.height) - _this._fullScreenSize.y);

            if (_this.rightBoundary < _this.leftBoundary) {
                // screen width is larger than world's boundary width
                //set both in the middle of the world
                _this.rightBoundary = _this.leftBoundary = (_this.leftBoundary + _this.rightBoundary) / 2;
            }
            if (_this.topBoundary < _this.bottomBoundary) {
                // screen width is larger than world's boundary width
                //set both in the middle of the world
                _this.topBoundary = _this.bottomBoundary = (_this.topBoundary + _this.bottomBoundary) / 2;
            }

            if ((_this.topBoundary === _this.bottomBoundary) && (_this.leftBoundary === _this.rightBoundary))
                _this._boundaryFullyCovered = true;
        }
        return true;
    },

    step:function (dt) {
        var targetWorldPos = this.target.convertToWorldSpaceAR(cc.Vec2.ZERO);
        var followedWorldPos = this._followedNode.convertToWorldSpaceAR(cc.Vec2.ZERO);
        // compute the offset between followed and target node
        var delta = targetWorldPos.sub(followedWorldPos);
        var tempPos = this.target.parent.convertToNodeSpaceAR(delta.add(this._halfScreenSize));

        if (this._boundarySet) {
            // whole map fits inside a single screen, no need to modify the position - unless map boundaries are increased
            if (this._boundaryFullyCovered)
                return;

	        this.target.setPosition(misc.clampf(tempPos.x, this.leftBoundary, this.rightBoundary), misc.clampf(tempPos.y, this.bottomBoundary, this.topBoundary));
        } else {
            this.target.setPosition(tempPos.x, tempPos.y);
        }
    },

    isDone:function () {
        return ( !this._followedNode.activeInHierarchy );
    },

    stop:function () {
        this.target = null;
        cc.Action.prototype.stop.call(this);
    }
});

/**
 * !#en Create a follow action which makes its target follows another node.
 * !#zh 追踪目标节点的位置。
 * @method follow
 * @param {Node} followedNode
 * @param {Rect} rect
 * @return {Action|Null} returns the cc.Follow object on success
 * @example
 * // example
 * // creates the action with a set boundary
 * var followAction = cc.follow(targetNode, cc.rect(0, 0, screenWidth * 2 - 100, screenHeight));
 * node.runAction(followAction);
 *
 * // creates the action with no boundary set
 * var followAction = cc.follow(targetNode);
 * node.runAction(followAction);
 */
cc.follow = function (followedNode, rect) {
    return new cc.Follow(followedNode, rect);
};

4. callback

// example
// CallFunc without data
var finish = cc.callFunc(this.removeSprite, this);

// CallFunc with data
var finish = cc.callFunc(this.removeFromParentAndCleanup, this._grossini,  true);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小鱼酱

用心写好每一篇博客

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值