Почему мои строки не перемещаются?

#c

#c

Вопрос:

Хорошо, итак, я вызываю функцию, которая рисует три строки для отображения «I» на экране. Затем я вызываю другую функцию, которая вызывает эту функцию, но добавляет 1 к переменной x, чтобы сделать букву жирной. Затем я хочу добавить x add в функцию ‘tick’, которая выполняет каждый кадр. Это не работает, но почему? Если вы не понимаете, что я имею в виду, пожалуйста, проверьте эту страницу, это руководство, которому я следую: http://www.devmaster.net/articles/intro-to-c -with-game-dev/part3.php

Объявляем глобальные x и y и вызываем функцию tick:

 int x = 0;
int y = 0;
void Game::Tick( float a_DT )
{
    m_Screen->Clear( 80 );
    DrawI(0,0);
    x  ;
}
  

Создание функций:

 void Game::DrawI(int x, int y)
{
    m_Screen->Line( 100   x, 50   y, 200   x, 50   y, 0xffffff );
    m_Screen->Line( 150   x, 50   y, 150   x, 300   y, 0xffffff );
    m_Screen->Line( 100   x, 300   y, 200   x, 300   y, 0xffffff );
}

void Game::DrawFatI()
{
    DrawI(1,0);
    DrawI(0,1);
    DrawI(0,0);
    DrawI(1,1);
}
  

Спасибо за проверку.

Комментарии:

1. Вам не хватает x y частей и

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

3. Просто комментарий: использование одних и тех же имен «x» и «y» как для глобальных, так и для локальных переменных / параметров функции вызовет у вас много головной боли.

4. Tick увеличивает глобальную переменную x , в то время DrawI как использует локальную переменную x . Они совершенно не связаны. Вместо Tick этого следует вызвать DrawI(x,0) .

5. Ребята, я допустил ошибку при копировании кода. Пожалуйста, проверьте мой отредактированный пост еще раз.

Ответ №1:

Когда вы вызываете DrawI, он имеет x и y передается ему в качестве параметров:

 void Game::DrawI(int x, int y)
  

Они маскируют глобальное x и y , так что внутри DrawI везде, где вы говорите x , и y это относится к параметрам функции. (Вы можете получить доступ к глобальным с помощью ::x и ::y хотя).

Поскольку вы всегда вызываете DrawI с помощью литералов, а не переменных, например DrawI(1,0); , значения x и y в DrawI никогда не меняются, они всегда являются только этими фиксированными значениями, а не глобальной переменной, следовательно Line , всегда передаются одни и те же значения, даже если ваш глобальный x изменился.

Я бы дал две рекомендации, чтобы избежать этого:

  1. У вас нет нескольких переменных с одинаковым именем, где одна маскирует другую
  2. Не используйте глобальные переменные, если для этого нет веской причины. (Насколько я вижу, это не так)

Комментарии:

1. Спасибо за ваш подробный ответ. 🙂