为什么我的精灵在xamarin.ios中随机跳过其他精灵?

时间:2017-05-31 23:12:34

标签: c# ios xamarin sprite-kit xamarin.ios

我目前正在尝试使用xamarin为ios创建一个平台游戏。我有一个角色精灵,我使用PhysicsBody的ApplyForce方法移动,它只有x方向的输入值。所以我的问题是,在我的角色向右移动后,它突然从第一级跳到第3级,卡在水平的物理体中,然后在PhysicsBody内部来回跑动。因此,我不能让我的精灵跳。

我已将字符设置为sp.PhysicsBody.Dynamic = true;,但级别(基本上跨越整个屏幕的平台,屏幕上有6个)是level.PhysicsBody.Dynamic = false;。两者都有{{1}设置为true所以程序应该知道两个物理体是否发生碰撞,但由于某种原因,它允许它们相互穿过。

sp是我的角色精灵,c是我创建角色的类。我在屏幕的左侧生成角色。

switchDirection是我创建的一个方法,只是在向相反方向移动时改变角色的纹理。

c.right是一个布尔值,告诉代码sp是向右还是向左

我在GameScene类的UsesPreciseCollisionDetection中调用checkDirectionPhysics

Update

在我的TouchesBegan方法中,我有这个让我的角色跳到下一个级别,并设置当前级别的y值以增加到下一级别的高度。 (y方向上的值不足以使角色跳到下一个级别,我解决了这个问题之后的错误数字)当前级别是第5级之后,它将级别重置为1所以我可以看到它的位置,纯粹是为了调试。

public void checkDirectionPhysics()
    {
        //sp.PhysicsBody.Velocity = new CGVector(30, 0);

        if (sp.Position.X >= Frame.Width - sp.Size.Width)
        {
            c.switchDirection(2, (float)sp.Position.X, (float)c.curLevelY);//(float)sp.Position.Y);
            sp.PhysicsBody.ApplyForce(new CGVector(-95, 0));
            c.right = false;

        }

        else if (c.right == true && sp.Position.X >= Frame.GetMinX())
        {
            //c.switchDirection(1, (float)sp.Position.X, (float)sp.Position.Y);
            sp.PhysicsBody.ApplyForce(new CGVector(95, 0));

        }

        else if (c.right == false && sp.Position.X <= Frame.GetMinX() + sp.Size.Width + 5f)
        {
            c.switchDirection(1, (float)sp.Position.X, (float)c.curLevelY);//(float)sp.Position.Y);
            sp.PhysicsBody.ApplyForce(new CGVector(95, 0));
            c.right = true;

        }   

        else if (c.right == false && sp.Position.X >= Frame.GetMinX())
        {
            //c.switchDirection(2, (float)sp.Position.X, (float)sp.Position.Y);
            sp.PhysicsBody.ApplyForce(new CGVector(-95, 0));

        }   
    }

这是我能想到的与移动角色精灵有关的所有代码。我希望它足够了,如果不是,请让我知道还需要什么!非常感谢:)

0 个答案:

没有答案