将精灵添加到节点

时间:2015-10-06 20:25:16

标签: c++ cocos2d-x

我有一个SpritePlayer类,它拥有我的精灵。

SpritePlayer.h:

class SpritePlayer : public cocos2d::Node
{
public:
    SpritePlayer();
    CREATE_FUNC(SpritePlayer);
    void InitSpritePlayer(std::string pathToSptire);
    cocos2d::Sprite *GetSprite();
(...)
private:
    cocos2d::Sprite *_sprite;
}

SpritePlayer.cpp:

void SpritePlayer::InitSpritePlayer(std::string pathToSprite)
{
    _sprite = cocos2d::Sprite::create(pathToSprite);
}

cocos2d::Sprite *SpritePlayer::GetSprite()
{
    return _sprite;
}
(...)

MainScene.cpp我得到了:

for (int i = 0; i < 4; i++)
{
    playerSpritesList[i] = &SpritePlayer();
    playerSpritesList[i]->InitSpritePlayer("ch2.png");
    this->addChild(playerSpritesList[i]->GetSprite(), 0);
    //SpritePlayersNode->addChild(playerSpritesList[i]->GetSprite())
}

现在问题是 - 如何将此精灵添加到节点? 两个底线都会导致错误,因为我必须将Node传递给addChild()函数。

2 个答案:

答案 0 :(得分:1)

Sprite是Node的子类,因此使用addChild没有问题。 这条线很可疑:

var str = "http://myurleg.com/ar/Message.html";
document.write(str);
var res = str.replace("/ar/", "/fr/");
document.write('<br /> Result : ' + res );

我会从你的代码中删除SpritePlayer()构造函数,因为CREATE_FUNC(SpritePlayer)会创建一个管理内存的默认构造函数。然后你可以调用playerSpritesList [i] = SpritePlayer :: create();

你也可以写USING_NS_CC;在SpritePlayer中(注意Point结构 - 你必须编写cocos2d :: Point,因为iOS / Mac上存在名称空间冲突)。

对于约定,函数名称应以小写字母开头:)

答案 1 :(得分:1)

您正在进行的方式是引入一个您不需要的抽象级别。角色本身可以是精灵,你拥有它的方式你的SpriteCharacter实际上不是精灵,它是角色精灵的管理者。我通常使用以下模式。

<强> Character.h

class Character : public cocos2d::Sprite
{
 public:
  Character* createCharacterSprite(Vec2 position, std::string fileName);
 private:
  Character();
}

<强> Character.cpp

Character* Character::createCharacterSprite(Vec2 position, std::string fileName)
{
  auto character = new Character();
  if(character && character->initWithFile(fileName))
  {
    character->autorelease();
    return character;
  }
}

<强> MainScene.cpp

for (int i = 0; i < 4; i++)
{
  auto character = Character::createCharacterSprite(characterPosition, "filename.png");
  this->addChild(character);
}

这样你可以使用'this'而不是指向实际角色精灵的指针在CharacterSprite中进行操作。定位和动画也将变得更加容易,因为您的角色和MainScene图层之间不会有另一个节点可能有不同的锚点。