簡體   English   中英

使用Windows窗體的XNA - 打開新窗口

[英]XNA with Windows Forms - Opening new window

好的,我們走了。 我正在嘗試創建一個應用程序,因為它的渲染器使用XNA作為基礎。 此項目中必需的一件事是打開一個新窗口(作為對話框),其中嵌入了一個單獨的XNA渲染面板。 我正在使用它作為交互式預覽面板,所以我絕對需要XNA來渲染。 然而,似乎XNA並沒有很好地做到這一點。 我自己嘗試了各種各樣的東西,但無濟於事(產生錯誤,無法正確渲染,或渲染錯誤的寬高比等)。 通常情況下,我會在這里發布代碼,但由於我運氣不好,所以發布的內容並不多。

我的應用程序目前包含一個嵌入在Form中的XNA應用程序,我有一個按鈕來打開預覽面板,理論上它應該彈出一個包含XNA渲染器的Form對話框,以允許我繪制預覽。 我已經嘗試了好幾個小時,無處可去,所以我在這里要求一些幫助。

不管怎么說,還是要謝謝你。

編輯:好的,我已經取得了一些進展,但我有兩個問題。 首先,使用精靈批處理繪制的任何紋理都顯示正確的尺寸,但是填充了純黑色。 此外,當我打開對話框,然后關閉它,並關閉應用程序時,我得到一個AccessViolationException。 我強烈懷疑這兩個錯誤是以某種方式聯系在一起的。

這是我的代碼初始化預覽對話框。 (a是一個自定義類,基本上由Texture2D對象的LinkedList組成)。

 animPrev = new AnimationPreview(a);
 animPrev.Show();

我的AnimationPreview類是Form類的擴展,包含一個PreviewControl對象,它是XNA Winforms示例中的GraphicsDeviceControl的擴展。 請注意,由於各種原因,我的主窗體擴展了XNA Game類。

PreviewControl對象設置如下:

protected override void Initialize()
{
    sb = new SpriteBatch(GraphicsDevice);
    Application.Idle += delegate { Invalidate(); };
}

Draw方法包含:

protected override void Draw()
{
    GraphicsDevice.Clear(Microsoft.Xna.Framework.Graphics.Color.Violet);
    if (frame != null)
    {
        sb.Begin();
        sb.Draw(Image, Vector2.Zero, Color.White);
        sb.End();
    }
 }

這會像預期的那樣清除紫羅蘭色的背景,並繪制一個與Image相同大小的黑盒子。 這不是預期的。 希望有人可以幫助我。

注意:可接受的替代方法是將XNA Texture2D對象轉換為System.Drawing.Image對象。 但是,我使用XNA 3.1,所以我不能只將紋理保存到流並重新加載它。 實際上,在嘗試過這個之后,它有點狡猾,而且很慢,所以我寧願不這樣做。

您是否看過以下官方教程/樣本?

他們應該在我看來解釋一切。 您甚至可以找到樣本的可下載源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM