为什么我的线不会移动?

时间:2011-10-08 13:39:57

标签: c++

好的,所以我正在调用一个绘制三行的功能来在屏幕上显示“我”。 然后,我调用另一个调用此函数的函数,但将x变量加1 把这封信大胆。然后我想把x ++添加到'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 个答案:

答案 0 :(得分:1)

当您致电DrawI时,它已将xy作为参数传递给它:

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

这些掩码全局xy,这样在DrawI的任何地方你都会xy引用到函数参数。 (您可以使用::x::y来访问全局的。

由于您始终使用文字调用DrawI,而不是变量,例如DrawI(1,0); x中的yDrawI的值永远不会改变,它们始终只是这些固定值,而不是全局变量,因此Line总是被传递相同的值,即使您的全局x已更改。

我会提出两条建议来避免这种情况:

  1. 没有多个具有相同名称的变量,其中一个掩盖了另一个
  2. 不要使用全局变量,除非有良好的原因。 (就我所见,这似乎不是一个)