CodeForge QQ客服 CodeForge 400电话 客服电话 4006316121
首页 » 源代码 » 基于Ogre 和 ODEA 的3D RPG 游戏

基于Ogre 和 ODEA 的3D RPG 游戏

maninwest
发布于2015-02-25 16:32:40
源码作者
浏览次数:
下载次数:0
下载所需积分:1 
源码分类 Tags:
源码分类 所属分类:
VC8.0VC8.0 CPlusPlus, C-C++C++

分享有礼! 》

  • 请点击右侧的分享按钮,把本代码分享到各社交媒体。
  • 通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
  • 通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。

代码介绍

翻译  maninwest@Codeforge  作者:lxdfigo @ Codeproject
这里介绍基于Ogre Graphics Engine, ODE Physics Engine, CEGUI 和其他工具的3D RPG。框架描述和完整源代码见此处:https://github.com/lxdfigo/Space-Knight.
背景
Space Knight(宇宙骑士) 是我小时后看过的卡通动画,我也是个游戏迷。所以我使用我所学的知识将这个卡通开发为一个 角色扮演游戏RPG。这里是我在游戏中使用的库: 
Ogre: 使用 Ogre 作为图形引擎。它可以选择 DirectX 或 OpenGL 来渲染场景.
OED: 我适用 OgreOde,它结合了Ogre 和 ODE,来构建了游戏中物理世界
CEGUI: 用户与构造游戏中的 UI,例如,主菜单/交易菜单/功能菜单等。 
3D Max: 游戏的模型使用 3D Max 构建,通过一个插件导出。 
DirectShow 和 Fmod: 用于播放音频和视频
使用代码
该游戏基于多个库。这里是游戏框架的 UML 图。


此应用中有多个模块,任务模块/角色模块/AI 模块/UI 模块/工具模块和媒体模块。
任务模块控制游戏的任务,包含 BaseMission 类,FirstMission 类等。每个类代表游戏中的一个任务。基本类也控制大多数模块。
角色模块控制游戏中的玩家,例如主游戏玩家,宇宙骑士,怪兽 Lada, NPC, 等。这些条目通过条目管理程序管理,并且会检查每个帧中是否冲突。部分角色模块也由 AI 模块控制
 AI 模块使用状态机器模拟角色的 AI。 每个有AI 的角色有自己的状态类,该类定义其行为,可以轻松更改。
 UI 模块使用  CEGUI 来显示游戏的  UI 。它收到用户的输入并将消息发布给其他模块。它使用 OIS 来接收键盘信息和鼠标信息。屏幕上的每个菜单都是通过 CEGUI 渲染的 脚本文件。
工具模块控制工具/药品和游戏中的其他对象,例如路上的箱子或打开的门。多数工具都是通过 XML 文件中的状态构建的。
媒体模块是 Fmod 和 DirectShow 的简单适配器。它播放打斗或背景音频和开启播放的视频


任务的基本类包含很多成员和函数。它使用 UI 模块来显示菜单,使用媒体模块来播放声音,使用角色模块来更新条目。它还构建图形世界和物理世界。它使用函数可以移动到下个任务/加载保存的任务或终结游戏。
状态机器显示它包含3 个主要状态,之前状态,当前状态和全局状态。状态有4 个行为:进入,退出,执行和OnMessage。如果一个角色接收到消息并给了状态机器,当前状态就会转换成下个状态。

