李锦俊(mybios)的blog

游戏开发 C++ Cocos2d-x OpenGL DirectX 数学 计算机图形学 SQL Server

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

公告

QQ:30743734
EMain:mybios@qq.com

常用链接

留言簿(16)

我参与的团队

最新随笔

搜索

  •  

积分与排名

  • 积分 - 366286
  • 排名 - 66

最新评论

阅读排行榜

评论排行榜

使用了几天GOOF,发现他存在很多bug啊,什么缓存溢出,数组越界之类的。。很明显这个框架没有真正用在一个项目上的。我列举几个大问题吧。好让大家别到处碰壁。
bool EnvironmentGameSystem::save(DataElementPtr element)这个函数没有实现,所以无法保存环境信息。

还有
 void GridPartition::enumerateConnectedPartitions(vector<CorePartition*>& connected)
 {
  //get surrounding grid cells within a certain radius
  float loadRadius = mGridPartitionMgr->getGridCellLoadRadius();

  //enumerate partitions
  vector<CorePartition*> partitions;
  mGridPartitionMgr->enumeratePartitions(partitions);

  //iterate through and check distance
  for(vector<CorePartition*>::iterator itr = partitions.begin(); itr != partitions.end(); ++itr)
  {
   float distance = Vector3(getWorldPosition() - (*itr)->getWorldPosition()).length();
   // add by 李锦俊 2007-7-16
   // 不要返回自己作为邻居,会产生bug
   if(distance < loadRadius && *itr != this)
    connected.push_back(*itr);
  }
 }

再给出一个比较严重的bug
GOOFTranslationManipulator.h中的
  // add by 李锦俊 2007-7-12
  // 不要用魔术数,搞到缓存溢出
  SceneNode* mNode[AT_LAST];
  Entity* mEnt[AT_LAST];
  Entity* mConeEnt[AT_LAST];
  CollisionShapePtr mCol[AT_LAST];
  AxisManipulatorHandle* mHandle[AT_LAST];

另外,CorePartition中的setSkyboxMaterial、setGlobalAmbient之类的代码貌似没用。准备弃之。


    // add by 李锦俊 2007-7-16
    // 这个算法暂时有问题,先屏蔽,以后再慢慢解决
    //disable static geometry until it is fixed
    if(false)// getStaticGeometryRule() == SGR_ALWAYS || (getStaticGeometryRule() == SGR_WHEN_NOT_PROX_IMMEDIATE && getPartition()->getProximity() != CorePartition::PROX_IMMEDIATE))
    {
     willConvertToStaticGeometry = true;
     getPartition()->addObjectToConvertToStaticGeometry(this);
    }
posted on 2007-07-16 22:53 李锦俊(mybios) 阅读(2712) 评论(10)  编辑 收藏 引用 所属分类: C++3D引擎开发

Feedback

# re: 关于GOOF的bug问题 2007-07-17 00:44 muf
vector<CoreGameObject*>::iterator itr = mObjects.begin();
for(; itr != mObjects.end(); ++itr)

for(vector<CoreGameObject*>::iterator itr = mObjects.begin();
itr != mObjects.end(); ++itr)
不明白为什么第一种不行,第二种行,而且还是最严重的?  回复  更多评论
  

# re: 关于GOOF的bug问题 2007-07-17 09:20 李锦俊
@muf
对于第一种情况,代码会按这个顺序执行
1、itr = mObjects.begin();
2、++itr
3、itr != mObjects.end();
4、循环体
5、++itr
6、itr != mObjects.end();
7、重复4~6步

第二种情况,代码会按这个顺序执行
1、itr = mObjects.begin();
2、itr != mObjects.end();
3、循环体
4、++itr
5、itr != mObjects.end();
6、重复3~5步

至于为什么会这样。仔细看看C++的书然后告诉我吧,我没细看。但是跟踪的结果确实是这样。  回复  更多评论
  

# re: 关于GOOF的bug问题 2007-07-17 09:32 金庆
for语句的初始化提到for外面,只会影响变量的作用域,没有其它效果。
STL的使用中,itr初始化太长,提到外面是让代码美观些。
我也是这样写代码的。
  回复  更多评论
  

# re: 关于GOOF的bug问题 2007-07-17 10:08 李锦俊
这样哦。可能是我跟踪有问题了。谢谢  回复  更多评论
  

# re: 关于GOOF的bug问题 2007-07-17 11:29 SuperPlayeR
原来博主是搞游戏开发的。GOOF我没读过,不过第一个bug的确不是bug,可能博主自己理解错误了。其他的几个光看博主贴出来的片断也看不出个所以然来。  回复  更多评论
  

# re: 关于GOOF的bug问题 2007-07-17 19:43 空明流转
kao,这帮子菜鸟,害得老李又辛苦了一坨时间。  回复  更多评论
  

# re: 关于GOOF的bug问题 2007-07-18 09:27 李锦俊
@空明流转
游戏开发,本是苦命差事,有何办法。。。  回复  更多评论
  

# re: 关于GOOF的bug问题 2007-07-19 18:58 pass86
WHAT IS GOOF? I WANT TO KNOW.  回复  更多评论
  

# re: 关于GOOF的bug问题[未登录] 2007-07-20 10:20 李锦俊
GOOF=Game Object Oriented Framework,是一个游戏引擎(GOOF Engine)和一个用于Ogre的世界编辑器(GOOF Editor)。
PLSM=Paging Landscape Scene Manager,是一个场景管理器。当地形很大时,会用到它。
在Ogre3d.org里有它们的介绍。

GOOF其实从名字就可以看出来,是一个Framework,它只是将游戏引擎所需要的几类东西集合起来。
OGRE只是图形引擎,再音效引擎、网络引擎、物理引擎等等组成一个完整的游戏引擎。
记住OGRE只是图形引擎,不要忘了。OGRE只负责图形的渲染,其他的都不管。
只是有许多人愿意围绕OGRE开发许多插件,而且这些插件可以很好的与OGRE集成。
有了OGRE,只要再找到音效、网络、物理等咚咚,其实你也可以搭建自己的游戏平台的。  回复  更多评论
  

# re: 关于GOOF的bug问题[未登录] 2007-09-06 17:45 大头
第一个不是BUG,这么写完全正确!!!  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理