【Cocos2d-x】01 基础概念学习

COCOS2D-x

主题

  • 项目前准备
  • 简单基本概念介绍



项目前准备:

1:下载官方cocos2d-x开发SDK

2:解压缩然后进入cocos2d-x-xxxx文件目录

3:打开终端运行; 

关于参数:

HelloCocos2d 项目名称

-p 后面接包名

-l 后面是开发类型,cpp,lua,ls三种类型。

-d 后面是项目存放的目录



简单基本概念介绍

游戏基本上都要理解几个概念:导演 , 场景 , 层, 精灵。


COCOS2d  3.x 引擎版本中,采用节点树形结构管理游戏对象的,一个游戏可以分为不同的场景,一个场景又可能分为不同的层,一个层又可以有很多节点Node



按照上面的分

(摘自COCOS2D官方文档) 









按照上面的图可以看出来,一个导演类管理所有的东西,就像一个电影里面导演的概念一样,我要拍摄 小鱼,你不能拍摄猫啊,老子说的算。


导演(Direcotr)

游戏比如电影,管理大局的是导演,导演是Cocos2dx引擎的核心,游戏的场中操作就是由 导演 来充值的。OpenGL ES的初始化, 场景的切换,游戏暂停继续啊。还有世界坐标与GL坐标之间的转换,对节点的控制。保存游戏数据,等等都是由导演控制的。

导演当然是唯一一个了。COCOS2D采用的是设计模式中的单例模式;

Direcotr->getInstance()    获取导演的实例。


导演的常用方法。

runWithScene(Scene *scene)  运行Scene 场景,这个方法只在第一次启动场景的时候调用。

pushScene(Scene *scene)  压入场景栈,暂停场景。

replaceScene(Scene *scene),替换当前的场景,被替换的场景进行释放。

popScene()  释放当前场景,存储在栈类场景弹上来,如果栈内没有,结束程序。

end(); 释放,退出应用。

pause() 暂停场景。

resume() 恢复当前场景。


场景是容器,包含了所有要显示的元素。



层(Layer)

Layer是处理玩家事件响应的Node子类。与场景不同。层通常包含的是直接在屏幕上呈现内容,并且可以接受用户的输入事件,包括触摸,加速 和键盘输入。

场景添加层:

addChild(Node child) addChild(Node child,int Zorder) addChild(Node child,int Zorder,int tag)  因为函数返回的还是层,所以可以添加。

其中第一个参数是要添加的节点。

第二个参数:不是准确的说 就是Layer 层叠的顺序,

第三个参数 就是 tag  识别这个layer的


例子:

auto layer1 = LayerColor::create(Color4B(100,100,100));

layer1->setContentSize(CCSizeMake(120,80));//设置大小。

layer1-<setPosition(Point(150,110));//设置屏幕显示的位置。 



精灵:

精灵,可以在脑中想象一下人物,角色,甚至一辆车,一盏灯都是一个精灵。它可以移动,旋转,缩放,执行动画,并接受其他转换。

Sprite 由 Texure  frame  animation 组成。 openes负责渲染。


简单用法:

Texture2D 加载图片,可以使用Texture2D生成对应的SpriteFrame 精灵帧,然后将他添加到Animation生成动画数据,然后用Animation生成Animate 动画动作,然后Sprite执行这个动作。


创建精灵:

auto sprite = Sprite::create(“person.png”);

this->addChild(sprite,0);  第二个参数 是Zorder 


2:使用纹理来创建

auto sprite1 = Sprite::createWithTexture(TextureCache::getInstance()->addImage(“person.png”));

this->addChild(sprite1,0)//添加


使用精灵帧来创建


auto sprite2 = Sprite::createWithSpriteFrameName(“ddd.png”);

this->addChild(sprite2,0);



调度器(Scheduler) 









原理:

调度器为游戏提供定时事件和定时调用服务,所有Node对象都知道如何调用和取消调度事件,调度器好处


1.每当Node不再可见或已经从场景移除时,调度器会停止。

2.暂停时,调度器也会暂停,重新开始,调度器重新开始。

3.封装了不同平台下使用的调度器,使用此调度器你不用关心和跟所你所设定的定时对象的销毁和停止,以及崩溃的风险。

游戏中我们经常会随时间的变化而做一些逻辑判断,如碰撞检测。

调度器三种:

1:默认调度器。

schedulerUpdate();

2:自定义调度器;

schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)

3.单次调度器:

scheduleOne(SEL_SCHEDULE selector,float delay)

默认调度器:

通过schedulerUpdate,每帧调用update方法,如果需要暂停这个调度器,可以使用unschedulerUpdate()方法。

HelloWorld::update(float dt)

{


}


自定义调度器

有的时候我们不需要调用那么频繁,还有可以提高性能。

schedule(schedule_selector(HelloWorld::updateCustom), 1.0f, kRepeatForever, 0);

void HelloWorld::updateCustom(float dt)

{

    log("Custom");

}


我们来看下scheduler(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)函数里面的参数:

1. 第一个参数selector即为你要添加的事件函数

2. 第二个参数interval为事件触发时间间隔

3. 第三个参数repeat为触发一次事件后还会触发的次数,默认值为kRepeatForever,表示无限触发次数

4. 第四个参数delay表示第一次触发之前的延时




单词调度器


unschedule(SEL_SCHEDULE selector, float delay) 取消。

	bool HelloWorld::init()
	{
    ...
    scheduleOnce(schedule_selector(HelloWorld::updateOnce), 0.1f);
    return true;
}
 
void HelloWorld::updateOnce(float dt)
{
    log("Once");
}


调用方法。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值