// //Here is the Base Mission class //  class BaseMission: public OgreOde::CollisionListener, public OgreOde::StepListener, public OgreOde::TriangleMeshRayListener
{ public:
        ....


    OgreOde::World                       *mWorld;
    OgreOde::Space                       *mSpace;
    OgreOde::StepHandler                 *mStepper;
    OgreOde::TriangleMeshGeometry* terrainTriMeshGeom;


    OgreOde::InfinitePlaneGeometry *mGround; 


    GameFrame *gameFrame;


    Ogre::Root*              mRoot;
    Ogre::Camera*          mCamera;
    Ogre::SceneManager*      mSceneMgr;
    Ogre::RenderWindow*      mWindow;
    CEGUI::System*   mGUISystem;


    FrameListener* mFrameListener;
    BaseMissionListener* mMissionListener;
    GuiListener *mGuiListener;


    Overlay *talkOverlay,*gameOverlay,*blackOverlay,*loadingOverlay,*missionIntruOverlay;


    CEGUI::Window* gameSheet,* opSheet,* quitSheet,
        * gameOverSheet,* loadSheet,* intruduceSheet,
        * useButton,*noUseButton,* currentPackage;


    std::vector animationStates;
    std::vector mModels;
    std::vector mGeoms;
    std::vector nodes;
    std::vector staticThings;
    std::vector monsters;


    Role *mainModel;
    BaseSound *mSound;
    
    SceneNode * _rocket_node_explosion;
    ParticleSystem * _rocketParticles_explosion; public :
    BaseMission(Ogre::RenderWindow* mW, Ogre::Root* mR, Ogre::Camera* mC, 
                 Ogre::SceneManager* mS,CEGUI::System*   mG,GameFrame *); virtual void Render(); virtual void Clean(); virtual void InitObjects(); virtual void createFrameListener(); virtual void NextMission(); virtual void upDate(); virtual void createScene(); virtual void UpdateGUI(void); virtual void initDemoEventWiring(void);


        ...


    Ogre::SceneManager* getSceneManager(void) const { return mSceneMgr; }
    Ogre::RenderWindow* getRenderWindow(void) const { return mWindow; } void resetParticleSystem(Ogre::ParticleSystem *ps, bool enable, const Ogre::Real delay); virtual void GameOver(); void LoadGame(int i);
}; // // Here is part of the state machine of the AI in the game. // template  class StateMachine
{ private:
    entity_type *m_pOwner;
    State *m_pCurrentState;
    State *m_pPreviousState;
    State *m_pGlobalState; public:
    StateMachine(entity_type *owner):m_pOwner(owner),
       m_pCurrentState(NULL),m_pPreviousState(NULL),m_pGlobalState(NULL){} void SetCurrentState(State *s){m_pCurrentState = s;} void SetPreviousState(State *s){m_pPreviousState = s;} void SetGlobalState(State *s){m_pGlobalState = s;}
...
}; template  class State
{ public: virtual bool OnMessage(entity_type *,Telegram &msg) = 0; virtual void Enter(entity_type *) = 0; virtual void Exit(entity_type *) = 0; virtual void Execute(entity_type *) = 0; virtual ~State(){}
};

操作和结果

游戏的操作:
移动: W, A, S, D
开火: mouse, Z, C, V
任务完成: Y
菜单: F1 
游戏有 7 个任务,包含两个boss 任务和一个传输任务。


Sponsored links

源码文件列表

