|
|
研究TV一段时间了,试着把VB的例子用VC SDK改写,写到collisionresult时被卡住了,现将此问题复制到多个相关游戏论坛,希望用VC+TV的高手和前辈们帮助,若问题能得以解决,本人将不胜感激。
//code
ITVCollisionResult col1;
............
col1=CreateTVCollisionResult();
............
col1=pScene->MousePicking(mouxxx,mousey,TV_COLLIDE_MESH,TV_TESTTYPE_BOUNDINGBOX);
if(col1->IsCollision())
{
.................
}
编译尽管正确,但执行时发生实时错误,不知道问题在哪里。
于是查了很多国外的论坛,上面也有许多人提出同样问题,给出的答案一般有两种,
第一种是:用指针,于是改进程序如下:
ITVCollisionResult col1;
............
col1=CreateTVCollisionResult();
............
//输入的函数中:
*col1=*pScene->MousePicking(mouxxx,mousey,TV_COLLIDE_MESH,TV_TESTTYPE_BOUNDINGBOX);
if(col1->IsCollision())
{
.................
}
执行,倒是不出实时错误了,但是就是点击物体一点反映都没有,于是又写了如下版本:
ITVCollisionResult *col1;
col1=new ITVCollisionResult;
col1=&pScene->MousePicking(mouxxx,mousey,TV_COLLIDE_MESH,TV_TESTTYPE_BOUNDINGBOX);
if((*col1)->IsCollision())
{
.................
}
还是点击起来一点反应没有。
以上三个例子如果把判断部分改为:
if((... ->IsCollision)
{
.................
}
还是可以执行,但是就是不管点击中与否都有反应。
综上所述,在使用....->IsCollision()时,其值始终为false;
而使用....->iscollision时,其值始终为true.
因此可以判断col1无论是否为指针都未其到起作用。
毛了,抛弃collisionresult,直接使用
if(pScene->MousePicking(mousex,mousey,TV_COLLIDE_PHYSICOBJECT,TV_TESTTYPE_ACCURATETESTING))
{....}
结果还是跟上面一样,无法正确的判断出是否被鼠标点中。
所以,到目前为止,已经不知道怎么样的才是正确的了,看来VB一句话就能搞定的到了VC中一涉及指针简直就十分难了,希望能得研究过这方面的高手指点一二。另外还想问个菜鸟问题,就是HL是用tv3d做的吗?还是到了CS1.6才用的TV3D引擎呢?怎么看HL的源代码里面没有使用任何TV3D的类呢。 |
|