1 ios设备加载文件区分大小写,模拟器不会,习惯使用统一的文件命名方式,统一小写字母。
2 避免使用固定位置,以适应不同屏幕尺寸。
3 不要魔鬼数字,定义常量
数学类:
ccp 系列:CCPoint 加减乘除,投影,距离,旋转
CCARRAY_FOREACH,CCARRAY_FOREACH_REVERSE
CCArray,CCDictionary
CCRelease系列:
CC_SAFE_DELETE(p); // 当p不为NULL,delete p 并且将 p 赋为 NULL CC_SAFE_DELETE_ARRAY(p); // ...delete[] p.. CC_SAFE_FREE(p); // ...free p ... CC_SAFE_RELEASE(p); // 当p不为NULL,p->release() CC_SAFE_RELEASE_NULL(p); // 当p不为NULL,p->release() 并且将 p 赋为 NULL CC_SAFE_RETAIN(p); // 当p不为NULL,p->retain()
CC_PROPERTY系列:
这些方法的声明全部都是virtual的,即便是内联,声明为virtual的方法也不会产生内联函数
class Ship: public cocos2d::CCNode {
// 定义一个int类的属性m_energy变量,该变量访问权限是protected。 //后面的方法名Energy,即声明了一个int getEnergy() 和一个 void setEnergy(int value)的方法,具体实现需要自己在cpp中定义 CC_PROPERTY(int, m_energy, Energy); // 基本与上相同,但是get方法传引用,即声明了一个 int& getEnergy(); CC_PROPERTY_PASS_BY_REF(int, m_energy, Energy); // 同样定义变量,但是只发声明 get 方法,具体实现需要自己在cpp中定义 CC_PROPERTY_READONLY(int, m_energy, Energy); CC_PROPERTY_READONLY_PASS_BY_REF(int, m_energy, Energy); // 同样定义变量,并且直接定义默认的get/set方法。相似的也有前4类 CC_SYNTHESIZE(cocos2d::CCObject*, m_weapon, Weapon); CC_SYNTHESIZE_PASS_BY_REF(cocos2d::CCObject*, m_weapon, Weapon); CC_SYNTHESIZE_READONLY(cocos2d::CCObject*, m_weapon, Weapon); CC_SYNTHESIZE_READONLY_PASS_BY_REF(cocos2d::CCObject*, m_weapon, Weapon); // 在setWeapon的时候,调用原有m_weapon的release,并且调用新值的的retain。当然已经排除了意外情况(相等或者NULL之类的)。 CC_SYNTHESIZE_RETAIN(cocos2d::CCObject*, m_weapon, Weapon); };
CCNode:
CCDirector:
参考链接:http://blog.csdn.net/jackystudio/article/details/12554167
整个游戏中只有一个导演;(1)在开始游戏和结束游戏时负责游戏的初始化和销毁工作。(2)管理游戏的关卡,即场景。负责各个场景之间的切换。(3)设置、获取系统信息
CCCamera
CCScene
CCNode子类,CCScene中存放的是需要渲染的层、人物角色和菜单等。它们可以作为一个整体,一起渲染,一起销毁,一起被场景切换是用,主要函数create,init.
在每一个游戏中,场景可以由许多层构成,每一层负责各自不同的任务,例如专门负责显示背景、专门负责显示道具和专门负责显示任务等。而在每一层上面,又可以添加不同的元素,如文本、精灵和菜单等。通过层与层之间的组合关系,就能让游戏显示出各种各样的界面了。当然为了看得清每一层上的东西,很多层都设置成透明或者半透明,否则只能看到最上层的东西了
CCLayer
CCSprite
精灵CCSprite是整个游戏开发处理的主要对象, 精灵就是一个可以不断变化的图片,变化包括位置变化、旋转、放大、运动等等
CCSprite的创建: 1. CCSprite * pSprite = CCSprite::create();//返回一个不带纹理的空CCSprite对象 2. CCSprite * pSprite = CCSprite::create("xxx.jpg"); 3. 通过指定图片文件名并给出图片显示区域create (const char *pszFileName, const CCRect &rect),第二个参数是CCRect对象的引用。 CCSpriteFrame * pFrame = CCSpriteFrame::create("xxxx.jpg",rect); CCSprite * pSprite3 = CCSprite::createWithSpriteFrame(pFrame); 4. 通过指定CCTexture2D材质对象来创建createWithTexture (CCTexture2D *pTexture)或者createWithTexture(tex,rect)
CCAction
主要分为三大类,CCFiniteTimeAction(有限次动作执行类)、CCSpeed(节点执行速度类)、CCFollow(节点跟随另一个节点移动). 主要用到的是CCFiniteTimeAction类,CCFiniteTimeAction分为CCActionInstant(瞬时动作)和CCActionInterval(延迟动作),其中CCActionInstant动作没有执行过程,动作瞬时完成,而CCActionInterval动作执行需要一定的时间(或者一个过程). 其中常用的 (1) CCMoveTo / CCMoveBy 移动两者的主要差别在于CCMoveTo是移动到指定坐标,CCMoveBy是相对坐标. (2) CCScaleTo / CCScaleBy 缩放 (3) CCRotateTo / CCRotateBy 旋转 (4) CCSkewTo / CCSkewBy 扭曲 (5) CCJumpTo / CCJumpBy 跳跃 (6) CCBezierTo / CCBezierBy 贝塞尔曲线 (7) CCBink 闪烁 (8) CCFadeIn / CCFadeOut 淡入淡出 (9) CCTintTo / CCTintBy 染色 例子 CCSprite *heroSprite = CCSprite::create(“hero.png”); CCMoveTo *move = CCMoveTo::create(2.0f, ccp(50, 50)); heroSprite->runAction(move);
Schedule
参考链接:http://blog.csdn.net/jackystudio/article/details/10895931
标签:
cocos 2d/x
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?