温馨提示: 点击源码文件名可预览文件内容哦 ^_^
...
名称 大小 修改日期
BaseGameEntity.h258.00 B2009-02-21 16:50
CaneState.cpp1.81 kB2009-06-07 22:32
CaneState.h1,004.00 B2009-05-24 15:35
ChestState.cpp630.00 B2009-03-26 15:30
ChestState.h371.00 B2009-03-26 15:27
DaJiaState.cpp5.48 kB2009-06-07 22:32
DaJiaState.h2.03 kB2009-03-02 13:25
DBoyState.cpp2.49 kB2009-03-02 13:08
DBoyState.h1.16 kB2009-02-24 20:25
EntityManager.cpp483.00 B2009-02-21 16:53
EntityManager.h621.00 B2009-02-21 16:14
FeelerState.cpp1.88 kB2009-06-07 22:32
FeelerState.h1.03 kB2009-03-27 12:46
FlyLaDaState.cpp3.06 kB2009-06-07 22:32
FlyLaDaState.h1.29 kB2009-03-02 14:16
LaDaBossState.cpp660.00 B2009-06-07 22:32
LaDaBossState.h455.00 B2009-05-24 15:20
LaDaState.cpp3.46 kB2009-06-07 22:32
LaDaState.h1.47 kB2009-04-18 22:26
MessageDispatcher.cpp1.01 kB2009-05-07 13:37
MessageDispatcher.h554.00 B2009-02-21 16:44
SpaceKnightState.cpp11.92 kB2009-03-24 19:02
SpaceKnightState.h5.63 kB2009-03-24 19:01
SpaceShipState.cpp1.99 kB2009-03-24 18:20
SpaceShipState.h1.13 kB2009-02-27 15:03
State.h336.00 B2009-02-21 16:43
StateMachine.h1.77 kB2009-03-24 17:47
StayLaDaState.cpp660.00 B2009-06-07 22:32
StayLaDaState.h455.00 B2009-03-27 13:09
Telegram.h407.00 B2009-06-07 22:32
WalkWormState.cpp3.71 kB2009-06-07 22:32
WalkWormState.h1.64 kB2009-05-06 10:50
BaseApplication.h6.99 kB2009-04-29 16:43
BaseFrameListener.h8.59 kB2009-03-01 13:44
BaseSound.cpp1.76 kB2010-03-06 11:53
BaseSound.h525.00 B2010-03-06 11:53
OgreCEGUIRenderer.cpp28.00 kB2008-11-04 19:01
OgreCEGUIRenderer.h15.09 kB2008-11-04 19:01
Dialogue_1.xml3.43 kB2009-03-09 20:36
Dialogue_2.xml1.10 kB2009-03-09 20:45
Dialogue_3.xml373.00 B2009-03-09 20:49
Dialogue_4.xml645.00 B2009-03-09 20:53
Dialogue_5.xml500.00 B2009-05-05 17:56
Dialogue_6.xml184.00 B2009-05-05 18:12
Dialogue_7.xml175.00 B2009-05-24 18:13
DirectShow.cpp9.06 kB2009-05-19 10:16
DirectShow.h1.94 kB2009-08-27 19:36
fmod.h41.62 kB2004-07-29 19:09
Fmodvc.lib151.71 kB2004-07-29 19:09
GameFrame.cpp3.09 kB2009-08-01 18:01
GameFrame.h1.40 kB2009-06-11 20:07
Loads.xml549.00 B2009-05-24 16:49
Main.cpp910.00 B2009-03-24 15:41
MainValue.cpp88.00 B2009-03-24 15:24
MainValue.h139.00 B2009-03-24 15:24
media.cfg323.00 B2008-08-28 18:36
BaseMission.cpp29.05 kB2009-08-27 19:58
BaseMission.h5.43 kB2009-06-11 13:26
DBoyListener.cpp6.31 kB2009-06-11 12:36
DBoyListener.h1.93 kB2009-06-11 12:35
Final.cpp6.30 kB2009-06-11 12:57
Final.h1.69 kB2009-06-11 12:47
FirstBossMission.cpp14.32 kB2009-06-14 14:44
FirstBossMission.h2.27 kB2009-05-08 17:53
FirstMission.cpp29.51 kB2009-07-05 11:17
FirstMission.h2.09 kB2009-05-24 16:59
ForthMission.cpp17.16 kB2009-06-14 14:44
ForthMission.h2.36 kB2009-05-08 17:51
GuiListener.cpp10.01 kB2009-03-25 19:10
GuiListener.h2.33 kB2009-03-03 17:59
MainMenu.cpp21.08 kB2009-08-27 18:50
MainMenu.h3.97 kB2009-05-05 10:43
SecondBossMission.cpp26.95 kB2009-06-11 13:26
SecondBossMission.h3.00 kB2009-05-24 15:35
SecondMission.cpp18.64 kB2009-06-14 14:46
SecondMission.h2.42 kB2009-05-08 17:51
SpaceKnightListener.cpp6.96 kB2009-06-11 12:34
SpaceKnightListener.h1.91 kB2009-06-11 12:24
SpaceShipListener.cpp6.16 kB2009-06-11 12:36
SpaceShipListener.h1.94 kB2009-06-11 12:35
ThirdMission.cpp20.12 kB2009-06-14 14:46
ThirdMission.h2.53 kB2009-05-08 17:12
TransitionMission.cpp27.76 kB2009-06-13 14:24
TransitionMission.h2.38 kB2009-05-08 16:43
BenTi.cpp788.00 B2009-03-25 15:33
BenTi.h262.00 B2009-04-18 20:46
Bullets.cpp3.64 kB2009-04-07 17:34
Bullets.h895.00 B2009-04-18 20:42
Cane01.cpp7.09 kB2009-05-24 16:04
Cane01.h1.45 kB2009-05-24 15:35
CollisionTestedObject.cpp802.00 B2009-03-25 20:58
CollisionTestedObject.h907.00 B2009-03-25 20:48
DaJia.cpp9.38 kB2009-04-18 22:42
DaJia.h1.57 kB2009-04-18 20:42
DBoy.cpp8.69 kB2009-06-07 21:31
DBoy.h1.68 kB2009-04-24 14:27
Feeler01.cpp7.14 kB2009-05-06 11:07
Feeler01.h1.47 kB2009-04-18 20:42
FeiMan.cpp794.00 B2009-03-25 15:45
FeiMan.h263.00 B2009-04-18 20:46
FlyLaDa01.cpp7.32 kB2009-05-07 14:02
FlyLaDa01.h1.45 kB2009-04-18 20:42
LaDa01.cpp8.66 kB2009-05-07 13:37
LaDa01.h1.52 kB2009-04-24 13:53
LaDaBoss01.cpp5.73 kB2009-05-24 15:42
LaDaBoss01.h1.29 kB2009-05-24 15:36
LaDaTree01.cpp3.84 kB2009-04-18 21:26
LaDaTree01.h782.00 B2009-04-24 14:29
LuoYaLu.cpp1.52 kB2009-03-25 15:57
LuoYaLu.h402.00 B2009-04-18 20:46
MainSpaceShip.cpp9.05 kB2009-05-07 14:08
MainSpaceShip.h1.51 kB2009-04-24 14:26
MiLi.cpp1.31 kB2009-03-25 16:00
MiLi.h364.00 B2009-04-18 20:46
Model.cpp824.00 B2009-03-25 15:27
Model.h892.00 B2009-04-18 20:42
Role.cpp555.00 B2009-04-18 21:07
Role.h637.00 B2009-03-29 16:28
SpaceKnight.cpp12.49 kB2009-03-25 21:18
SpaceKnight.h2.58 kB2009-05-01 13:56
StayLaDa01.cpp5.60 kB2009-05-07 13:37
StayLaDa01.h1.30 kB2009-04-18 20:42
WalkWorm01.cpp7.51 kB2009-06-07 22:13
WalkWorm01.h1.55 kB2009-05-06 10:50
WaterMesh.cpp10.67 kB2008-11-04 19:01
WaterMesh.h1.94 kB2009-05-29 00:53
YaKi.cpp1.28 kB2009-03-25 16:01
YaKi.h364.00 B2009-04-18 20:46
ogre.cfg460.00 B2009-07-05 11:20
Plugins.cfg378.00 B2009-07-05 11:19
quake3settings.cfg83.00 B2008-08-28 18:36
resource.h432.00 B2008-12-02 21:37
resources.cfg902.00 B2009-05-24 16:46
TransMission01Sales.xml426.00 B2009-04-05 15:43
SpaceKnight.aps20.78 kB2010-03-06 11:50
SpaceKnight.bmp12.05 kB2008-12-02 21:34
SpaceKnight.ico3.19 kB2009-03-18 16:47
SpaceKnight.rc1.54 kB2008-12-02 21:38
Space_Knight.vcproj15.00 kB2009-08-27 18:43
Space_Knight.vcproj.8.00.old14.90 kB2009-08-01 17:27
Space_Knight.vcproj.L-6CDDBB2CB5294.Administrator.user1.39 kB2012-10-18 19:22
Space_Knight.vcproj.Loki's1.40 kB2009-08-04 14:33
Space_Knight.vcproj.Loki-PC.Loki.user1.38 kB2010-03-21 21:45
Space_Knight.vcproj.lxdfigo-PC.lxdfigo.user1.38 kB2010-07-27 11:48
stadfx.h611.00 B2009-08-27 19:38
Chest01.cpp3.65 kB2009-05-05 10:17
Chest01.h880.00 B2009-04-07 16:41
Desk01.cpp1.10 kB2009-04-07 16:09
Desk01.h465.00 B2009-04-07 16:08
Door01.cpp1.21 kB2009-04-07 16:09
Door01.h483.00 B2009-04-07 16:08
StaticThing.cpp1.04 kB2009-04-07 17:14
StaticThing.h942.00 B2009-04-07 16:53
Status.xml86.00 B2009-03-29 16:24
CurrentTasks.xml246.00 B2009-03-03 17:17
Tasks.xml537.00 B2009-03-03 17:48
tinystr.cpp2.54 kB2006-09-19 19:04
tinystr.h8.58 kB2006-09-19 19:04
tinyxml.cpp35.52 kB2008-11-24 22:26
tinyxml.h62.17 kB2006-09-19 19:04
tinyxmlerror.cpp1.77 kB2006-09-19 19:04
tinyxmlparser.cpp35.30 kB2006-09-19 19:04
AllFullMedica.cpp321.00 B2009-03-25 16:25
AllFullMedica.h266.00 B2009-03-25 16:25
AllToolsIntru.xml915.00 B2009-04-05 15:47
AttackUpMedica.cpp434.00 B2009-03-25 16:29
AttackUpMedica.h312.00 B2009-03-25 16:24
BloodMedica.cpp375.00 B2009-03-25 16:29
BloodMedica.h306.00 B2009-03-25 16:25
Crystal.cpp417.00 B2009-03-24 13:52
Crystal.h293.00 B2009-03-24 13:43
CurrentTools.xml472.00 B2009-07-05 17:25
MagicMedica.cpp373.00 B2009-03-25 16:34
MagicMedica.h314.00 B2009-03-25 16:22
RecoveryUpMedica.cpp462.00 B2009-03-25 16:28
RecoveryUpMedica.h315.00 B2009-03-25 16:29
SpeedUpMedica.cpp423.00 B2009-03-25 16:34
SpeedUpMedica.h294.00 B2009-03-25 16:21
Tool.h202.00 B2009-03-24 13:21
ToolFactory.cpp887.00 B2009-03-25 14:19
ToolFactory.h671.00 B2009-03-25 14:16
Space_Knight.sln902.00 B2009-08-27 17:49
Space_Knight.sln.old901.00 B2008-11-21 13:16
UpgradeLog.XML2.20 kB2009-08-27 17:49
程序员商城

资源评论

(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
  • 1
  • 第1页
  • 共1页

基于Ogre 和 ODEA 的3D RPG 游戏 (270.28 kB)

需要 1 积分
您持有 积分

CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了 了解更多

您的积分不足,优惠套餐快速获取 30 积分

订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。

更多付款方式:网银PayPal

上传代码,免费获取CodeForge积分

您本次下载所消耗的积分将转交上传作者。

同一源码,30天内重复下载,只扣除一次积分。

登录 CodeForge

还没有CodeForge账号? 立即注册
关注微博
联系客服

Switch to the English version?

Yes
CodeForge 英文版
No
CodeForge 中文版

完善个人资料,获价值¥30元积分奖励!

^_^"呃 ...

Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧
好的