Cocos2d v2.x (ios) - 如何做循环滚动?
Posted
技术标签:
【中文标题】Cocos2d v2.x (ios) - 如何做循环滚动?【英文标题】:Cocos2d v2.x (ios) - how to do circular scrolling? 【发布时间】:2014-08-11 11:21:48 【问题描述】:我想用 Cocos2d v2.x 为 ios 设备做一个小游戏。它的功能之一是圆形地图滚动 - 就像当您将屏幕滚动到地图的最右边缘时,它会跳回最左侧。就像你旋转地球一样。 我的问题:在某个时间点,我必须渲染地图(所有游戏图形)两次 - 当您将屏幕移动到最右边缘甚至更远一点时,屏幕的一半应该显示一张地图左端,一半应该显示地图的右端。如何以更少的痛苦实现它?
Map 是 CCNode 的子类,有很多子节点和一些自定义绘制方法。
我看到了两种方式: 1. 只需复制 map-CCNode 并在第一个附近渲染它:
[---地图---][---地图复制---] |-/屏幕/-|-
制作 CCRenderTexture,将地图渲染到它并显示地图的一部分 + RenderTexture 的一部分。
我的两个想法都有缺点:
CCRenderTexture 会严重降低性能,即使在 iPad-4 全屏尺寸的 renderTexture 上也只能以大约 20fps 的速度工作;
map root-CCNode 的第二个副本会占用大量内存,尤其是在它有很多子节点的情况下;
也许有一种方法可以在应用偏移的情况下第二次渲染根映射 CCNode?喜欢:
[自我偏移地图:deltaX]; [self.map vizit];? 感谢您的想法!
【问题讨论】:
Perfect ) 正确提问是答案的前半部分!我的最后一个想法很好用!我刚刚重新定义了场景视图的 -visit 方法(映射它的孩子)并使它像:'[self.offsetmap]; [self.map 访问];'它工作正常!不会对性能产生巨大影响。 【参考方案1】:很简单)
class worldMap : CCNode;
@interface mainScene : CCNode
-(id)init;
@property worldMap theMap;
@end
@implementation
-(id)init
... usual blah-blah here
[self addChild:theMap];
-(void)visit
[super visit];
CGPoint oldMapPos = self.theMap.position;
CGPoint newMapPos = ccp(oldMapPos.x + self.theMap.width, oldMapPos.y);
self.theMap.position = newMapPos;
[self.theMap visit];
self.theMap.position = oldMapPos;
@end
【讨论】:
以上是关于Cocos2d v2.x (ios) - 如何做循环滚动?的主要内容,如果未能解决你的问题,请参考以下文章
CDAudioManager (cocos2d, ios) 如何混合游戏音乐和背景音乐,让它们同时播放