我目前正在尝试使用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));
}
}
这是我能想到的与移动角色精灵有关的所有代码。我希望它足够了,如果不是,请让我知道还需要什么!非常感谢:)