cocos2d-js的对象

1. Scene 场景

创建一个Scene

var BallScene = cc.Scene.extend({ //继承cc.Scene类
    onEnter:function () {   // 重写onEnter函数
        this._super();      //调用父类的构造函数
        var layer = new SimpleActionLayer();    // 创建一个layer
        this.addChild(layer);        // 把layer加入到scene中
    }
});

2.节点 Node

节点即构成cocos2d世界的基本单位
节点封装了基本的操作和功能,例如缩放,坐标变化,缩放变化,透明度,可见性等。其他的显示类都继承节点,比如层(layer),精灵(Sptite)

3. 层 Layer

  • 按层管理所有物体
    新建一个层
    var layer = new cc.Layer()
    把层添加到场景中
    scene.addChild(layer)
    再把子节点添加到层上
    layer.addChild(child)

  • 把层扩展成各种功能的面板
  1. LayerColor 纯色层
    在scene中加入纯色层
var layerColor = new cc.LayerColor(cc.color(255,255,255),100,100)
this.addChild(layerColor)
  1. LayerGradient 渐变层
    在scene中加入渐变层
var layer = new cc.LayerGradient(cc.color(255,0,0),cc.color(0,0,255))
this.addChild(layer)
  1. 自定义一个层
var HelloWorldLayer = cc.Layer.extend({
    sprite:null,
    ctor:function () {
        this._super();
        
        var bg = new cc.Sprite(res.HelloWorld_png);
        var size = cc.director.getWinSize();
        bg.x = size.width / 2;
        bg.y = size.height / 2 ;
        this.addChild(bg, 1);

        return true;
    }
});

HelloWorldLayer继承了 cc.Layer , 做了很多东西,封装了这个层之后,再在其他Scene加载同样的层就可以简单写
var layer = new HelloWorldLayer():
this.addChild(layer)

4. 精灵Sprite

创建Sprite
var ball = new cc.Sprite("res/item_2.png");
新建Sprite时,在构造函数传入图片的路径即可.
可以再增加Sprite的坐标

var size = cc.director.getWinSize();
ball.x=size.width/2;
ball.y=size.height/2;

要加载图片 , 还要把资源传入到资源数组,也就是resource.js

var res = {
    HelloWorld_png : "res/HelloWorld.png",
    bg : "res/bg.jpg",
    item2 : "res/item_2.png",
    item3 : "res/item_3.png"
};

var g_resources = [];
for (var i in res) {
    g_resources.push(res[i]);
}

5. director

director负责场景的切换
cc.director.runScene(scene)
不同方式的场景切换
Slide滑动切换
cc.director.runScene(new cc.TransitionSlideInT(2,new SecondScene()))

runScene会销毁旧场景上的所有内容,在回到旧场景时, 所有内容都要重新建立。如果频繁切换,可以使用pushSence和popSence

  • director还可以提供
  1. getWinSize 窗口尺寸
  2. getVisibleSize 窗口实际尺寸
  3. getScheduler 全局定时器
  4. pause/resume 暂停、恢复

6.动作

基本动作

        var action = cc.moveTo(2,cc.p(size.width,size.height/2)); // 移动
        var action = cc.moveBy(1,cc.p(size.width,100));
        var action = cc.scaleTo(1,2,3); //缩放  时间, 水平 ,垂直
        var action = cc.scaleTo(2,-2,2);
        var action = cc.fadeTo(2,0); // 时间,透明度
        var action = cc.fadeOut(2);  // 消失
        ball.opacity = 0;//透明度
        var action = cc.fadeIn(2); //淡入
        var action = cc.blink(2,10); //2秒闪烁10次
        var action = cc.tintTo(2,100,0,0); // 时间、R、G、B
        var action1 = cc.tintTo(0.3,100,0,0);
        var action2 = cc.tintTo(0.3,255,255,255);
        ball.runAction(cc.sequence(action1,action2));  // 多个动作挨个执行
        ball.runAction(action);
  • dalayTime --延迟一段时间
  • rotateTo/roTateBy -- 对节点做旋转
  • skewTo/skewBy -- 对节点做倾斜变化
  • jumpTo/jumpBy -- 让节点跳跃移动
  • bezierTo/bezierBy -- 让节点沿贝塞尔曲线运动

7.组合动作

  • 顺序动作 sequence
        var action1 = cc.moveTo(2,cc.p(size.width/2,size.height/2)); //移动
        var action2 = cc.scaleTo(1,2,2); //放大
        var sequence1 = cc.sequence(action1,action2); //串联动作1和2
        var action3 = cc.scaleTo(1,1,1); // 缩小
        var sequence2 = cc.sequence(sequence1,action3); // 串联
        ball.runAction(sequence2);

最后一句和ball.runAction(action1,action2,action3);效果一样的

  • 重复动作 repeat
        var action1 = cc.scaleTo(1,2,2);
        var action2 = cc.scaleTo(1,1,1);
        var sequence = cc.sequence(action1,action2); //按顺序执行
        var repeat = cc.repeat(sequence,5); // 重复5次
        ball.runAction(repeat);
  • 无限重复 repeatForever
    cc.repeatForever(action)
    函数返回一个新的动作,只接受一个参数。另外,动作本身也有repeatForever方法,跟cc.repeatForever效果一致,如action.repeatForever()
        var action1 = cc.scaleTo(1,2,2);
        var action2 = cc.scaleTo(1,1,1);
        var sequence = cc.sequence(action1,action2); //按顺序执行
        var repeat = cc.repeatForever(sequence); // 无限重复
        ball.runAction(repeat);
  • 同时执行 spawn
        var action1 = cc.moveTo(2,cc.p(size.width/2,size.height/2)); //移动
        var action2 = cc.scaleTo(2,2,2); //放大
        var spawn = cc.spawn(action1,action2); //移动同时放大
        ball.runAction(spawn);
  • 反向 reverseTime/reverse

