游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2892|回复: 6

销毁创建的资源真的很难吗??急!!!!

[复制链接]

19

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2008-7-7 14:04:00 | 显示全部楼层 |阅读模式
我创建了一个面,希望可以代替轮胎和地面摩擦的效果(贴花用不好,寒自己一下~~~),由于每次刹车时都要计算刹车距离,所以这个面需要在listener中创建,代码如下:
MovablePlane* p;
p= new MovablePlane(&quotlane");
   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]

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2008-7-9 03:02:00 | 显示全部楼层

Re:销毁创建的资源真的很难吗??急!!!!

这是销毁一个Entity吧。可以用SceneMgr->HasEntity()来判断有没有这个名字的Entity,然后用SceneMgr->DestoryEntity()来销毁。

18

主题

211

帖子

419

积分

中级会员

Rank: 3Rank: 3

积分
419
发表于 2008-7-9 11:19:00 | 显示全部楼层

Re:销毁创建的资源真的很难吗??急!!!!

顶下,,楼上的正解!!

19

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2008-7-9 17:46:00 | 显示全部楼层

Re:销毁创建的资源真的很难吗??急!!!!

我是用MeshManager::getSingleton().remove( "FloorPlane" );销毁资源,再销毁实体和结点实现的

0

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2008-9-7 19:39:00 | 显示全部楼层

Re: 销毁创建的资源真的很难吗??急!!!!

This method removes and destroys the named child and all of its children.

Remarks:
    Unlike removeChild, which removes a single named child from this node but does not destroy it, this method destroys the child and all of it's children.

    Use this if you wish to recursively destroy a node as well as detaching it from it's parent. Note that any objects attached to the nodes will be detached but will not themselves be destroyed.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
说的很清楚啊,Note that any objects attached to the nodes will be detached but will not themselves be destroyed.

0

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2008-9-7 19:39:00 | 显示全部楼层

Re:销毁创建的资源真的很难吗??急!!!!

直接掉用unload而不通过manager也不是什么好习惯吧?

19

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2008-9-11 17:35:00 | 显示全部楼层

Re:销毁创建的资源真的很难吗??急!!!!

多谢大家的回复,这个问题已经搞定了
MeshManager::getSingleton().remove( "FloorPlane" );
                    //节点和实体分离
                    mtyremarkNode->detachObject(ent_tyremark);
                    //销毁实体
                    mSceneMgr->destroyEntity(ent_tyremark->getName());
                    // 销毁创建的面的结点
                    pNode_che->removeAndDestroyChild("tyremark");
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 06:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表