2012-10-06 5 views
6

자, 여기 있습니다. 나는 렌더러 때문에 XNA를 기본으로 응용 프로그램을 만들려고합니다. 이 프로젝트에서 필요한 사항 중 하나는 별도의 XNA 렌더링 패널이 포함 된 새 창 (대화 상자)을 여는 것입니다. 이 대화 형 미리보기 패널로 사용하고 있으므로 거기에 렌더링하려면 XNA 필요합니다. 그러나 XNA가이 작업을 수행 할 수있는 것은 아닙니다. 나는 여러 가지 일을 혼자했지만 오류가 있거나 올바르게 렌더링되지 않았거나 잘못된 종횡비로 렌더링되는 등 아무런 소용이 없었다. 일반적으로, 나는 여기에 코드를 게시 할 것이지만, 그처럼 작은 운이 있기 때문에, 게시 할 것이별로 없다.Windows Forms가있는 XNA - 새 창 열기

내 응용 프로그램은 현재 Form 내에 포함 된 XNA 응용 프로그램으로 구성되어 있으며 이론적으로 XNA 렌더러가 포함 된 미리보기 패널을 열어서 그림을 그릴 수있는 단추가 있습니다. 시사. 나는 이것을 몇 시간 동안 시험해 보았고, 아무데도 가지 않았다. 그래서 나는 여기서 약간의 도움을 요청하고있다.

감사합니다. 어쨌든.

편집 : 좋아요, 조금 진행했지만 문제가 2 개 있습니다. 첫째, 스프라이트 배치로 그려진 텍스처는 오른쪽 치수로 표시되지만 단색 검정색으로 채워집니다. 또한, 대화 상자를 열고 닫은 다음 응용 프로그램을 닫으면 AccessViolationException이 발생합니다. 나는 두 가지 오류가 어떤 식 으로든 연관되어 있다고 생각한다.

다음은 미리보기 대화 상자를 초기화하는 코드입니다. (a는 본질적으로 Texture2D 객체의 LinkedList로 구성된 커스텀 클래스입니다).

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

내 AnimationPreview 클래스는 클래스 형태의 확장이며, XNA 윈폼 샘플 검색된 GraphicsDeviceControl의 연장 인 PreviewControl 객체를 포함한다. 제 주요 양식은 XNA Game 클래스를 확장하는 데는 여러 가지 이유가 있습니다.

PreviewControl 객체는 다음과 같이 설정 :

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

그리고 그리기 방법은 포함이 예상대로 양식 바이올렛의 배경을 지우고 블랙 박스를 그립니다

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

이미지와 같은 크기입니다. 이것은 예상되지 않습니다. 잘만되면 누군가 나를 도와 줄 수 있습니다.

참고 : 허용되는 대안은 XNA Texture2D 개체를 System.Drawing.Image 개체로 변환하는 것입니다. 그러나 XNA 3.1을 사용하고 있으므로 스트림에 텍스처를 저장하고 다시로드 할 수는 없습니다. 사실, 이걸 시도한 후에는 약간 멍청하고 매우 느려서 이런 식으로하지는 않을 것입니다.

+2

[XNA WinForms 샘플] (http://xbox.create.msdn.com/en-US/sample/winforms_series1)을 사용하고 있습니까? (그렇지 않다면 1 단계가 될 것입니다.) –

+0

아니요, 한번보세요. – Hoeloe

+0

흠 ...그게 거의 내가 뭘 찾고있는 것,하지만 그것은 문제가 업데이 트를 루프를 포함하지 않는 것 같습니다. 현재 주요한 폼은 Form 클래스로 핸들이 캐스팅 된 Game 클래스입니다. 이 새 창에서 루프를 사용하고 업데이트를 사용해야합니다. – Hoeloe

답변