【问题标题】:cocos2d-x 3 add a Sprite into a Layoutcocos2d-x 3 将 Sprite 添加到 Layout
【发布时间】:2014-07-30 05:43:04
【问题描述】:

当我这样做时,它会起作用:

Layout* layout = Layout::create();
layout->setLayoutType(Layout::Type::HORIZONTAL);
layout->setContentSize(Size(280, 150));
layout->setPosition(Vec2(visibleOrigin.x + 100, visibleOrigin.y + visibleSize.height - 100));

addChild(layout);

auto jacket = Button::create("jacket.png", "jacket.png", "jacket.png", Widget::TextureResType::PLIST);
layout->addChild(jacket);

但是当我这样做时(添加一个 Sprite 而不是上面代码中添加的按钮):

Layout* layout = Layout::create();
layout->setLayoutType(Layout::Type::HORIZONTAL);
layout->setContentSize(Size(280, 150));
layout->setPosition(Vec2(visibleOrigin.x + 100, visibleOrigin.y + visibleSize.height - 100));

addChild(layout);

auto jacket = Sprite::createWithSpriteFrameName("jacket.png");
layout->addChild(jacket);

然后我在layout->addChild(jacket); 线上得到断言失败,消息为Expression: vector subscript out of range。我想布局中不支持精灵?那么在布局中添加和图像的正确方法是什么?我应该使用ImageView 吗?

auto jacket = ImageView::create("jacket.png",TextureResType::PLIST);
layout->addChild(jacket);

如果是,那为什么? SpriteImage有什么区别?

【问题讨论】:

    标签: c++ cocos2d-x cocos2d-x-3.0


    【解决方案1】:

    如果我理解正确,按钮将尝试加载名为“jacket.png”的单个文件,而 createWithSpriteFrameName 初始化程序将尝试从先前加载的纹理图集中获取 jack.png 帧

    问题可能很简单,例如夹克图像不在纹理图集中,或者在运行此代码之前未加载图集(帧)

    【讨论】:

    • 不,事实并非如此。我异步预加载,然后才将场景更改为显示此 UI 元素的场景。另请参阅 Widget::TextureResType::PLIST 创建按钮时的参数。这意味着使用加载的纹理而不是单个文件。 Hecne,如果为按钮加载了“jacket.png”,那么它显然也被加载用于精灵。
    • 啊,这就是 TextureResType 的意思。您是否尝试过将精灵直接添加到场景而不是布局?查看精灵是否正常工作。
    • 试过了。作品! ImageView 也可以。因此,我得出结论,Sprite 无法添加到布局中,因此创建了 ImageView
    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多