我最近开始使用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 :(得分:1)
这是因为您不能简单地说vArray[index].position = <something>;
,就像在循环中一样,因为您从未分配足够的内存。简而言之,vArray
中没有元素。
你必须以某种方式分配这个记忆。例如,std::vector<int> tmp(4);
为类型为int
的4个成员预先分配内存。
在您的情况下,按照documentation,您可以执行此操作:
VertexArray vArray(PrimitiveType::Quads, 4);
在这里,您要为PrimitiveType::Quads
的四个实例分配内存,这正是您所需要的。