На самом деле я пытался сделать код для стрельбы пулей. Я использовал векторы и добавил в него спрайт и позиции в отдельных векторах. Но когда я запускаю свою программу, мое окно перестает работать. Вот код. Надеюсь, он не повторится.
#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;
}
для (int i = 0; i <= bullets.size () - 1; i = i) {yp [i] = yp [i] +0.2; я ++; bullets [i] .setPosition (xp [i], yp [i]); window.draw (bullets [i]); } Я обнаружил, что проблема связана с этой строкой, но не знаю, в чем проблема
Пожалуйста, отредактируйте свой вопрос вместо добавления комментариев. Ссылка находится прямо под тегами.
#include "bulletcode.h"
я просто указал это в следующих строках
Я перемещаю спрайт только по оси Y
;i=i) бесполезен, просто напишите ;) и убедитесь, что вы увеличиваете i в точке, где вы хотите В самом деле (обычно после полного тела цикла), то есть там, где сейчас находится i=i.





Вы увеличиваете i в цикле. Итак, на последней итерации вы будете получать доступ за пределы массивов.
Вероятно, вы захотите заменить i=i в объявлении цикла на i++, а не увеличивать i в теле цикла.
Тогда у вас есть другие проблемы для отладки. ;) С первого взгляда вы, вероятно, никогда не увидите свои пули, потому что вы очищаете окно после их рисования.
Ваша программа не работает из-за цикла 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++ ) и переработать его для кодов тела, это сохранит ваш код в чистоте и позволит избежать проблем.
#import "bulletcode.h";? Следует ли читать#include "bulletcode.h"?