#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. Спасибо за ваш подробный ответ. 🙂