2016-06-23 2 views
0

VB.NET을 사용하여 XNA에서 게임을 프로그래밍하고 있습니다. 전체 화면을 확대/축소하고 각 이미지의 크기를 조정하여이 작업을 수행하는 게임에 대한 소개를 작성하고 싶습니다. 전체 이미지 위에 .PNG (또는 그 일부)를 많이 그리면 spriteBatch로 이미지를 그리기 전에 전체 이미지를 조작 (크기 조절, 회전 등) 할 수 있습니다. 내가 좋아하는 사용 뭔가를 찾을 수있는 예 :VB.NET을 사용하여 XNA에서 화면에 그리기 전에 이미지 그리기

dim bitmap as New Bitmap 

또는

dim image as New Image 

그러나이 코드는 빨간색으로 "비트 맵"또는 "이미지"를 강조하고, 내가 그들을 사용할 수 없습니다

. 이 문제에 대한 도움을 주신다면 고맙겠습니다! BitmapImageSystem.Drawing 종류 반면

답변

0

그래서 Petri Laarne의 답변을 실험하고 마지막으로 실용적인 코드를 제안합니다. 대부분의 온라인 예제는 C#을 사용하고 있으며 전체 프로세스를 설명하지는 않습니다. 공공 클래스 GAME1에서

: Loadcontent에서

Private WithEvents graphics As GraphicsDeviceManager 
Private WithEvents spriteBatch, spriteBatch2 As SpriteBatch 

: 여기에 그것을 설명하려고

무승부
Public render2 As RenderTarget2D 
spriteBatch2 = New SpriteBatch(GraphicsDevice) 
spriteBatch = New SpriteBatch(GraphicsDevice) 
render2 = New RenderTarget2D(GraphicsDevice, 1024, 768) 

: 이것은 실제에 들어있는 예제 코드

spriteBatch2.GraphicsDevice.SetRenderTarget(render2) 
     GraphicsDevice.Clear(Color.Black) 
     srcRect = New Rectangle(440, 0, 440, 440) : destRect = New Rectangle(100, 335, 440, 440) 
     spriteBatch2.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend) : spriteBatch2.Draw(introNEWMirrorDecos, destRect, srcRect, Color.White) : spriteBatch2.End() 
     destRect = New Rectangle(300, 335, 440, 440) 
     spriteBatch2.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend) : spriteBatch2.Draw(introNEWMirrorDecos, destRect, srcRect, Color.White) : spriteBatch2.End() 
     spriteBatch2.GraphicsDevice.SetRenderTarget(Nothing) 
     GraphicsDevice.Clear(Color.Black) 
     destRect = New Rectangle(512, 384, 1024, 768) : srcRect = New Rectangle(0, 0, 1024, 768) 
     spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend) : spriteBatch.Draw(render2, destRect, srcRect, Color.White, PI/12, New Vector2(512, 384), SpriteEffects.None, 0) : spriteBatch.End() 

의도 한 것처럼 작동하는 게임 : 대체 렌더링 이미지에서 2 가지를 그린 다음 (이 경우 pi/12로 회전시킬 수 있음). 다르게 또는 더 효율적으로이 작업을 수행하는 방법에 대한

모든 의견에 감사하고, 초기 대답 @Petri Laarne

+0

맞습니다. 현재 버전에서와 같이'GraphicsDevice.SetRenderTarget (...)'을 호출하는 한 동일한 'SpriteBatch' 인스턴스를 사용할 수도 있습니다. 또한 렌더링 대상에 그려지는 장면이 정적 인 경우 다시 그려서 건너 뛸 수 있습니다. –

+0

나는 같은 것을 사용할 수 있습니다. 정적에 의한 의미는 무엇이며 어떻게 알 수 있습니까? 내가 다시 그려 줄 때, 너는 의미하니? @Petri Laarne –

+0

장면이 변경되지 않으면 매 프레임마다 다시 그릴 필요가 없습니다. 'Draw' 호출 할 때마다 백 버퍼 ('Nothing' 렌더 타겟) 만 다시 그리면됩니다. –

1

SpriteBatch는 XNA Texture2D 객체와 함께 작동합니다. 그들은 함께 일하지 않습니다.

RenderTarget2D을 새로 만들고 GraphicsDevice.SetRenderTarget()을 사용하여 활성으로 설정하고 SpriteBatch을 사용하여 그릴 수 있습니다. 그런 다음 렌더링 대상이 Texture2D 유형이기 때문에 SpriteBatch을 사용하여 저장된 렌더링 대상을 화면에 그릴 수 있습니다.

+0

감사의 대답에 대한 위해의 감사합니다. 오키,이 예제를 써 주겠니? 나는 이것에 아주 익숙하고 아주 새롭기 때문에 방금 여러분이 쓴 것은 그리스어입니다. –

+0

이 작업을 수행 할 수 있음을 잊어 버렸습니다. @Petri Laarne –