gpt4 book ai didi

cocos2d-iphone - 具有合成和 CCSpriteBatchNode 的游戏对象(续)

转载 作者:行者123 更新时间:2023-12-04 06:40:29 25 4
gpt4 key购买 nike

有人会考虑以下场景并给我一个建议吗:我正在用一个 GameplayLayer 实现一个基本的 cocos2d 游戏,它有一个 CCSpriteBatchNode。我有一个 GameObject:CCNode,它有 3 个 CCSprite,如下所示:

CCSprite *bodySprite;    
CCSprite *hairSprite;
CCSprite *eyesSprite;

当初始化 GameObject 时,我将 Sprite 添加到 GameObject 中,就像它的 child 一样:

[self addChild:bodySprite];
[self addChild:hairSprite];
[self addChild:eyesSprite];

这样我可以改变节点(GameObject)的位置、旋转等,所有 Sprite 都会受到改变的影响但是有一个主要的表现当我将多个 GameObject 作为 "each sprite draws itself, which means one additional draw call per sprite" 添加到场景时出现问题.

要解决性能问题,请阅读 this post ,我决定在初始化时将 GameObject 的 Sprite 添加到 GameplayLayerCCSpriteBatchNode 中,如下所示:

 [[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:bodySprite];
[[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:hairSprite];
[[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:eyesSprite];

只是现在,我必须一个一个地设置GameObject的 Sprite 的位置,而不是

self.position = ...

我必须使用

bodySprite.position = ...
hairSprite.position = ...
eyesSprite.postion =...

这是一个乏味的变化,我失去了将我的 GameObject 设计为 Sprite 组合的最大好处之一。

问题:有没有办法使用节点的位置来影响组成 Sprite 的位置,我可以将它们作为子元素添加到 GameObject场景 Sprite 批处理节点 ?如果不是什么是正确的方法,它是一个一个地设置 Sprite 的位置吗?

最佳答案

首先,“主要业绩”是相对的。如果那是你唯一的 Sprite ,你将看不到 Sprite 对它们进行批处理的任何效果。如果您同时在屏幕上显示数十个,那就是另一回事了。

一个节点不能同时添加到两个父节点。

您可以做的是创建一个“容器” Sprite 。创建一个带有纹理(与 Sprite 批处理节点纹理相同)的 CCSprite 和一个作为纹理矩形的 CGRectEmpty。这使得 Sprite 不绘制任何东西,您可以像使用添加到 CCSpriteBatchNode 的 CCNode 一样使用它。

然后您可以将 Sprite 添加到那个不可见的 Sprite ,并使用容器 Sprite 来影响其子 Sprite 的位置、旋转等,就像您以前那样。

关于cocos2d-iphone - 具有合成和 CCSpriteBatchNode 的游戏对象(续),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13645258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com