我刚刚开始学习XNA。这是我作为一个有趣的“有趣”项目写的第一个程序。
我在绘制创建到屏幕上的位图时遇到了问题。
我知道正在正确创建位图,因为当我运行
时bitmap.Save( @"C:\jnk\test.bmp", System.Drawing.Imaging.ImageFormat.Bmp );
它保存了正确的位图
我试图从类绘制函数中显示图像但是无法显示任何内容。我找到了一些使用System.Drawing.Graphics类创建位图的源代码,它还显示它使用
将其绘制到屏幕上bitmapGraphics.DrawImage( bitmap, new System.Drawing.Point( this.boardXOffset, this.boardYOffset ) );
bitmapGraphics是一个Systems.Drawing.Graphics对象,boardOffsets都是0.我试图从一个在我的main的draw函数中调用的类中绘制它。
然而,我什么都没得到,没有错误,没有显示。我猜这是因为它不知道要绘制它的对象是什么?但是我缺乏对xna的了解......任何帮助都会很棒。
如果它对所有主程序有帮助,则将其作为绘图函数运行
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear( Color.CornflowerBlue );
BoardGraphicsEngine.Draw();
base.Draw(gameTime);
}
并且BoardGraphicsEngine中的绘制函数是
public void Draw( )
{
int width = Convert.ToInt32( System.Math.Ceiling( board.pixelWidth ) );
int height = Convert.ToInt32( System.Math.Ceiling( board.pixelHeight ) );
width += 1;
height += 1;
Bitmap bitmap = new Bitmap( width, height );
Graphics bitmapGraphics = Graphics.FromImage( bitmap );
Pen p = new Pen( System.Drawing.Color.Black );
SolidBrush sb = new SolidBrush( System.Drawing.Color.Black );
sb = new SolidBrush( board.boardState.backgroundColor );
bitmapGraphics.FillRectangle( sb, 0, 0, width, height );
... Loop through board and create with a couple calls to
bitmapGraphics.FillPolygon( new SolidBrush( board.hexes[i, j].hexState.BackgroundColor ), board.hexes[i, j].points );
and
bitmapGraphics.DrawPolygon( p, board.hexes[i, j].points );
and
bitmapGraphics.DrawPolygon( p, board.boardState.activeHex.points );
//bitmap.Save( @"C:\jnk\test.bmp", System.Drawing.Imaging.ImageFormat.Bmp );
bitmapGraphics.DrawImage( bitmap, new System.Drawing.Point( this.boardXOffset, this.boardYOffset ) );
bitmapGraphics.Dispose();
bitmap.Dispose();
}
}
大部分内容的原始来源是http://www.codeproject.com/KB/graphics/hexagonal_part1.aspx但问题的一部分可能是这个例子是一个Windows窗体,我正在创建一个xna项目
答案 0 :(得分:2)
尝试从xna 2d tutorial开始。您使用的方法不是我认为的常用xna方法。
答案 1 :(得分:2)
我对XNA知之甚少,但你绝对不会在这里使用XNA。您正在使用.NET接口到GDI +,而您的Draw()方法将所有内容渲染到屏幕外位图(bitmapGraphics),除非您将其渲染到屏幕缓冲区,否则它不会显示在屏幕上。如果您想学习XNA,我建议您参考特定于XNA的教程。