基于Ogre3d的.NET版本(MOGRE)做的台球游戏

本文介绍了将Sunstar1989的C++台球游戏源码转换为使用MOGRE(Ogre3d的.NET版本)、MyGUI和Physx Candy Wrapper的.NET版本的过程。在实现过程中,作者遇到NxOgre与Physx Candy Wrapper在接口和功能上的差异,并详细解释了如何克服这些差异进行代码适配,包括实现IUserNotify、IUserContactReport和IUserTriggerReport接口以及处理Volume碰撞检测。此外,还提到了游戏的视觉效果和MyGUI事件处理的问题。
摘要由CSDN通过智能技术生成

最原始的代码是sunstar1989大佬写的C++源码,我这里是用了MOGRE+MyGUI+Physx Candy Wrapper做的一个.NET版本的转换,目前代码托管在GitHub上:

GitHub - cookgreen/BilliardGame: Open Source Billiard Game

关于这个游戏,我只想说两点:

第一点:NxOgre和Physx Candy Wrapper之间有很多不一样的地方

NxOgre是英国人betajean做的一个Physx的封装,相当于是对原本的Physx API进行OO化(也就是对象化),他里面封装了很多的东西,比如Trigger,Volume什么的,这在原来的Physx API是没有的。

而Physx Candy Wrapper是Ageia写的一个关于Physx SDK的.NET的封装,虽然表面上使用了OO设计思想,但是基本上仍然是对Physx API的封装而没有OO化,更没有对Physx进行二次封装,因此在寻找两者关联的时候费了不少劲儿。

这就需要我们有一定的阅读源代码的能力,我查了好多NxOgre的源码,然后再加上对Physx SDK的研究,才总算摸索出一条调用之路。

比如挂钩Physx场景碰撞事件的时候,在C#代码需要你的类实现三个接口:

第一个是IUserNotify

第二个是IUserContactReport

第三个是IUserTriggerReport(NxOgre封装在了Trigger,这就是我为什么说Physx Candy Wrapper没有进行彻底的OO化设计)

实现完这三个接口,记得要在Scene里面进行注册,比如下面这段代码:

physxScene.UserNotify = this;
physxScene.UserTriggerReport = this;
physxScene.UserContactReport = this;

我这里使用this指针,因为我的这个类就实现这三个接口,如果你用的是其他类,那你就得用对应类的对象指针。

第二个:NxOgre大量使用Volume进行碰撞检测

betajean在NxOgre开发库里面引入了Volume的概念,意思就是一个不可见的碰撞检测体,用途当然非常广泛,比如胜利条件检测,可以使用这个,或者触发某段剧情也可以用这个。甚至还可以用来做透明墙。

在NxOgre里面,betajean给我们封装了对应的Volume类,我们直接new就行,但是在Physx Candy Wrapper里面没有这个东西,所以我们只能自己手动创建碰撞检测的Actor。

上一点截图:

当然和原本游戏是一摸一样的(这不是废话么。。。)

 这里的光感效果感觉不太好,是不是材质脚本写的有什么问题,或者是MOGRE引擎有什么局限性。

另外就是目前的MyGUI似乎不能捕捉事件,我只要一挂钩事件,然后调用InputManager的Inject方法就会出现问题。

比如当我给Button挂载EventButtonOnClick事件,然后在调用InputManager的InjectMouseRelease方法就会出现“AccessViolation”的错误,貌似是什么地方出了问题。

不知道 @sunstar1989 大佬能否给解读一下,感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cook Green

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值