【问题标题】:Vertex Arrays keep crashing顶点数组不断崩溃
【发布时间】:2016-08-19 05:10:09
【问题描述】:

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

为什么会崩溃?

【问题讨论】:

  • 那么它在哪一行崩溃了?连这一点点信息都不给我们,你会被否决。

标签: c++ sfml


【解决方案1】:

这是因为您不能像在循环中那样简单地说vArray[index].position = &lt;something&gt;;,因为您永远不会分配足够的内存。简而言之,vArray中没有元素

您必须以某种方式分配此内存。例如std::vector&lt;int&gt; tmp(4);int 类型的4 个成员预分配内存。


在你的情况下,按照documentation,你可以这样做:

VertexArray vArray(PrimitiveType::Quads, 4);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2012-09-03
    • 2015-08-08
    • 2018-05-24
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多