Как переместить объект на экран - PullRequest
0 голосов
/ 19 апреля 2009

как я могу переместить любой объект на экране в WinForm?

Когда я нажимаю вправо -> объект будет двигаться вправо, пока я не нажму любую другую клавишу со стрелкой

и когда я нажимаю влево <- объект будет двигаться влево, пока я не нажму любую другую клавишу со стрелкой </p>

Объект все время будет в движении (как в игре Snake)

Спасибо заранее

Ответы [ 5 ]

1 голос
/ 19 апреля 2009

Вы, вероятно, хотите наследовать от Форма и переопределить метод OnPaint . Вам, вероятно, также потребуется Invalidate () каждый раз, чтобы принудительно перекрасить. Это создаст простой игровой цикл и позволит вам довольно быстро обновлять экран.

В вашем методе OnPaint вы обновите позицию объекта на основе того, сколько времени прошло с момента последнего вызова метода OnPaint и какая клавиша была нажата последней. Вы, вероятно, сделаете это, используя скорость следующим образом:

newPosition = oldPosition + (elapsedTime * velocity)

Значение скорости будет изменяться в зависимости от того, какую клавишу вы нажимаете (то есть отрицательное для левого, положительное для правого). Вам также понадобится переменная и некоторый код, чтобы отслеживать, движется ли он горизонтально или вертикально.

Это довольно низкоэффективный способ сделать это (то есть взломать). Если вы хотите придерживаться Windows, но получить лучшую производительность без особых усилий, вы можете заглянуть в XNA . Если вы хотите гораздо более высокую производительность и готовы выполнять значительно больше работы, изучите Interop с DirectX и Win32 API или просто переключайтесь между собой.

0 голосов
/ 14 января 2016
  enum position
    {
        Left,Right,up,down
    }
    private int _x;
    private int _y;
    private position _objposition;
    public Form1()
    {
        InitializeComponent();
        _x = 50;
        _y = 50;
        _objposition = position.down;
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.FillRectangle(Brushes.DarkSlateBlue,_x,_y,100,100);
    }

    private void timertick_Tick(object sender, EventArgs e)
    {
        if (_objposition == position.Right)
        {
            _x += 10;
        }
        else if (_objposition == position.Left)
        {
            _x -= 10;
        }
        else if (_objposition == position.up)
        {
            _y -= 10;
        }
        else if (_objposition == position.down)
        {
            _y += 10;
        }
        Invalidate();
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Left)
        {
            _objposition =position.Left;
        }
        else if (e.KeyCode == Keys.Right)
        {
            _objposition = position.Right;
        }
        else if (e.KeyCode == Keys.Up)
        {
            _objposition = position.up;
        }
        else if (e.KeyCode == Keys.Down)
        {
            _objposition = position.down;
        }
    }
}

Это создаст прямоугольник размером 50X50. По умолчанию я устанавливаю позицию этого поля вниз. Но когда вы нажимаете любую клавишу, например, для: - если вы нажмете стрелку влево, то событие клавиши сработает, и это установит положение окна влево, и окно начнет двигаться слева, пока не будет нажата другая клавиша

0 голосов
/ 19 апреля 2009

Предполагая, что вы делаете это в 2D, вы можете установить коэффициент изменения x и y, который вы устанавливаете должным образом при каждом нажатии клавиши со стрелкой. Затем настройте таймер для обновления позиции с желаемой скоростью. А когда отметится таймер, отрегулируйте положение вашего объекта с помощью коэффициентов изменения x / y.

0 голосов
/ 19 апреля 2009

захватить ключи, настроить координаты объекта.

0 голосов
/ 19 апреля 2009

Вам нужен игровой цикл, чтобы продолжить направление движения, которое вы изначально инициировали, одним нажатием кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...