首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetUserData与对象比较混淆

SetUserData与对象比较混淆
EN

Stack Overflow用户
提问于 2014-04-18 18:11:54
回答 1查看 164关注 0票数 0

我想让SFML.NET和Box2DX一起工作。

我正在做一个简单的乒乓游戏,只需要使用碰撞检测和碰撞回调从Box2DX。

我已经用我自己的工具重写了ContactListener,而且它运行得很好。问题是,当我使用body.SetUserData()并从SFML.NET传入Sprite对象时,不知道如何比较哪个Sprite碰撞.

这就是我现在所拥有的,但它不起作用:

代码语言:javascript
复制
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()绘制精灵;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-21 00:13:36

我增加了一个超类实体,我继承了我的球,敌人和球员类。现在可以比较类了。

我不再把雪碧当成UserData了。我进入了超阶级实体。我通过()方法中的类实例访问sprites。

类播放器中的:实体

代码语言:javascript
复制
this.playerBody.SetUserData(this);

In class MyContactListener:

代码语言:javascript
复制
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
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23159713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档