我目前正在制作带有图片框的游戏,但是它有一些缺点,例如,移动角色时,动画效果很好,但是由于它是一个盒子,所以即使它是透明的,它也会移动其多余的空间。同样,当图片框发生碰撞并且一个图片框彼此重叠时,它会显示图片框的多余空间,并使游戏变得业余。因此,我现在尝试使用位图而不是图片框。我想要的是获得与Picturebox相同的功能。我的意思是,我能够移动图片框的x和y并在移动(动画/帧)时连续更改其图像。但是现在,我无法使用位图来做到这一点。这是我尝试过的代码;
Bitmap BM;
PaintEventArgs pnt;
Graphics g;
int framenum = 0;
private void animationTimer_Tick(object sender, EventArgs e)
{
framenum++;
if (framenum <= 8 && Acheck==true)
{
pictureBox1.ImageLocation = "chrun_l_" + framenum.ToString() + ".png";
BM = new Bitmap("chrun_l_" + framenum.ToString() + ".png");
g = Graphics.FromImage(BM);
g.DrawImage(BM, 100, 500);
}
else if (framenum <= 8 && Dcheck == true)
{
pictureBox1.ImageLocation = "chrun_r_" + framenum.ToString() + ".png";
BM = new Bitmap("chrun_l_" + framenum.ToString() + ".png");
g = Graphics.FromImage(BM);
g.DrawImage(BM, 100, 500);
}
else if (framenum < 9 && Wcheck == true)
{
pictureBox1.ImageLocation = "chrun_f_" + framenum.ToString() + ".png";
BM = new Bitmap("chrun_l_" + framenum.ToString() + ".png");
g = Graphics.FromImage(BM);
g.DrawImage(BM, 100, 500);
}
else { framenum = 0; }
}
计时器将每秒更改一次帧号,“ chrun_l_1.png”将变为“ chrun_l_2.png”并继续。如您所见,以前的代码仍然存在(图片框代码)。这实际上什么也没做...我只能看到“ chrun_l_1.png”(我只说一张图片),这是因为Form1_Paint;
private void Form1_Paint(object sender, PaintEventArgs e)
{
BM = new Bitmap("chrun_l_1.png");
e.Graphics.DrawImage(BM, 100, 500);
pnt = e;
}
这会绘制图像,但我需要它连续绘制,而Form1_Paint事件不会执行此操作。我认为它像form1_load一样可以工作一次。我尝试使用Form1_Paint的PaintEventArg,但是它不起作用,所以我创建了一个名为pnt的新PaintEventArg,它也没有给我解决方案。
结论,我需要获取图像的每个像素,并且我不需要任何空白背景。因此,我需要创建一个以图像为像素的新形状,并且每次角色移动时都需要在位图中更改图像。我正在寻找您的帮助人员。如果需要的话,我可以提供所需的代码,但这是我想的相对代码。预先感谢。