Задать вопрос

Как исправить- пытаюсь двигать bitmap по полю?

Всем привет. В общем загружаю карту/уровень:

private void Form1_Paint(object sender, PaintEventArgs e)
        {
            var lines = File.ReadAllLines(@"C:\Users\MAKSIM\source\repos\LoadLevel\WindowsFormsApp5\Level\level1.txt");
            width = lines[0].Length;
            height = lines.Length;

            for (int j = 0; j < height; j++)
            {
                for (int i = 0; i < width; i++)
                {
                    switch (lines[j][i])
                    {
                        case 'x':
                            g.DrawImage(image1, i * 32, j * 32, 32, 32);
                            coordBoll[i, j] = 1;
                            break;
                        case 'b':
                            g.DrawImage(image2, i * 32, j * 32, 32, 32);
                            coordBoll[i, j] = 2;
                            break;
                        case ' ':
                            g.DrawImage(image3, i * 32, j * 32, 32, 32);
                            coordBoll[i, j] = 0;
                            break;
                        case 'p':
                            g.DrawImage(image4, i * 32, j * 32, 32, 32);
                            coordBoll[i, j] = 3;
                            break;
                        case 's':
                            g.DrawImage(image5, i * 32, j * 32, 32, 32); posSX = i; posSY = j;
                            coordBoll[i, j] = 4;
                            break;
                    }
                }
            }
        }


Далее, пытаюсь двигать bitmap. Сам игрок успешно двигается (image5). При столкновении с (image2), необходимо сдвинуть image2 влево/вправо/вверх/вниз - в зависимости от нажатых кнопок. Условие столкновения проверяю так:
case Keys.Left:
                    image5 = new Bitmap(@"C:\Users\MAKSIM\source\repos\LoadLevel\WindowsFormsApp5\Image\left.png");
                    g.DrawImage(image3, posSX * 32, posSY * 32);
                    g.DrawImage(image5, posSX * 32 - 32, posSY * 32);
                    posSX -= 1;

                    if (coordBoll[posSX, posSY] == 2)
                    {                     
                        for (int j = 0; j < height; j++)
                        {
                            for (int i = 0; i < width; i++)
                            {
                                g.DrawImage(image2, posSX * 32 - 32, posSY * 32);
                            }
                        }
                    }

                    g.DrawImage(image2, posSX * 32 - 32, posSY * 32);
                    break;


Но каждый раз, когда нажимаешь кнопку- рисуется еще один image2. Как это исправить??? Не прошу переписывать весь код, если есть какие-нибудь методические указания с удовольствием почитаю или простые примеры, где можно двигать один объект к другому и чтобы они вместе дальше двигались. СПАСИБО
  • Вопрос задан
  • 53 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@Myclass
case Keys.Left:
                    image5 = new Bitmap(@"C:\Users\MAKSIM\source\repos\LoadLevel\WindowsFormsApp5\Image\left.png");
                    g.DrawImage(image3, posSX * 32, posSY * 32);
                    g.DrawImage(image5, posSX * 32 - 32, posSY * 32);
                    posSX -= 1;

                    if (coordBoll[posSX, posSY] == 2)
                    {                     
                        for (int j = 0; j < height; j++)
                        {
                            for (int i = 0; i < width; i++)
                            {
                                g.DrawImage(image2, posSX * 32 - 32, posSY * 32);
                            }
                        }
                    }

                    g.DrawImage(image2, posSX * 32 - 32, posSY * 32); // а зачем в условии эта последняя строчка с прорисованием image2 вновь....
                    break;


а зачем в условии эта последняя строчка с прорисованием image2 вновь....

И ещё. Я совсем не понял два этих вложенных в друг-друга цикла. Ведь они никак не влияют ни на что. Зачем они?

И ещё. Я конечно не специалист по играм, но я-бы в голове (памяти) держал-бы сетку с координатами и прорисовка элементов была-бы независима от количества пикселей в одной клетке (32), что-бы мочь всегда скалировать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы