我只是在训练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方法时,错误不会出现。
为什么出现这个错误?
答案 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()应该可以解决你的问题