2012-01-05 2 views
3

간단한 XNA 4.0 게임을 작성했습니다. 이 게임을 렌더링하고 필요한 상호 작용 피드백 (키보드 및 마우스)을 XNA에 다시 제공하는 Windows Form 사용자 컨트롤을 만들고 싶습니다.Windows Form 사용자 컨트롤에 XNA 게임 삽입

XNA에서 :하십시오 RenderTarget2D에

  • 리디렉션 XNA의 Game.GraphicsDevice

    나는 다음을 시도했다.

    • 가 이벤트를 캡처 :

    • 는 KeyboardState 및 MouseState와 객체를 보내는 이벤트 윈폼에서 업데이트()

    의 시작 부분에, 윈도우 폼에 의해 채워질을 방출 Windows Forms의 일반적인 키보드 및 마우스 이벤트로 얻은 데이터로 KeyboardState 및 MouseState를 채 웁니다. 의 OnPaint에

  • 는 Game.RunOnFrame()를 호출
  • (질감으로) 게임에서 RenderTarget2D를 가져옵니다.

  • 텍스처의 데이터를 잠그고 사용자 정의 컨트롤의 그래픽에서 픽셀 단위로 페인트합니다.

  • 또 다른 아이디어는 Game.Run() (새로운 스레드)을 호출하고 Game에서 RenderTarget2D를 보내는 이벤트를 내 보냅니다.

내가 찾은 다음과 같은 문제 :

  • 내가 Game.Run를() 내가 리디렉션 해요 때문에 나는, 블랙 나타나는 게임의 창 (숨길 방법이 없습니다 호출하는 경우 렌더링)

  • Game.Run()은 새로운 이벤트 루프를 시작하고 (응용 프로그램 메서드를 호출하기 때문에) 다른 스레드에서 호출해야합니다. 그리고 나서 사용자가 만든 다른 스레드에서 사용자 정의 컨트롤에 페인트하고 있습니다. (나쁨, 나쁨)

  • 컬러, Vector4와 RenderTarget2D 잠금, 심지어 Rgba32 나를 위해 일을 나타나지 않습니다

어떤 아이디어 (그것은 '잘못된 구조 크기'라고)?

미리 감사드립니다.

+1

바보 같은 질문 - 왜 그런 짓을할까요? – RQDQ

+1

이 튜토리얼 및 코드 샘플은 사용자가 원하는 작업을 정확하게 처리한다고 생각합니다. http : //create.msdn.com/ko-kor/education/catalog/sample/winforms_series_1 –

+1

@RQDQ 그렇게 생각하지는 않는 것으로 생각합니다. xna 게임을 winform에 삽입하려는 이유 중 하나는 레벨 편집기를 만드는 것입니다. – annonymously

답변

5

xna 사이트에 xna를 winform에 삽입하는 것에 대한 훌륭한 코드 샘플이 있습니다. 모든 단계를 안내합니다. 나는 Xbox 용 게임을 만들지 만, 우리 엔진을 위해 만든 레벨 에디터에 이것을 사용합니다.

http://xbox.create.msdn.com/en-US/education/catalog/sample/winforms_series_1

+0

정말 감사합니다. –

+2

이것이 이론적으로 질문에 대답 할 수 있지만 여기에 답의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 바람직합니다 (http://meta.stackexchange.com/q/8259). –