Cocos2dx学习日志(1)

Cocos2dx 核心概念

1.场景

场景: 相当于舞台剧中的一幕。场景相当于容器,存放需要渲染的层

     场景切换: 由A场景切换到B场景,游戏中非常常见。
     场景的由来:  从内存的角度,当我们把游戏中的图片资源加载到游戏菜单界面中, 图片资源会放到内存中。切换游戏进行界面的时候, 经常会销毁游戏菜单界面中的资源,
     再重新加载游戏进行时的图片资源,可以减少内存的使用。怎么方便的销毁图片资源?  这时候引入场景,  当销毁场景的时候,游戏资源也会销毁。
     Cocos2dx 中 的场景时利用栈的形式, 减少内存的使用,最好将栈中存放一个场景.
     场景切换的两种方式:  (1) replaceScene()          (2)   pushScene()   popScene()
     (1)  replaceScene()   ----->  会将原来的场景销毁,创建新的场景  
  (2)  pushScene()-----> 将场景压入栈中,显示栈顶的场景;不用场景利用popScene()
     我们最好使用replaceScene(),这种方式会销毁原来的场景,重新创建新的场景,这种方式虽然耗时间,但是不会占用太多的内存。
     pushScene和popScene()这种方式, 切换场景的时候速度快,但是占用很多的内存。 

代码

Scene * bg_scene::createScene()
{

	auto pscene = Scene::create();
	auto layer = bg_layer::create();
	pscene->addChild(layer);
	return pscene;

}

2.层

CCLayer是处理玩家触摸事件的CCNode子类。层知道怎样渲染自己,也可能是半透明的,这样游戏玩家就可以看到当前层下面的其他层。CCLayers在你定义游戏的外观和行为方面非常有用,所以,你应该要花很多编程时间编写CCLayer子类,来完成做你需要实现的。

【cocos2d-x官方文档】导演,场景,层,以及精灵的介绍

一般在CCLayer中定义触摸事件的处理者。CCLayer通过实现触摸事件的方法(ccTouchBegan, ccTouchMoved, ccTouchEnded, or ccTouchCancelled) 可以回应玩家的互动。这些触摸事件会传播到场景中的所有层,从前向后,直到某个层截获并处理这些触摸事件。

而复杂的应用程序会要求你定义定制CCLayer子类,cocos2d提供了一些预先定义的层。一些例子包括CCMenu(简单的菜单层),CCColorLayer(填充色层),CCLayerMultiplex(可以复用他的子节点,可以每次激活其中一个子节点,同时禁用其他的)。

层可以包含任何CCNode作为子节点,包括CCSprites(精灵), CCLabels(标签),甚至其他的CCLayer对象。因为层是CCNode子类,层可以通过手动或者使用CCActions进行切换。

代码

bool bg_layer::init()
{

	if (!Layer::init())//加载不超过 ,返回
	{
		return false;
	}

	Size visableSize = Director::getInstance()->getVisibleSize();


	return true;

}

3.精灵

Cocos2d中的精灵和其他游戏引擎中的精灵相似。它是可以运动,旋转,缩放,执行动画,并接受其他转换。

CCSprite是精灵的实现类,可以拥有其他的精灵作为子节点。当父节点的精灵改变,子节点也随之改变。

因为精灵是CCNode的子类,可以手动或者使用CCActions改变精灵。

代码

auto bg_sp = Sprite::create("background.png");
this->addChild(bg_sp);

4.导演

导演: 游戏框架的执行者。负责场景切换,初始化游戏(游戏开始),游戏销毁(游戏结束)
    Cocos2dx中的导演类是Director。
    其中导演类常用的功能:
    1.  获得导演类对象:   auto director = Director::getInstance();
    2.  打开或者关闭FBS: Director::getInstance()->setDisplayStates(true);
    3.  设置刷新频率: Director::getInstance()->setAnimationInterval(1.0/60);
    4.  运行某一个场景: Director::runWithScene(Scene);
    5.  退出游戏: Director::getInstance()->end();
    6.  暂停游戏: Director::getInstance()->pause();   -------> 当暂停游戏时, 仍然会绘制画面,但是会停止所有的动作,效果和定时器,并且帧率会下降到4FPS,节省电和内存资源。
    7.  返回游戏: Director::getInstance()->resume();
    8.  获得屏幕大小: Director::getInstance()->getVisibleSize();

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值