【cocos2d x学习笔记问题收集】——未完成 继续完善中

本文档汇总了cocos2d-x学习过程中遇到的各种问题,包括游戏储存、屏幕适配、内存管理、图形渲染机制、工具使用等,并提供了详细解答。涉及到的关键点有CCUserDefault与SQList的对比、缓存机制、场景切换内存处理、动作回调函数的工作原理,以及CCScene、CCLayer、CCSprite和CCNode的角色。此外,还讨论了cocos2d-x的内存优化策略、跨平台开发流程和Android/iOS部署注意事项。
摘要由CSDN通过智能技术生成

cocos2dx特性,一些函数,网络协议

cocos2d-x.有什么优缺点,怎么避免bug这些问题的

(CCX3.0更多地体现了C++11的新特性),


声明:以下大多问题都是网上找的,答案是根据自己个人的理解作出的修改,仅供参考。


问:cocos2dx主要框架

整体来说,cocos2dX提供的一个相当便捷的框架,主要包括了图形,声音,物理和脚本四部分。其中的图形部分是重中之中,试想当前的游戏很多都是没有物理的,而不用脚本也是可以的,声音播放也是相对简单。常用的例如渲染,动画,事件分发,网络还有UI,物理引擎等几大模块,这些对于做一个游戏从功能上来说已经足够了。

在cocos2dx的开发中,导演、场景、层是十分常用的基本元素。

问:常用的cocos2d-x工具

 cocostudio(可视化编辑,以前是cocosBuilder)、json编辑器、plistEditor工具、Texture Packer(图片组合工具)、 TiledMap (地图编辑器)、ParticleEditor(粒子编辑器)等

问:cocos2d-x的屏幕适配解决方案

Cocos2d-x2.0.4之后

pEGLView->setDesignResolutionSize(480, 320, kResolutionNoBorder);第三个参数,找到定义:

讲得很清楚了:
kResolutionExactFit靠拉伸变形来填满屏幕,本例来说背景图会变形来填充屏幕,因为1024:768=1.3, 480:320=1.5,宽高比不同,图片也就无法等比缩放来填满屏幕,只能变形了。
kResolutionNoBorder 看不到黑边,实际就是宽高等比缩放,但缩放比例取宽比和高比之中大的那一个
kResolutionShowAll全部显示,可以理解为保证内容都显示在屏幕之内,实际也是宽高等比缩放,但缩放比例取宽比和高比之中小的那一个

一般来说,我们希望设计时一屏的内容,用户在实际设备上也能在一屏内看到,举个例来说,1024x768分辨率时,右下角的按钮却跑到屏幕外去了。看完上面的分析,你应该知道如何解决了: 对了,改变pEGLView->setDesignResolutionSize(480, 320, kResolutionNoBorder);第三个参数为kResolutionShowAll。

问:关于cocos2d-x的程序入口

我是用C++的,从程序的 main 方法开始,再创建 AppDelegate 等对象,运行过程中确实通过 exit(0); 来退出程序。

即程序的C++入口main,然后 Cocos2d-x 的程序是由 AppDelegate 的方法 applicationDidFinishLaunching 开始,在其中做些必要的初始化,并创建运行第一个 CCScene ……然后init(初始化)……一路运行下去直到exit(0); 来退出程序。

问:Cocos2d-x内存管理机制

参考答案1:

Cocos2d-x是一套基于C++的引擎。按照C++的内存机制,用new关键字声明的对象,如果没有手动delete掉,那么申请的内存就不会被回收,进而造成内存泄露。

不过Cocos2d-x代码风格也有其自身的特点,因为Cocos2d-x来源于Cocos2d-iPhone,Cocos2d-x的内存管理跟Objective-C比较一致,也采用引用计数与自动回收的内存管理机制

在cocos2d-x中用create()方法生成的对象是加入到自动释放池,我们可以不做内存管理,引擎会自动处理;

而用new关键字声明的对象,需要程序员自己手动管理释放。因为使用new关键字声明的对象是不会在自动释放池中出现,除非手动用autorelease()方法加入到自动释放池中。

举一个简单的例子。当对象用new关键字创建后,引用计数为1;执行一次retain()后,引用计数为2;执行一次release()后,引用计数回到1;执行一次autorelease()后,对象的引用计数值并没有立即减1,但是在下一帧开始前,对象会被释放掉。

参考答案2:(由无脑码农提供的更加详尽的)

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内部也使用了ratainrelease方法,防止这些资源被释放掉。

使用这些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值