Cocos2d,使用 CCParallaxNode 时奇怪的位置偏移

Posted

技术标签:

【中文标题】Cocos2d,使用 CCParallaxNode 时奇怪的位置偏移【英文标题】:Cocos2d, Weird position offset when using CCParallaxNode 【发布时间】:2012-02-13 12:03:53 【问题描述】:

我在 ios 上使用 cocos2d。不确定我在这里做错了什么,或者 CCParallaxNode 做了一些我不明白的奇怪事情。

我正在尝试在我的游戏背景中创建几层视差滚动,目前我只在视差节点中添加了一层,直到我能弄清楚出了什么问题。当游戏加载图层时,它总是向下和向左偏移大约 30% 的图像大小。我在http://oi42.tinypic.com/29dz1av.jpg 上传了一张展示位置差异的图片。

这是我的代码:

background = [CCParallaxNode node];
background.anchorPoint = ccp(0,0);
background.position = ccp(0,0);
[self addChild: background];

background_image = [CCSprite spriteWithFile: @"layer01.png"
                                      rect: CGRectMake(0, 0, 100, 100)];
background_image.anchorPoint = ccp(0,0);
background_image.position = ccp(0,0);

[background addChild: background_image z:0 parallaxRatio: ccp(0,0) positionOffset:ccp(0,0)];

cocos2d 图标与视差节点附加到同一层,并且它的位置和锚点设置为 0,0,因此图标的左下角应该与蓝色背景图像的左下角在同一位置.

我已经使用基本精灵代替视差节点对此进行了测试,并且所有内容都按应有的方式排列,因此它不是图像本身。

对此的任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

首先,我不建议您直接设置视差节点及其子节点的锚点和位置,因为这会导致一些意想不到的结果。您应该将视差节点作为其子层添加到图层,并设置图层的锚点和位置以放置视差。

其次,CCParallaxNode还提供了一个positionOffset,你可以先把你的图片放在视差中。如果您想对齐几层图片的视图中心,这会有所帮助。

所以我认为你应该做这样的事情(因为我使用的是cocos2d-x,我不确定它是否适合obj-C):

layer = [[CCLayer alloc]init];
background = [CCParallaxNode node];
[layer addChild: background];
[self addChild: layer];

然后你只需要在background中添加图片精灵,并设置图层的位置和锚点。

希望对你有帮助。

【讨论】:

【参考方案2】:

    确保背景图片大小为 480x320。

    你为什么写CGRectMake(0, 0, 100, 100)?为什么是 100 和 100 ?您正在限制您的“CGRect”,这可能是错误的..

【讨论】:

为什么背景图片需要是 480x320?我确实将其设置为 1024 而不是 100,我只是在玩它时将其更改为 100。我不明白为什么这会有所作为? 因为那是 iPhone 的屏幕比例。尝试将其设置为 480x320,然后将 CGRectMake 更改为 (0,0,480,320) 或 (0,0,320,480),看看这是否能解决您的问题。尝试没有错!

以上是关于Cocos2d,使用 CCParallaxNode 时奇怪的位置偏移的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cocos2d

如何在 cocos2d 环境之外实现 cocos2d 游戏的虚拟摇杆?

如何优化cocos2d程序的内存使用和程序大小

如何优化cocos2d程序的内存使用和程序大小

iOS cocos2d游戏引擎的了解之一

带有 cocos2d 的 UITableView