1

私はそれをグーグルしようとしていますが、私はより多くの答えを見つけました、そして今のところ私はちょうど私が望むものを正しくすることができません。

私には障害物があり、最初にそれをワールドに設定し、その障害物の中心を中心に回転させたいと思います。次に、ユーザーがスクリーンにタッチしてフリードラッグした場合、障害物を体の外側のポイントの周り(正確には画面の中心の周り)に回転させたいです。 。

Revolutionジョイント、Fixed RJ、ベクトルと行列の再計算を使用した解決策をいくつか見つけましたが、役に立ちませんでした(または、間違って使用したかどうかはわかりません)。障害物の固定具の中心を正確な点(画面の中心)に設定し、オブジェクトと一緒に回転しているボディプロパティの回転に付加価値を付けることができる簡単な解決策があるはずです。

これは私が障害物をロードする方法です:

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

助けてくれてありがとう、そして申し訳ありませんが、私はこれを始めています。

4

1 に答える 1

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

    }

今、私はバウンスに問題がありますが、それは別のことであり、この質問は解決されました。

于 2012-10-11T06:51:08.550 に答える