C # Перемещение растрового изображения / Получение пикселей - PullRequest
0 голосов
/ 19 ноября 2018

В настоящее время я делаю игру с картинками, но у нее есть недостатки, например, при перемещении персонажей анимация работает нормально, но, поскольку она представляет собой коробку, она перемещается с лишними пробелами, даже если она прозрачна.Кроме того, когда пиктограммы сталкиваются и накладываются друг на друга, это показывает дополнительные пробелы в картинках и делает игру любительской.Итак, я пытаюсь использовать растровые изображения вместо картинок прямо сейчас.То, что я хочу, это получить ту же функциональность 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" и продолжится.И, как вы можете видеть, прежний код все еще там (коды Picturebox).Это ничего не делает на самом деле ... Я вижу только "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.Я пытался использовать PaintEventArg Form1_Paint, но он не работал, поэтому я создал новый PaintEventArg с именем pnt, и это тоже не дало мне решения.

Вывод, мне нужно получить все пиксели изображения, и мне не нужен пустой фон.Итак, мне нужно создать новую форму, пикселизированную изображением, и мне нужно менять изображение в растровом изображении каждый раз, когда персонаж перемещается.Я ищу вашу помощь, ребята.Я могу дать необходимые коды после, если хотите, но это относительные коды, я думаю.Заранее спасибо.

...