2012-08-01 27 views
1

我试图谷歌它,但我发现更多的答案,现在我只是不能正确的得到我想要的东西。WP7 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; 
         } 
        } 
       } 
      } 

感谢帮助和抱歉,我在这里成为begginer。

回答

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)); 

    } 

现在我有问题,但反弹这是另一回事,这个问题已经解决了。