WP7 Farseer - 围绕点 - 屏幕中心的障碍物旋转

时间:2012-08-01 07:36:08

标签: windows-phone-7 rotation farseer

我试图谷歌但是我找到了更多的答案,而现在我无法做到我想要的。

我有障碍物,首先我想将它设置为世界并围绕那些障碍物的中心旋转它然后如果用户触摸屏并且它是freedrag我想要绕着它们的身体周围的障碍物旋转(正好在中心周围)屏幕)。

我找到了一些革命联合,固定RJ,重新计算vectores和矩阵的解决方案,但我没有帮助(或者我使用它错了我不确定)。我认为应该有一个简单的解决方案,我可以将障碍物夹具的中心设置到精确点(屏幕中心),然后为身体属性旋转增加值我正在旋转物体。

这就是我加载障碍的方法:

for (int i = 0; i < 5; i++)
{
       _obstacles[i] = BodyFactory.CreateRectangle(World, 2f, 0.2f, 1f);
       _obstacles[i].IsStatic = true;
       _obstacles[i].Restitution = 0.2f;
       _obstacles[i].Friction = 0.2f;
}
_obstacles[2].Position = new Vector2(3f, 2f);
_obstacles[3].Position = new Vector2(3.5f, 5f);
_obstacles[3].Rotation -= 0.8f;
_obstacles[4].Position = new Vector2(2f, 5f);
_obstacles[4].Rotation += 0.8f;

_obstacle = new Sprite(ScreenManager.Assets.TextureFromShape(_obstacles[0].FixtureList[0].Shape,
                                                                    MaterialType.Dots,
                                                                    Color.SandyBrown, 0.8f));

然后我处理输入,我想开始围绕屏幕中心的确切点旋转的障碍物:

foreach (GestureSample gesture in input.Gestures)
            {
                if (gesture.GestureType == GestureType.FreeDrag)
                {
                    if ((gesture.Position.X - gesture.Position2.X) > 0)
                    {
                        foreach (Body obstacle in _obstacles)
                        {
                            obstacle.Rotation += 0.01f;
                        }
                    }
                    else if ((gesture.Position.X - gesture.Position2.X) < 0)
                    {
                        foreach (Body obstacle in _obstacles)
                        {
                            obstacle.Rotation += -0.01f;
                        }
                    }
                }
            }

感谢您的帮助,对不起,我在这方面做得很好。

1 个答案:

答案 0 :(得分:0)

我改变了我的方式如何做到这一点,我没有单独制造每一个障碍,但我为障碍(bordes)上课,看起来像这样:

public Maze(World world, GameplayScreen screen, Vector2 position)
        {

            _agentBody = BodyFactory.CreateBody(world, position);
            _agentBody.BodyType = BodyType.Dynamic;
            _agentBody.IsStatic = true;
            _agentBody.Restitution = 0.2f;
            _agentBody.Friction = 0.2f;

            _offset = ConvertUnits.ToDisplayUnits(1f);
            _agentBody.CreateFixture(new PolygonShape(PolygonTools.CreateRectangle(1f, 0.05f, new Vector2(0f, 1f), 0), 1f));
            _agentBody.CreateFixture(new PolygonShape(PolygonTools.CreateRectangle(1f, 0.05f, new Vector2(0f, -1f), 0), 1f));
            _agentBody.CreateFixture(new PolygonShape(PolygonTools.CreateRectangle(0.05f, 1f, new Vector2(1f, 0f), 0), 1f));
            _agentBody.CreateFixture(new PolygonShape(PolygonTools.CreateRectangle(0.05f, 1f, new Vector2(-1f, 0f), 0), 1f));   
            _screen = screen;

            //GFX
        AssetCreator creator = _screen.ScreenManager.Assets;
        _box = new Sprite(creator.TextureFromVertices(PolygonTools.CreateRectangle(1f, 0.05f),
                                                       MaterialType.Blank, Color.White, 1f));

    }

现在我有弹跳的问题,但这是另一回事,这个问题就解决了。

相关问题