我想让SFML.NET和Box2DX一起工作。
我正在做一个简单的乒乓游戏,只需要使用碰撞检测和碰撞回调从Box2DX。
我已经用我自己的工具重写了ContactListener,而且它运行得很好。问题是,当我使用body.SetUserData()并从SFML.NET传入Sprite对象时,不知道如何比较哪个Sprite碰撞.。
这就是我现在所拥有的,但它不起作用:
class MyContactListener : ContactListener
{
public override void Add(ContactPoint point)
{
Sprite spriteA = (Sprite)point.Shape1.GetBody().GetUserData();
Sprite spriteB = (Sprite)point.Shape2.GetBody().GetUserData();
if (spriteA == spriteB || spriteB == spriteA)
Console.WriteLine("Same sprites colliding.");
else
Console.WriteLine("Different sprites colliding.");
}
public override void Persist(ContactPoint point) { }
public override void Remove(ContactPoint point) { }
public override void Result(ContactResult point) { }
}这总是打印“不同的精灵碰撞”时,一个接触被添加,即使是当精灵是相同的。
我想传入Sprite对象,因为我需要使用body.GetUserData()绘制精灵;
发布于 2014-04-21 00:13:36
我增加了一个超类实体,我继承了我的球,敌人和球员类。现在可以比较类了。
我不再把雪碧当成UserData了。我进入了超阶级实体。我通过()方法中的类实例访问sprites。
类播放器中的:实体
this.playerBody.SetUserData(this);In class MyContactListener:
class MyContactListener : ContactListener
{
public override void Add(ContactPoint point)
{
Body bodyA = point.Shape1.GetBody();
Body bodyB = point.Shape2.GetBody();
Entity typeA = (Entity)bodyA.GetUserData();
Entity typeB = (Entity)bodyB.GetUserData();
// Ball collision with Enemy
if ((typeA is Enemy && typeB is Ball) || (typeB is Ball && typeA is Enemy))
{
// Do something based on the collision
}https://stackoverflow.com/questions/23159713
复制相似问题