Lousada SCP Ответов: 1

Получение объекта из экрана


- Привет! Я задал этот вопрос час назад, потому что у меня возникли проблемы с перемещением растрового изображения в C#. Теперь он движется, но продолжает уходить с экрана. Его положение меняется, но предел должен быть границей окна, но это не так.

Вот мой код

private void timerGameLoop_Tick(object sender, EventArgs e)
      {
          UpdateVar();
          this.Refresh();
      }
      private void UpdateVar()

      {

          cVarandas.Update(
         rnd.Next(this.Width - Resources.vhappy.Width, Resources.vhappy.Width ),
           rnd.Next(this.Height - Resources.vhappy.Height , this.Height)
                );


Что я уже пробовал:

Я попытался измениться на (это.ширина - ресурсы.vhappy.Width /2) например, но не сработало.

Извините, если я что-то неправильно написал, английский-не мой родной язык.
Был бы признателен за некоторую помощь, спасибо!

gggustafson

Я не "геймер", однако у меня есть опыт перемещения предметов по монитору. В моих ситуациях, не обязательно ваших, я действую по основному тику таймера. Когда происходит тик, я перемещаю все объекты, которые нужно переместить. Затем я определяю, попал ли какой-либо из объектов в границу экрана. Если это так, я изменяю положение (изменяя координаты x и y). После того как все пограничные коллизии были исправлены, я обновляю дисплей монитора (через обработчик событий Paint).

Lousada SCP

- Привет! Спасибо Вам за ваш ответ! И как мне изменить координаты de x и y?

gggustafson

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

1 Ответов

Рейтинг:
6

OriginalGriff

Используйте отладчик и узнайте, с какими числами вы имеете дело: какие значения находятся в this.Width, Resources.vhappy.Width, this.Height, и Resources.vhappy.Height пока ваш код работает.
Когда вы знаете это, вы можете сказать, насколько велики значения, передаваемые вашему методу обновления, а затем посмотреть на это, чтобы узнать, что он делает с ними.
Мы не можем сделать это за вас: мы не можем запустить ваш код - так что отладчик (как это всегда должно быть) ваш друг и ваш первый порт захода. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

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

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


gggustafson

Пожалуйста, не используйте область решения для такого рода комментариев; вместо этого используйте раздел комментариев. Таким образом, неотвеченный вопрос не удаляется из категории "неотвеченные вопросы". (Обычно я смотрю только на вопросы, оставшиеся без ответа.)

OriginalGriff

Научить его пользоваться отладчиком-вот решение этой проблемы, и, вероятно, для следующей дюжины его тоже...

gggustafson

Простите, вы меня неправильно поняли. Я на 100% согласен с вашей позицией. Проблема в том, где вы его разместите. Если вы разместите свой ответ в разделе "Решения", то удалите вопрос из категории "просмотр неотвеченных вопросов". Однако если вы разместите свой ответ в категории "есть вопрос или комментарий", вопрос ОП останется в категории "просмотр неотвеченных вопросов". Это облегчает респондентам возможность отвечать только на вопросы, оставшиеся без ответа. С уважением

Lousada SCP

это действительно помогло мне, решило мою проблему! Спасибо

OriginalGriff

Всегда пожалуйста!