顶点阵列不断崩溃

时间:2016-04-25 17:07:49

标签: c++ sfml

我最近开始使用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;
}

为什么会崩溃?

1 个答案:

答案 0 :(得分:1)

这是因为您不能简单地说vArray[index].position = <something>;,就像在循环中一样,因为您从未分配足够的内存。简而言之,vArray 中没有元素。

你必须以某种方式分配这个记忆。例如,std::vector<int> tmp(4);为类型为int的4个成员预先分配内存。

在您的情况下,按照documentation,您可以执行此操作:

VertexArray vArray(PrimitiveType::Quads, 4);

在这里,您要为PrimitiveType::Quads的四个实例分配内存,这正是您所需要的。