【问题标题】:Cocos2d-x: Create sprite procedurally or a layer?Cocos2d-x:程序创建精灵还是图层?
【发布时间】:2015-04-22 05:03:52
【问题描述】:

我正在创建一个小游戏。游戏是一款益智游戏。我想在一个精灵中有一个背景,在它上面有一个图层,与屏幕大小相同。

我不知道该怎么做,但如果可能的话我不应该加载图像,我应该能够创建一个透明的宽 x 高图像。

似乎方法是使用精灵,因为不推荐使用 LayerColor(使用 cocos2d-x 3.0 beta)。

在背景上放置一个作为节点的不可见层最合理的方法是什么?

我想这样做是因为可以在游戏中更改背景而不影响棋子。如果我把碎片扔在背景上,当我改变背景时,碎片会消失。

【问题讨论】:

  • 你仍然可以使用LayerColor,在v4.0中我相信会有一个等效的功能

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


【解决方案1】:

如果我正确理解您的问题,我认为您在帖子中回答了您的问题。使用节点。

怎么样:

auto backgroundNode = Node::create();
this->addChild(backgroundNode, -10);
// Add child sprites, nodes, etc to this backgroundNode to fill the background.

auto transparentNode = Node::create();
this->addChild(transparentNode, 10);
// Add child sprites, nodes, etc to this transparentNode.

10 和 -10 是 zOrder。较大的 zOrder 绘制在较低的 zOrder 对象之上。

上面代码中的“this”本身可以是一个节点或层。

【讨论】:

  • 没有尺码?一层将是屏幕的大小。一个节点不需要一个?
  • 如果你想让节点有一个大小,那么设置它的 contentSize。例如myNode->setContentSize(Director::getInstance()->getVisibleSize());但对于大多数用途而言,这不是必需的。
【解决方案2】:

我不确定你想要什么,但如果你想改变背景颜色而不影响碎片,你可以将碎片添加为子元素。

auto bg = LayerColor::create(Color3B(255,0,0));
bg->setTag(11);
addChild(bg);

// add pieces onto background
for(..all pieces needed..) {
   auto piece = Sprite::create(..);
   bg->addChild(bg);
}

// later on
auto bg = getChildByTag(11);
bg->setColor(Color3B(0,255,0));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多