2014-01-26 66 views
-2

如何在屏幕上進行2D平方移動?我嘗試移動它,但它只是停留在那裏。C++ OpenGL - 如何在屏幕上製作二維方形移動?

int x = 100; 
int y = 100; 
int width = 50; 
int height = 50; 

x += 1; 

glBegin(GL_QUADS); 
    glColor3f(r, g, b); 
    glVertex2f(x, y); 
    glVertex2f(x + width, y); 
    glVertex2f(x + width, y + height); 
    glVertex2f(x, y + height); 
glEnd(); 

這一切都加載罰款,它吸引了廣場和一切,但它只是不動方,我使用SDL來繪製窗口櫃面你想知道的。

+1

整個代碼是否粘貼在一個函數中?然後它不能工作,因爲你需要在draws之間保持'x'的值。如果沒有,我們需要更多的上下文 – user1781290

回答

0

OpenGL希望您發送0和1之間的相對座標。此外,您每幀都創建一個新變量,因此它們不能在所有幀中遞增。

// box parameters in pixels 
int boxleft = 100, 
    boxbottom = 100; 
int boxwidth = 50, 
    boxheight = 50; 

// window dimensions 
int screenwidth = 1920, 
    screenheight = 1080; 

for(;;) 
{ 
    // clear last frame 
    glClear(GL_COLOR_BUFFER_BIT); 

    // calculate screen space coordinates 
    float left = (float)boxleft/screenwidth, 
      right = left + (float)boxwidth/screenwidth, 
      bottom = (float)boxbottom/screenheight, 
      top = bottom + (float)boxheight/screenheight; 

    // draw the box 
    glBegin(GL_QUADS); 
     glColor3f(r, g, b); 
     glVertex2f(left, top); 
     glVertex2f(right, top); 
     glVertex2f(right, bottom); 
     glVertex2f(left, bottom); 
    glEnd(); 

    // shift box for next frame 
    boxleft++; 
} 

更新:好的,你說這個廣場用你的座標繪製得很好,所以你可能不會改變它。但在繪製循環之外定義變量至關重要。告訴我這是否適合你。

+0

OKay,我明白了。我的方格畫得很好的原因是因爲我使用了glOrtho。嗯是的。謝謝您的幫助! – YayCoding

0

假設這是所有功能之一,問題是函數的開始會不斷地將x的值重置爲100.將變量定義移出函數。舉例:

int x = 100; 
int y = 100; 
int width = 50; 
int height = 50; 

function drawSquare() 
{  
    x += 1; 

    glBegin(GL_QUADS); 
     glColor3f(r, g, b); 
     glVertex2f(x, y); 
     glVertex2f(x + width, y); 
     glVertex2f(x + width, y + height); 
     glVertex2f(x, y + height); 
    glEnd(); 
} 

每次調用該函數時,正方形的x值都會加1,因此會逐漸移動。

+0

我認爲只是使變量靜態更容易。 – Xonar

+0

要麼工作。我個人不是功能中靜態變量的粉絲。我發現更多的時候,那些變量不需要修改其他地方。 – Darinth

+0

@Xonar真的取決於語言,如果語言是Java,那麼我可能會使用靜態變量。但是,隨着問題被標記爲C++,那麼,爲什麼你會使用靜態變量,而全局範圍變量就可以。 – Vallentin

相關問題