我有一个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()
函数。
答案 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图层之间不会有另一个节点可能有不同的锚点。