关于CCSprite中的create方法

时间:2014-05-04 12:49:52

标签: c++ cocos2d-x

我只是在训练cocos2d-x。

现在,我尝试使用CCSprite类在显示器上创建精灵。

我编写的代码如下。

角色等级

class characters : public cocos2d::CCSprite{
    public:

    void setRect(CCPoint point);
    CCRect getRect();

    void setTag(int x,int y);
    int getTag();

    void setDirection(int num);
    int* getDirection();

    bool isTouchPoint(CCPoint point);
    void animation(characters *chara,int num);



 private:
    CCRect m_rect;
    int m_tag;
};



bool HelloWorld::init(){


 for(int i=0;i<9;i++){
    characters *chara = new characters;
    chara->autorelease();
    chara->create("char04x2.png");

    x = Indexes[i]%HORIZONTAL_AXIS; //Indexes is cell number on display
    y = Indexes[i]/HORIZONTAL_AXIS;

    CCPoint point = ccp(MARGIN_WIDTH + PIPE_WIDTH * x,MARGIN_HEIGHT + PIPE_HEIGHT * y);
    chara->setPosition(point);
    chara->setRect(point);
    chara->setTag(x,y);


    this->addChild(chara,1);

 }
}

但是,这段代码错了。

它在void CCSprite :: draw(void)方法的CC_NODE_DRAW_SETUP()中停止。

错误讯息是

Cocos2d:断言失败:没有为此节点设置着色器程序 断言失败:(getShaderProgram()),函数draw,文件/Users/nyoronyoro-kun/Desktop/cocos2d-x/cocos2dx/sprite_nodes/CCSprite.cpp,第554行。

当我用initWithFile方法替换create方法时,错误不会出现。

为什么出现这个错误?

2 个答案:

答案 0 :(得分:1)

在行

characters *chara = new characters;
chara->autorelease();

你创建一个空的精灵(没有纹理)。然后在

chara->create("char04x2.png");

你创建了另一个带有相关纹理的精灵,但你不能把它分配给任何东西!这行代码对你没有任何帮助!

结果:在绘制函数中,你的精灵(在前两行代码中创建)没有相关的纹理,它从未被初始化!

&#39;创建&#39; function是一个静态函数,它是一个&#34;类函数&#34;:

static CCSprite* create(const char *pszFileName);

以这种方式使用它:

chara = CCSprite::create("char04x2.png");

并删除前两行。

我希望这可以帮到你。

答案 1 :(得分:0)

在派生类(charecters)的init()方法中,您错过了调用超类方法init。在init方法中调用CCSprite :: init()应该可以解决你的问题