c++ - Cocos2d-x :How to change texture which go on multiple slots

标签 c++ objective-c cocos2d-x

spine/cocos2dx 有一些问题(这里是非常初级的水平,所以如果我从问题描述中遗漏了一些信息,请告诉我)

我正在使用 cocos2dx 处理脊柱骨架模型;骨架使用一个图集进行初始化,该图集映射有一个图像,每个插槽/附件都有很多纹理。我还有其他图像文件用作纹理,但它们是分开的(并且初始图集/图像是所有纹理的一体)

我正在尝试更改不同附件上的纹理,但我遇到了一些问题,这些插槽具有多个附件,需要从单个图像文件加载,其中只有原始图集中的纹理子集

一个例子(可能太详细了):

  • 原始 atlas/sprite 图像有一个“衬衫”的图像结构,由 3 个部分组成,有 3 个附件(即 2 个袖子和 1 个主体)
  • 我有新的 sprite 图像只包含 3 件衬衫部分(就像它是从原始图集图像中提取的),遵循相同的结构/比例,但像素更大,所以如果你缩小整个图像它最终会映射到原始图像/图集上

我正在使用这段代码来加载简单的 Assets (png 文件中的一个纹理)(例如:帽子或面具,由单件组成)并且它似乎可以正常工作,但我不知道如何在多 Assets 图像上做同样的事情(一个 png 有 2 个袖子和 1 个 body ,这三个部分中的每一个都有 3 个插槽)

Texture2D *texture = new (std::nothrow) Texture2D();

cocos2d::Size sz = cocos2d::Size(image->getWidth(), image->getHeight());
bool textureCreatedSuccessfuly = texture->initWithData(image->getData(), image->getDataLen(), Texture2D::PixelFormat::RGBA8888, image->getWidth(), image->getHeight(), sz);

spMeshAttachment* mesh ;
mesh = SUB_CAST(spMeshAttachment, slot->attachment);
AttachmentVertices *attachmentVertices = SUB_CAST(AttachmentVertices, mesh->rendererObject);
attachmentVertices->_texture = texture;

最佳答案

你为什么不在你的书脊文件中使用皮肤,因为不同的皮肤附件有不同的纹理。您可以一次只设置特定的皮肤以显示具有该纹理的书脊。

spinefile->setSkin("yellow_shirt");

关于c++ - Cocos2d-x :How to change texture which go on multiple slots,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53570148/

相关文章:

c++ - 仅适用一次的宏

c++ - 如何确定 C++ 控制台应用程序中的当前键盘语言?

objective-c - 如果文本字段为空,则将 "informative text"添加到警报

ios - UIPopOverController 的推送操作

ios - 在 cocos2d 中停止 Sprite 动画

android - 在 android 上触摸返回按钮时如何移动到 cocos2d-x 中的另一个场景

c++ - 为什么 constexpr 函数对于引用的行为有所不同?

ios - 更改 UIScrollview 的框架在 iOS xcode 中不起作用

c++ - 在 Cocos2d-x 中一次使用多个 Sprite 表

c++ - OpenCV:将 C++ 类与 C API 一起使用是个坏主意吗?