zoukankan      html  css  js  c++  java
  • [Cocos2d-x For WP8]基础知识

    一、重要概念

    导演(CCDirector) 在cocos2d-x引擎中,CCDirector类是整个游戏的组织和控制核心,游戏的运行规则,游戏内的CCScene(场景)、布景(CCLayer)、角色(CCSprite)等的运动,均由CCDirector管理。 
    摄像机(CCCamera) 游戏中每个节点都需要摄像机,当节点发生缩放,旋转和位置变化时,都需要覆盖摄像机,让这个节点通过摄像机进行重新渲染。 

    节点(CCNode) 是场景、层、菜单、精灵等所有节点的父类,它是一个抽象类,没有可视化表示形式,定义了所有node共有的属性和方法。 
    场景(CCScene) 在游戏里,场景就是关卡。 CCScene是app工作流程上独立块,一个app可能拥有多个scene,但是在任何时候只能有一个是激活状态的。一个CCScene对象由一个或多个CCLayer组成,layer之间是前后相连的。Layer提供了scene的外观和行为。通常的用法是直接用一个或多个layer实例化一个scene。CCScene的子类CCTrasitionScene实现移动transitions,提供两个scene之间的转移效果,由于scene是CCNode的子类,所以scene可以手工或者用aciton来转变坐标。所有层和精灵都是他的(子节点)children。

    CCScene的4个基本方法:

    runWithScene(运行画面),

    replaceScene(替换场景 例如从主菜单进入游戏界面),

    pushScene(暂停界面),

    popScene(从暂停的界面还原到游戏界面)
    层(CCLayer) 从概念上说,层就是场景里的背景。 CCLayer同样是CCNode的子类,通常用addChild方法添加子节点。CCLayer对象定义了可描绘的区域,定义了描绘的规则。CCLayer可以实现半透明的效果,层的事件相应机制 : 最外层最先接受到事件(屏幕触碰),最后是底层,如果在某层处理了该事件,则后面的层不会在接受到事件信号。   
    角色或者精灵(CCSprite) sprite对象就是一个可以移动、选择、伸缩、动画的2d图形,CCSprite对象的子成员中可以包含其它的CCSprite对象。当CCSprite 对象转换坐标系的时候,它所包含的CCSprite对象也会转换转换坐标系。sprites 是CCNode的子类, 所以他们也可以使用actions来转换坐标。
    动作(CCAction) 角色所具有的动作。 

    以下就是这些概念的关系图

    二、常用的cocos2d-x工具

    TiledMap (地图编辑器)ParticleEditor(粒子编辑器)cocosBuilder(可视化编辑)Texture Packer(图片组合工具)

    三、cocos2d-x内存管理

    cocos2d-x最初移植自cocos2d的objective C版本。因此,在内存管理上,使用了和NSObject类似的引用计数器方法,相关接口放置在CCObject类中。

    引用计数器——手动管理内存 CCObject的及其子类的对象在创建时,引用计数自动设置为1。之后每次调用retain,引用计数+1。每次调用release,引用计数-1;若引用计数=0,则直接delete this。 retain是在指针传递和赋值时使用的,他的含义是表示拥有。这经常用在指针赋值上。

    自动释放池——自动管理内存 对于使用autorelease的对象,不必管它,每帧结束后会自动释放。 CCNode节点管理 cocos2d-x使用节点组成一棵树,渲染的时候要遍历这棵树。CCNode是所有节点类的父类,他内部使用了一个CCArray对象管理他的所有子节点,当对象被添加为子节点时,实际上是被添加到CCArray对象中,同时会调用这个对象的retain方法。同理,从CCArray中移除时,也会调用release方法。

    静态工厂 cocos2d-x中存在大量的静态工厂方法,这些方法中,全都对this指针调用了autorelease函数。 cache机制类

    cache内部也使用了ratain和release方法,防止这些资源被释放掉。 使用这些cache,我们可以保存预加载的一些资源,在方便的时候调用它,去绑定给一些对象。注意,这些cache在场景切换时,不会自动删除,需要手动调用purgeXXXX方法,进行清理。

    四、游戏存储

    CCUserDefault和SQLite
    CCUserDefalt存在的的问题
    1.没有记录和表的概念
    你会发现,如果要设置多存档,必须自己操作,而且代码会变得复杂,容易出错。
    对于简单的游戏可以使用CCUserDefalt,但是对于复杂游戏,可以考虑使用SQLite。
    2.没有数据类型安全
    比如,如果你错写把一个Integer按Bool读取,是没有错误提示的
    3.没有存档数据完整性的校验
    我们找到之前的存档记录,用CCUserDefault::getXMLFilePath()可以获得存档位置,打开它

  • 相关阅读:
    Leetcode Reverse Words in a String
    topcoder SRM 619 DIV2 GoodCompanyDivTwo
    topcoder SRM 618 DIV2 MovingRooksDiv2
    topcoder SRM 618 DIV2 WritingWords
    topcoder SRM 618 DIV2 LongWordsDiv2
    Zepto Code Rush 2014 A. Feed with Candy
    Zepto Code Rush 2014 B
    Codeforces Round #245 (Div. 2) B
    Codeforces Round #245 (Div. 2) A
    Codeforces Round #247 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/linzheng/p/3279427.html
Copyright © 2011-2022 走看看