1

バウンディングボックスを作成していますが、デバッグ用にそれがどこにあるかを確認したいと思います。それは四隅として定義されており、私はこれらの四隅の間に線を引きたいだけです。

私はこれを行う方法をグーグルに管理しました:

    public void Draw(GraphicsDevice graphicsDevice)
    {
        int num = mCorners.Length;
        VertexPositionColor[] primitiveList = new VertexPositionColor[num];

        for (int i = 0; i < num; ++i)
        {
            primitiveList[i] = new VertexPositionColor(new Vector3(mCorners[i], 0), Color.White);
        }

        short[] triangleStripIndices = new short[] { 0, 1, 2, 3, };
        graphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(PrimitiveType.LineStrip, primitiveList, 0, 4, triangleStripIndices, 0, 3);
    }

ただし、このコードを実行すると、アプリは終了します。デバッグモードですが、スタックトレース、クラッシュメッセージ、エラーログなどはありません。閉じるだけなので、デバッグが非常に困難になります。

答えのない同様の質問を見つけました 。XNA4.0アプリは、例外をスローせずにメソッドにヒットすると突然閉じます。提案はそれが適切に初期化されているということでした、そしてそうです私のものはそうです。GraphicsDeviceはパラメーターとして渡され、静的には取得されません。

誰かがこれを引き起こしている可能性があることを知っていますか?

ありがとう、

4

2 に答える 2

0

こんにちはルークはあなたにこのようなディスパッチャにコードを入れてみてください

   this.Dispatcher.BeginInvoke(new System.Action(delegate()
            {
int num = mCorners.Length;
        VertexPositionColor[] primitiveList = new VertexPositionColor[num];

        for (int i = 0; i < num; ++i)
        {
            primitiveList[i] = new VertexPositionColor(new Vector3(mCorners[i], 0), Color.White);
        }

        short[] triangleStripIndices = new short[] { 0, 1, 2, 3, };
        graphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(PrimitiveType.LineStrip, primitiveList, 0, 4, triangleStripIndices, 0, 3);


            }));

UIに変更が必要で、Prcoessがまだ機能していると、システムがクラッシュしたようです。そして、未処理の例外がスローされます。

于 2012-06-07T18:19:20.970 に答える
0

わかりました、それを理解しました。コードは次のとおりです。

    private BasicEffect mBasicEffect;

    public void Draw(GraphicsDevice graphicsDevice)
    {
        // If we haven't set this up yet then do so now
        if (mBasicEffect == null)
        {
            CreateBasicEffect(graphicsDevice);
        }

        foreach (EffectPass pass in mBasicEffect.CurrentTechnique.Passes)
        {
            pass.Apply();

            int num = mCorners.Length + 1;
            short[] triangleStripIndices = new short[num];
            VertexPositionColor[] primitiveList = new VertexPositionColor[num];

            for (int i = 0; i < num; ++i)
            {
                int index = i % mCorners.Length;
                Vector2 vec = mCorners[index];
                primitiveList[index] = new VertexPositionColor(new Vector3(vec, 0), Color.White);
                triangleStripIndices[i] = (short)i;
            }

            graphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(PrimitiveType.LineStrip, primitiveList, 0, 5, triangleStripIndices, 0, 4);
        }
    }

    private void CreateBasicEffect(GraphicsDevice device)
    {
        mBasicEffect = new BasicEffect(device);
        mBasicEffect.VertexColorEnabled = true;

        Matrix viewMatrix = Matrix.CreateLookAt(new Vector3(0, 0, 1), Vector3.Zero, Vector3.Up);
        Matrix worldMatrix = Matrix.CreateTranslation(0, 0, 0);
        Matrix projectionMatrix = Matrix.CreateOrthographicOffCenter(0, device.Viewport.Width, device.Viewport.Height, 0, 1, 1000);

        mBasicEffect.World = worldMatrix;
        mBasicEffect.View = viewMatrix;
        mBasicEffect.Projection = projectionMatrix;
    }
于 2012-06-08T15:30:47.923 に答える