我使用VB.NET在XNA中编写游戏。我想创建一个游戏介绍,放大/缩小整个屏幕并缩放每个图像以实现这一点,这是最麻烦的。我希望能够将大量的.PNG(或其中的一部分)绘制到整个图像上,然后能够在使用spriteBatch绘制之前操纵(缩放,转动等)整个图像。我可以找到的例子使用类似的东西:
dim bitmap as New Bitmap
或
dim image as New Image
但这些代码突出显示了" Bitmap"或"图像"为红色,我不能使用它们。感谢你对这个问题的任何帮助!
答案 0 :(得分:1)
SpriteBatch
适用于XNA Texture2D
个对象,而Bitmap
和Image
属于System.Drawing
个类型。他们不能一起工作。
您可以创建新的RenderTarget2D
,使用GraphicsDevice.SetRenderTarget()
将其设置为有效,然后使用SpriteBatch
进行绘制。然后,您可以使用SpriteBatch
将存储的渲染目标绘制到屏幕,因为渲染目标是Texture2D
的类型。
答案 1 :(得分:0)
所以我尝试了Petri Laarne的答案,最后提出了一个可行的代码(大多数在线示例都使用C#,并没有解释整个过程)。试着在这里解释一下:
在公共课Game1:
Private WithEvents graphics As GraphicsDeviceManager
Private WithEvents spriteBatch, spriteBatch2 As SpriteBatch
在Loadcontent中:
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