【发布时间】:2014-07-02 23:05:24
【问题描述】:
我已阅读this page 了解批量绘图详细信息,但我仍有疑问。我知道为了减少绘图调用次数,我们需要使用批量绘图。我是这样使用的:
auto spritebatch = SpriteBatchNode::create("ingame.png");
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ingame.plist");
现在我需要创建一个 Sprite 我必须这样做:
auto backgroundSprite = Sprite::createWithSpriteFrameName("back_gradient.png");
spritebatch->addChild(backgroundSprite);
但我不明白以下几点:
- 如果我的游戏有多个精灵表怎么办。例如,我有 HUD spritesheet 和 ingame spritesheet。现在如果我想用HUD显示游戏画面那么我需要创建2个
SpriteBatchNode?并将它们添加到游戏层? -
如果在不同的场景中使用相同的 spritesheet 会怎样。我应该再次执行以下操作吗?
auto spritebatch = SpriteBatchNode::create("ingame.png"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ingame.plist");
-
如果我使用带有
Button、TextEdit、Label和其他 UI 元素的精灵会怎样。- 首先,我可以从 spritesheet 初始化 Button 状态图像吗?
- 据我所知,我无法将 UI 元素作为子元素添加到
SpriteBatchNode。在这种情况下,如何在同一视图/场景中组合 UI 元素和精灵?
很抱歉有很多问题。但事实是我找不到任何包含对这个问题的解释的资源。虽然它们都是相关的。如果你不知道这些问题的答案,你就不知道如何使用SpriteBatchNode。
【问题讨论】:
-
cocos2d-x 3+版本不需要使用
SpriteBatchNode。 -
@GameDeveloper 但是有!你减少了draw call。如果你有 7 个不同的图像,在屏幕上作为 sprite,那么你有 7 个绘制调用,而如果你使用 spritsheet,你只有一个绘制调用用于 7 个不同的图像。仅当您多次绘制同一图像时才需要,因为在第一次之后它已经在缓存中。
标签: c++ cocos2d-x cocos2d-x-3.0 batch-drawing