Мой renderwndow становится пустым и перестает работать - PullRequest
0 голосов
/ 16 ноября 2018

На самом деле я пытался сделать код стрельбы пулями. Я использовал векторы и добавил в него спрайт и позиции в отдельных векторах. Но когда я запускаю свою программу, мое окно перестает работать. Вот код. Я надеюсь, что это не такповторяется.

#include <SFML/Graphics.hpp>
#include <iostream>
#import "bulletcode.h";
#include <vector>
using namespace std;
using namespace sf;
int main()
{
vector<Sprite> bullets;
vector<float> xp;
vector<float> yp;
sf::RenderWindow window(sf::VideoMode(900, 600), "SFML works!");
sf::CircleShape shape(75.f);
shape.setFillColor(sf::Color::Green);
Texture bullet;
bullet.loadFromFile("bullet.png");
shape.setPosition(400,100);
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
    }
    if(Keyboard::isKeyPressed(Keyboard::Space)){
        Sprite bulletsp;
        bulletsp.setTexture(bullet);
        bulletsp.setScale(0.8,0.8);
        bullets.push_back(bulletsp);
        xp.push_back(shape.getPosition().x);
        yp.push_back(shape.getPosition().y);
    }
      for(int i=0;i<=bullets.size()-1;i=i){
        yp[i]=yp[i]+0.2;
        i++;
        bullets[i].setPosition(xp[i],yp[i]);
        window.draw(bullets[i]);
     }

    window.clear();
    window.draw(shape);
    window.display();
}

return 0;
}

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Ваша программа не работает из-за цикла for:

for(int i=0;i<=bullets.size()-1;i=i)

, где bullets.size() - это size_t (unsigned int).Когда ваш вектор маркеров пуст (size() = 0), условие i=0 <= (unsigned int)(0 - 1) всегда выполняется.Ваша программа входит в тело и вылетает (yp, xp, маркеры пусты).

Ваши компиляторы должны где-то предупредить вас о проблеме?

Вы должны использовать for(size_t i=0;i < bullets.size(); i++ ) и переработать ваш файл длякоды тела, это держит ваш код в чистоте и избежать источника проблем.

0 голосов
/ 16 ноября 2018

Вы увеличиваете я в цикле.Итак, на последней итерации вы будете получать доступ за пределами массивов.

Возможно, вы захотите заменить i=i в объявлении цикла на i++, а не увеличивать i в теле цикла.

...