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 的一部分。
[----map----][RenderTex] |-/ 屏幕/-]

我的两个想法都有缺点:

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) 如何混合游戏音乐和背景音乐,让它们同时播放

如何在ios(Cocos2d)中将字符串转换为音频(声音)文件?

从零开始做循迹小车-0-项目总览

从零开始做循迹小车-1-基础篇-红外灰度传感器

Cocos2D 与 iOS6 错误旋转

如何使用 javascript 绑定项目从 cocos2d html5 调用本机 ios api?