C#移动位图图像/获取像素

时间:2018-11-19 15:38:27

标签: c# bitmap game-physics pixel

我目前正在制作带有图片框的游戏,但是它有一些缺点,例如,移动角色时,动画效果很好,但是由于它是一个盒子,所以即使它是透明的,它也会移动其多余的空间。同样,当图片框发生碰撞并且一个图片框彼此重叠时,它会显示图片框的多余空间,并使游戏变得业余。因此,我现在尝试使用位图而不是图片框。我想要的是获得与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,它也没有给我解决方案。

结论,我需要获取图像的每个像素,并且我不需要任何空白背景。因此,我需要创建一个以图像为像素的新形状,并且每次角色移动时都需要在位图中更改图像。我正在寻找您的帮助人员。如果需要的话,我可以提供所需的代码,但这是我想的相对代码。预先感谢。

0 个答案:

没有答案