游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 232326411

自己做的ogre游戏,大家一起来交流啊

[复制链接]

2

主题

62

帖子

62

积分

注册会员

Rank: 2

积分
62
QQ
 楼主| 发表于 2007-7-18 14:13:00 | 显示全部楼层

Re:main90

哦,不好意思,那个DEnimy.cpp是没用的一个文件,不要把它添到项目里,我写的那些.h和.cpp上面我都自己写了文件简介的。
真正的怪物的定义是在enimy.h和enimy.cpp中,继承自SimpleAnimator类。getPosFromDDir函数也在SimpleAnimator类中定义。
enimy的寻经算法我是参考的《游戏编程精粹3》封面游戏中的一个讲解的技术,它是以寻经三角形来代替经典astar算法的寻经结点,用astar算法计算出到达player所要经过的三角形区域,然后再以各enimy的相对位置和三角形的区域范围来得出最后的寻经路线。
由于时间关系(在做毕业设计)和自己能力的不足,我写的这个算法还很不完善。
在游戏中按p就可以看到那些寻经三角形。

2

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2007-7-18 14:27:00 | 显示全部楼层

Re:自己做的ogre游戏,大家一起来交流啊

感谢 232326411 的细心回复。学到不少东西。
余下的就是1.4与1.2的兼容问题了。

30

主题

109

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2007-7-21 03:17:00 | 显示全部楼层

Re:自己做的ogre游戏,大家一起来交流啊

虽然画面糙了点,实际上还是很不错的程序(什么都用到了啊),回头好好研究下。可惜还是没有物体的碰撞检测啊,碰撞检测……疯掉了。

2

主题

62

帖子

62

积分

注册会员

Rank: 2

积分
62
QQ
 楼主| 发表于 2007-7-21 09:56:00 | 显示全部楼层

Re:糖块

呵呵,画面确实不是太好,那个场景我是用的addon里面octree的一个模型,忍者和机器人还有人族大法是大家认识的,僵尸是用的addon里ogrenewt的Ragdoll的一个模型。我只是做了“减你钱”和“弹”两个模型(用max导出的)
碰撞检测并不需要研究的过多,你看下前面我Re: ArenAK的回帖吧。
        {PROFILE("Enimy::NewtonWorldRayCast");
        Vector3 from,to;
        from        =                this->getPos()+Vector3::UNIT_Y;
        to                =                this->getPos()-Vector3::UNIT_Y*10;

        NewtonWorldRayCast(mWorld->getNewtonWorld()->getNewtonWorld(), (float*)&from, (float*)&to,
                Enimy::newtonRaycastFilter, this, Enimy::newtonRaycastPreFilter );
        Vector3 res=                        (to-from)*this->mRayScale+from;
        this->mPosHeight=                res.y;       
        this->getSceneNode()->setPosition(getPos().x,mPosHeight,getPos().z);
        }//PROFILE("Enimy::BasicRaycast");                end!!
float _CDECL Enimy::newtonRaycastFilter(const NewtonBody* body, const float* hitNormal, int collisionID, void* userData, float intersectParam)
{
        // get our object!
        Enimy* me = (Enimy*)userData;

        OgreNewt::Body* bod = (OgreNewt::Body*)NewtonBodyGetUserData( body );
        Ogre::Vector3 normal = Ogre::Vector3( hitNormal[0], hitNormal[1], hitNormal[2] );

        if (bod&&bod->getType()==0)                //这个0就是主体的场景了
        {
                if(abs(intersectParam)>0.001)
                        me->setRayScale(intersectParam);               
                // info.mDistance is in the range [0,1].
        }
        return 1.1;
}
        static float _CDECL newtonRaycastFilter(const NewtonBody* body, const float* hitNormal, int collisionID, void* userData, float intersetParam);
        static unsigned _CDECL newtonRaycastPreFilter( const NewtonBody* body, const NewtonCollision* collision, void* userData )
        {return 1;}
这是我程序里enimy确定高度的newton的直线和场景的碰撞检测,在enimy.cpp和.h中,等同与ogre demo里那个ode的碰撞检测的例子,都是给定一条线段,然后让物理引擎计算出碰撞到的场景时所截得的线段占整条线段长度的比例,然后再根据这个确定碰撞点的位置。
如果你真的对碰撞检测比较感兴趣的话你可以去看看irrlicht的底层代码,重点看下三角形和球以及三角形和线的碰撞即可,那个我之前都打印出来不少看。但后来发现研究那个并不是很实用,到用时把别人的拷过来用就行了。但自己一定要清楚碰撞检测计算的原理和步骤。

1

主题

14

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2007-7-22 13:09:00 | 显示全部楼层

Re:自己做的ogre游戏,大家一起来交流啊

似乎有小的内存泄露~~

30

主题

109

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2007-7-22 13:51:00 | 显示全部楼层

Re:自己做的ogre游戏,大家一起来交流啊

原来如此,也就是说你不是用AABB,或者在OgreNewt绑定个形状?恩,似乎是很精确的方法。回头研究下,但是不知道你只的是地面碰撞还是模型碰撞,因为你的模型似乎没有碰撞啊。

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2007-7-23 09:56:00 | 显示全部楼层

Re:自己做的ogre游戏,大家一起来交流啊

楼主,你程序里,有个场景,英雄跳上去,有一群僵尸围过来,这是怎么做的,能回答下嘛,他们怎么知道有人来了?
外加,英雄对NPC是可以传透走过去的,僵尸却不能穿透走过,这是怎么做的.
能不能回答一下...急切盼望知道..

30

主题

109

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2007-7-24 00:06:00 | 显示全部楼层

Re: Re:自己做的ogre游戏,大家一起来交流啊

chunyi.wang: Re:自己做的ogre游戏,大家一起来交流啊

楼主,你程序里,有个场景,英雄跳上去,有一群僵尸围过来,这是怎么做的,能回答下嘛,他们怎么知道有人来了?...


僵尸?僵尸?能不能发张图

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2007-7-26 17:43:00 | 显示全部楼层

Re:自己做的ogre游戏,大家一起来交流啊

楼主,回答下我的问题啊。

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2007-7-31 19:22:00 | 显示全部楼层

Re:自己做的ogre游戏,大家一起来交流啊

源代码没有项目文件啊!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 06:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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