2016-04-25 17 views
-5

をクラッシュし続ける、私は形状と円を描くの成功があったが、頂点で私が作るすべてのprogamsは、なぜそれがクラッシュしない頂点配列が、私は最近SFML 2.3でコーディングを開始

#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次あなたのケースでは


は、あなたがこれを行うことができます:あなたは正確に何が必要ですPrimitiveType::Quadsの4つのインスタンスのためのメモリを割り当てている。ここ

VertexArray vArray(PrimitiveType::Quads, 4); 

関連する問題