出于某种原因,此代码实际上并未绘制我的位图文件...或显示表单。
namespace GraphicsEngine
{
public partial class Form1 : Form
{
Bitmap[] dude = new Bitmap[3];
Bitmap dude0 = new Bitmap(@"C:\Directory.bmp");
Point renderpoint = new Point(1, 1);
public Form1()
{
dude[0] = new Bitmap(@"C:\Directory.bmp");
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
MainLoop();
}
private void MainLoop()
{
double FPS = 30.0;
long ticks1 = 0;
long ticks2 = 0;
double interval = (double)Stopwatch.Frequency / FPS;
while (!this.IsDisposed)
{
ticks2 = Stopwatch.GetTimestamp();
if (ticks2 >= ticks1 + interval)
{
ticks1 = Stopwatch.GetTimestamp();
this.Invalidate();
}
Thread.Sleep(1);
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawImage(dude0, renderpoint);
}
}
}
有什么想法吗?
答案 0 :(得分:1)
你的问题应该比没有看到位图更明显,你也不应该看到这个形式。那是因为你永远不会完成Load事件。您可以使用已显示的事件。
检查this thread以获取真实游戏循环的代码。
答案 1 :(得分:0)
除非您将UserPaint设置为true,否则不会调用Form1_Paint。试试这个作为你的构造函数
public Form1() {
dude[0] = new Bitmap(@"C:\Directory.bmp");
InitializeComponent();
this.SetStyle( System.Windows.Forms.ControlStyles.UserPaint, true );
this.SetStyle( System.Windows.Forms.ControlStyles.AllPaintingInWmPaint, true );
this.SetStyle( System.Windows.Forms.ControlStyles.OptimizedDoubleBuffer, true );
}
请注意,当您这样做时,您可能需要对表单上的所有颜料负责。
答案 2 :(得分:0)
尝试使用this.Invalidate();
替换您的this.Refresh();
来电。
答案 3 :(得分:0)
看起来你的MainLoop()可能是一个无限循环。您可以将Console.Out.WriteLine(ticks1);
放入while循环中以验证此操作。
它被卡在Load事件处理程序中,并且没有发生主表单验证。如果您注释掉对MainLoop()的调用,它肯定会画出图片。