reverseTime (不好用)

        var action1 = cc.moveTo(2,cc.p(size.width/2,size.height/2)); //移动
        var reverseTime = cc.reverseTime(action1);
        ball.runAction(reverseTime);

reverse (只支持xxxBy,由动作来调用

        var action = cc.moveBy(2,cc.p(size.width/2,0));
        var reverse = action.reverse();
        var sequence = cc.sequence(action,reverse);
        ball.runAction(sequence);

8.easing

action.easing(easeObject)
easeObject是一个Object,存储某种缓动方式的信息

        var action=cc.moveBy(2,0,-(size.height-ball.height/2)); // 动作,移动到下方
        action.easing(cc.easeIn(2)); // 二次方加速移动
        var back = action.clone().reverse(); // 复制一次动作
        back.easing(cc.easeBounceIn()); //弹性加速
        ball.runAction(cc.sequence(action,back)); //顺序执行

其他类型的缓动方式

        var actionX=cc.moveBy(2,size.width,0); // 动作,移动到下方
        var action=cc.moveBy(2,0,-size.height); // 动作
        action.easing(cc.easeQuadraticActionIn()); // 二次方加速移动
        // action.easing(cc.easeCubicActionOut()); // 三次方减速移动
        // action.easing(cc.easeBackOut()); // 出去返回减速移动
        // action.easing(cc.easeElasticIn()); // 弹性加速减速移动
        // action.easing(cc.easeBounceInOut()); // 反弹加速减速移动
        // action.easing(cc.easeCircleActionInOut()); //圆???
        // action.easing(cc.easeExponentialInOut()); //指数加速减速移动
        // action.easing(cc.easeQuinticActionIn()); //五次方加速减速移动
        // action.easing(cc.easeSineInOut()); //正弦加速减速移动
        ball.runAction(cc.spawn(action,actionX)); //同时执行

9.控制动作

  • 停止动作
node.stopAction(action);
node.stopActionByTag(tag);
node.stopAllAction(action);
var ControlActionLayer = cc.Layer.extend({
    ctor:function () {
        this._super();

        var size = cc.director.getWinSize();
        var ball = new cc.Sprite("res/item_2.png");
        ball.x = 0;
        ball.y = size.height/2;
        this.addChild(ball,1)

        var action = cc.moveBy(3,cc.p(size.width/2,0));
        ball.runAction(action);

        setTimeout(function () {
            ball.stopAction(action);   //停止动作
        },2000);

        return true;
    }
});
  • 暂停/恢复动作
var ControlActionLayer = cc.Layer.extend({
    ctor:function () {
        this._super();

        var size = cc.director.getWinSize();
        var ball = new cc.Sprite("res/item_2.png");
        ball.x = 0;
        ball.y = size.height/2;
        this.addChild(ball,1)

        var action = cc.moveBy(3,cc.p(size.width/2,0));
        ball.runAction(action);

        setTimeout(function () {
            ball.pause();   // 暂停
        },2000);

        setTimeout(function () {
            ball.resume();   // 恢复
        },3000);

        return true;
    }
});

10.监听动作

使用CallFunc动作配合sequence监听动作
cc.callFunc(function , target, extra parameters...)
callFunc接受1个或多个参数,第一个参数是某个函数,第二个参数是该函数最后被调用时的目标对象,类似原声JS的apply(target,function),第三个参数以后是额外附加的数据,在调用function时传递过去。

var ControlActionLayer = cc.Layer.extend({
    ctor:function () {
        this._super();

        var size = cc.director.getWinSize();
        var ball = new cc.Sprite("res/item_2.png");
        ball.x = 0;
        ball.y = size.height/2;
        this.addChild(ball,1)

        var action = cc.moveBy(1,cc.p(size.width/2,0));
        var callback = cc.callFunc(this.callback,this,"message");
        var sequence = cc.sequence(action,callback);
        ball.runAction(sequence);

        return true;
    },

    callback:function(nodeExecutingAction,data) {
//                              小球运行的节点          callFunc的额外数据
        console.log(nodeExecutingAction instanceof cc.Sprite,data);
    }
});

如果串联多个动作,就可以在每个动作之间都安置一下监听函数
cc.sequence(action1,cc.callFunc(function1),action2,cc.callFunc(function2),action3);

11.播放声音

  • 背景音乐
cc.audioEngine.playMusic("res/goodtime.mp3",true);  // 播放,第二个参数表示是否重复播放
cc.audioEngine.stopMusic(); // 停止
  • 音效
var effect = cc.audioEngine.playEffect("res/goodtime.mp3",false);
cc.audioEngine.stopEffect(effect); //停止音效
cc.audioEngine.stopAllEffect(); // 停止所有音效
  • 音量
cc.audioEngine.setEffectsVolume(0);
cc.audioEngine.setMusicVolume(0);

设置背景音乐和音效的音量,范围0-1,0表示静音

参考资料 Cocos2d-JS开发之旅 郑高强著 电子工业出版社

你可能感兴趣的:(cocos2d-js的对象)