我最近将项目的物理库(BulletSharp)从2.80更新到2.82,我留下了一堆无效的调用(在调试抽屉中有大约20个构建错误)。除了碰撞检测电话之外,我几乎修复了所有这些。
来自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, ... ) {
我遇到的问题是Bullet(BulletSharp无论如何)停止使用BulletSharp.ContentAdded打破了电话。该文档没有提供关于替代它们的内容的见解。
有人知道我必须使用什么代替BulletSharp.ContactAdded吗?
编辑:这似乎在PhysicsMain.cs中抛出了“no overload matches delegate”错误。
PhysicsMain.ContactMade += ContactMade;
我认为这是罪魁祸首:
public static event /*ContactAdded*/ ContactAddedEventHandler ContactMade;
答案 0 :(得分:1)
ContactAdded委托was renamed到ContactAddedEventHandler以匹配.NET标准。您只需要编写处理程序方法的名称,因此这两个都是正确的:
ManifoldPoint.ContactAdded += new ContactAddedEventHandler(ManifoldPoint_ContactAdded);
ManifoldPoint.ContactAdded += ManifoldPoint_ContactAdded;
.NET中的事件通常不返回任何值,因为可以将多个方法连接到事件并返回不同的值。这与C ++不同,后者将单个方法设置为处理程序。由于Bullet当前不使用bool返回值,因此使用void。所以你的方法应该是无效的,不会返回任何值。
我认为BulletSharp最近才进入开发阶段,这种突破性变化可能被认为是一件坏事。对此感到抱歉。