|
|
我创建了一个面,希望可以代替轮胎和地面摩擦的效果(贴花用不好,寒自己一下~~~),由于每次刹车时都要计算刹车距离,所以这个面需要在listener中创建,代码如下:
MovablePlane* p;
p= new MovablePlane(" lane");
p->normal = Vector3::UNIT_Y;
p->d = 200;
Entity *cloneEnt;
MeshManager::getSingleton().createPlane(
"FloorPlane", ResourceGroupManager: EFAULT_RESOURCE_GROUP_NAME,
*p, 6, BrkDistance, 20, 20, true, 1, 50, 50, Vector3::UNIT_Z);//BrkDistance是个int变量
接着,创建面的实体和结点
Entity *ent_tyremark;
SceneNode *mtyremarkNode;
MeshPtr meshPtr ;
ent_tyremark = mSceneMgr->createEntity("floor", "FloorPlane");
mtyremarkNode = pNode_che->createChildSceneNode("tyremark");
ent_tyremark->setMaterialName("LunTai/Dark");
mtyremarkNode->attachObject(ent_tyremark);
mtyremarkNode->setPosition(20,193,-130);
到这里,程序运行时,汽车刹车后就能看到摩擦效果了,到这里是没问题的,接下来,程序不关闭,而是按下重新开始键(KC_C)让汽车回到起点,再进行新一轮游戏,再次调用上面代码,这时就报错了,说是"FloorPlane"资源已经存在了
问题知道了,是资源没销毁,一开始我先把实体和结点分离(detach),然后销毁实体
node->removeAndDestroyChild("tyremark");
调试时依然弹出那个错误
然后我又试另一种方法,即销毁单个资源,代码如下
MeshPtr meshPtr=ent_tyremark->getMesh();
meshPtr->unload();//把资源卸载
调试后还是那个错误,即"FloorPlane"资源已经存在了
讲述完毕,请问各位大哥,销毁资源真有这么难吗?我的逻辑没错,以上两种方法销毁资源有何不妥吗??
[em4] |
|