2013-12-13 123 views
0

我最近将项目的物理库(BulletSharp)从2.80更新为2.82,并且留下了一堆无效调用(在调试抽屉中有大约20个生成错误)。除了碰撞检测电话之外,我几乎将它们全部解决了。什么取代了BulletSharp.ContactAdded?

从CollisionReporter.cs:

PhysicsMain.PreSimulate += new PhysicsSimulateEvent(PreSimulate); 
PhysicsMain.PostSimulate += new PhysicsSimulateEvent(PostSimulate); 
PhysicsMain.ContactAdded += new ContactAdded(ManifoldPoint_ContactAdded); 
LevelManager.OnLevelUnload += new LevelEvent(OnLevelUnload); 

,然后从PhysicsMain.cs的CreateWorld()函数调用此:

ManifoldPoint.ContactAdded += new ContactAdded(ManifoldPoint_ContactAdded); 

我也得到了这条线附近PhysicsMain顶部.cs:

public static event ContactAdded ContactAdded; 

我还应该指出ManifoldPoint_ContactAdded()是一个布尔值。

bool ManifoldPoint_ContactAdded(ManifoldPoint point, ...) { 

我与它遇到的问题是子弹(BulletSharp反正)使用BulletSharp.ContentAdded这打破了电话停了下来。该文档没有提供有关替代它们的信息。

有没有人知道我必须使用而不是BulletSharp.ContactAdded?

编辑:这似乎在PhysicsMain.cs中引发了“no overload matches delegate”错误。

PhysicsMain.ContactMade += ContactMade; 

我觉得这是难辞其咎的:

public static event /*ContactAdded*/ ContactAddedEventHandler ContactMade; 

回答

1

的ContactAdded代表was renamed到ContactAddedEventHandler匹配.NET标准。你只需虽然写的处理方法的名称,所以这两个是正确的:

ManifoldPoint.ContactAdded += new ContactAddedEventHandler(ManifoldPoint_ContactAdded); 
ManifoldPoint.ContactAdded += ManifoldPoint_ContactAdded; 

活动在.NET中通常不返回任何值,因为有几个方法可以挂接到事件返回不同的值。这与C++的不同之处在于将单个方法设置为处理程序。由于Bullet当前不使用bool返回值,因此使用void。所以你的方法应该是无效的,不会返回任何值。

我认为BulletSharp只是最近才发展到这样一个地步,那些破坏性的改变可能被认为是一件坏事。无论如何,对不起。

+0

我试着将它改为void,只是为了得到构建错误或者根本不工作。我应该引入一个布尔值来表示是否有碰撞或者有更好的方法吗? – bricky149

+0

你得到什么错误?你有没有改变“返回假”;到“返回”?在内部,Bullet并不关心返回值,但他们为了向后兼容而留下。在BulletSharp中,返回值被省略。 –

+0

我已经这样做了,我昨天编辑了我的帖子,显示我得到了什么错误(这是与“PhysicsMain.ContactMade + = ContactMade;”和没有重载匹配委托错误)。 – bricky149