2016-04-25 52 views
-5

我最近開始SFML 2.3編碼,我取得了成功繪製形狀和圓形,但與頂點我將一切progams保持崩潰頂點數組保持崩潰

#include "stdafx.h" 
#include <iostream> 
#include <cstdlib> 
#include <time.h> 
#include <SFML/Graphics.hpp> 
#include <SFML/OpenGL.hpp> 

using namespace sf; 

const int widht = 800, height = 600; 

int main() 
{ 
    srand(time(NULL)); 
    RenderWindow app(VideoMode(widht, height), "SFML APP"); 
    Event event; 
    VertexArray vArray; 
    vArray.setPrimitiveType(PrimitiveType::Quads); 
    while (app.isOpen()) 
    { 
     while (app.pollEvent(event)) 
     { 
      switch (event.type) 
      { 
      case Event::Closed: 
       app.close(); 
       break; 
      } 
     } 
     for (int i = 0; i < widht; i++) 
     { 
      for (int j = 0; j < height; j++) 
      { 
       vArray[0].position = Vector2f(i * 10, j * 10); 
       vArray[1].position = Vector2f(i * 10 + 10, j * 10); 
       vArray[2].position = Vector2f(i * 10 + 10, j * 10 + 10); 
       vArray[3].position = Vector2f(i * 10, j * 10 + 10); 
      } 
      app.draw(vArray); 
     } 
     app.clear(); 
     app.display(); 
    } 
    return 0; 
} 

爲什麼它會崩潰?

+0

那麼它會崩潰哪條線?如果不給我們這些信息,你就會陷入低谷。 – PaulMcKenzie

回答

1

這是因爲你不能簡單地說vArray[index].position = <something>;,就像你在循環中做的那樣,因爲你永遠不會分配足夠的內存。總之,有沒有內容vArray

您必須以某種方式分配此內存。例如,std::vector<int> tmp(4);預先分配內存給int類型的4個成員。


在你的情況,繼documentation,你可以這樣做:

VertexArray vArray(PrimitiveType::Quads, 4); 

在這裏,我們爲PrimitiveType::Quads四個實例,而這正是你所需要的分配內存。