Tag Archives: cocos2d

cocos2d中如何让程序同时识别UIPanGestureRecognizer,UIRotationGestureRecognizer和UIPinchGestureRecognizer

其实主要就是要实现shouldRecognizeSimultaneouslyWithGestureRecognizer这个接口,话说这是我见过最长的函数名了(汗)。比如我想让当前的CCLayer同时响应这三种手势,那么我就要在CCMyLayer中加入以下方法:

当然这其中也可以加入实现哪些手势可以同时使用,那些不能同时使用的逻辑控制。

然后还有一点很重要的,就是一定要把recognizer的delegate属性设置为实现了上面方法的对象才有效。

贴图占用内存过大造成闪退的问题

最近做的小游戏,在后台开多几个程序的时候会发生闪退现象。设备是iPod touch4。经过反复测试发现是使用了3个1024×1024的大贴图导致内存占用过高引起的。经过一番google决定使用如下方法缓解:

  1. 在不明显损失画面效果的情况下尽量缩小贴图。
  2. 尽量将零散的贴图组成Sprite Sheet来使用。
  3. 在场景的init和dealloc方法中分别调用purgeCachedData来释放不使用的贴图缓存。

    之所以分开调用两次,是因为我使用了场景切换效果(CCTransitionXXX),有两个场景同时存在的情况。经过反复测试发现这样效果最好。

另外:

  • 使用removeUnusedSpriteFrames可以释放更多内容。
  • 使用dumpCachedTextureInfo可以查看缓存详情。

参考:

如何使用cocos2d动态画填充圆和扇形

代码如下:(来源

 

Cocos2d中如何同时设置容器与子对象的opacity属性

在Cocos2d中如果你设置容器的opacity属性,是不会影响到其中子对象的。想要做到这一点,可以先创建一个容器的子类然后重载setOpacity方法。

如果有必要也可以做递归。

 

多点在矩形中均匀随机排列算法的实现

不规则图形在一个固定矩形中的排列很容易让人联想到背包问题。OMG这太复杂了,所以我们不研究这个。我的问题很简单,将多个不规则图片随机的放在一个给定矩形中并且使他们排列相对均匀不要太难看即可。Google一番后,找到这么一个算法基本可以满足我的需求:https://home.comcast.net/~davejanelle/packing.html

算法描述:

  1. 将N个点随机的放到矩形中
  2. 定义一个步长STEP。可先设置为矩形某边长的1/5。(我实际使用的是Max(边长))
  3. 对每一个点P:
    1. 向上下左右四个方向分别移动STEP的距离。
    2. 判断新的位置是否加大了点P与其最近邻点的距离?如果是则保留新位置。
  4. 重复步骤3直到N个点中没有可以再移动的点。
  5. 缩短STEP(比如除以1.5),再次重复步骤3直到STEP小于某个最小值。

算法实现(objective-c + cocos2d):

写的比较烂,将就看吧…

 

为什么CCSpriteBatchNode中的Sprite边缘不干净

在使用cocos2d开发ios游戏的时候,我使用Flash CS6来导出Sprite Sheet。但我发现经常在sprite边缘会出现一个1像素左右的杂色边。

开始以为是Flash CS6导出的问题,后来发现只要设置一下Border padding和Shape padding的值就好了。我将这两个值分别设置为2px,就再也没出现过边缘有杂边的问题了。