使用cocos2dx移植一个j2me的老项目。
j2me显示图片的drawimage方法和cocosdx的addchild原理不太一样。需要一直调用。
我在游戏开始的加载图片资源的init函数里使用如下方法。
//-----------------------------------------------------------------------------
img = loadImage(“main_0_r49@2x.jpg”);imageRetain(img);
//-----------------------------------------------------------------------------
cocos2d::Sprite* TTBase::loadImage(const char* imgString)
{
return CCSprite::create(imgString);
}
//-----------------------------------------------------------------------------
void TTBase::imageRetain(cocos2d::CCSprite* img)
{
if(img!=NULL)
{
img->retain();
}
}
//-----------------------------------------------------------------------------
然后使用drawimage显示图片(在主循环里一直刷新这个函数)。
//-----------------------------------------------------------------------------
drawImage(img,move_x,0,leftTop);
//-----------------------------------------------------------------------------
模拟的drawimage函数
void TTBase::drawImage(cocos2d::CCSprite* img,int x, int y,int position)
{
if(img!=NULL)
{
img->setScaleX(scaleX);
img->setScaleY(scaleY);
imgX=(img->getContentSize().width/2)(scaleX);
imgY=(img->getContentSize().height/2)(scaleY);
if(position==leftTop)
{
img->setPosition(ccp(x*codeScaleX+imgX, -y*codeScaleY-imgY+screenHeight));
}
//判断是否addChild了
if ((img)->getParent()==NULL)
{
//addChild(CCNode *child, int zOrder)
this->addChild(img,0);
}
else
{
this->reorderChild(img,1);
}
}
}
//-----------------------------------------------------------------------------
我的理解是退出游戏时,调用img-release();释放内存。不过发现并不释放内存。问下如何解决这个问题。
查了下addchild时也会retain一遍,不知是不是这个问题。但是图片资源加载时如果不retain的话,后面调用drawImage时会死机。