gpt4 book ai didi

c++ - 如何在 Cocos2dx 中为 ProgressTimer 的 Sprite 添加标签?

转载 作者:行者123 更新时间:2023-11-28 00:16:35 25 4
gpt4 key购买 nike

我正在尝试让 ProgressTimerSprite 一起工作,该 Sprite 有一个 Label 作为 child 。似乎只有 Sprite 及其子项都没有被用作进度条的 sprite。

我已经创建了标签,并将其添加到 sprite 中。我将 Sprite 添加到 ProgressTimer 和场景中,因为我想确保它看起来不错。从场景中移除标签并将其仅提供给 ProgressTimer 似乎没有任何不同。

然后我使用 Sprite 创建了 ProgressTimer,对其进行配置,然后将其添加到我的场景中。

我已经简要研究了使用 RenderTexture 创建纹理并将其传递到 Sprite 并从那里开始工作,但除了看到倒置的模糊器 mysprite.png 之外没有任何进展。

如何让 Sprite 中的 Label 显示在场景中的 ProgressTimer 上?

//init label
Label* lbl = Label::createWithTTF("My label", "fonts/Marker Felt.ttf", 24);
lbl->setTextColor(Color4B::RED);

//init sprite
Sprite* sprite = Sprite::create("mysprite.png");
sprite->addChild(lbl);

scene->addChild(sprite); //make sure it works normally

auto progress_timer = ProgressTimer::create(sprite);

progress_timer->setScale(1.5);
progress_timer->setPercentage(100);

scene->addChild(progress_timer);

最佳答案

最简单的解决方案是使用现有的 ProgressTimer,并在构建时嵌入您的标签(作为 Assets 资源的一部分),或者如果您想动态更改标签,则使用 RenderTexture。

我见过一些游戏的标签和进度背景始终可见,并且进度条本身会填满。通常当它是一个健康栏或加载时,所以你可能想要添加一个背景,这样当进度填满时标签不会单独看起来很奇怪。

您还可以考虑使用 ClippingNode 或自定义命令构建您自己的 sprite+label 进度计时器。标签基本上是 spritebatch 中的一组 sprite。不过,这需要一些工作。

要使用 RenderTexture,像这样:

Size size = sprite->getContentSize();

auto rt = RenderTexture::create(size.width, size.height, Texture2D::PixelFormat::RGBA8888);
rt->setAutoDraw(true);
rt->addChild(sprite);
rt->addChild(label);
auto rtSprite = Sprite::createWithTexture(rt->getSprite()->getTexture());
ProgressTimer* progress = ProgressTimer::create(rtSprite);

关于c++ - 如何在 Cocos2dx 中为 ProgressTimer 的 Sprite 添加标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29884531/

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