Вражеские спрайты не отображаются, когда я заполняю вектор для циклаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вражеские спрайты не отображаются, когда я заполняю вектор для цикла

Сообщение Anonymous »

#include
#include
#include

#include "Player.hpp"
#include "Global.hpp"
#include "Enemy.hpp"

float randint(float min, float max) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution dis(min, max);
return dis(gen);
}

int main() {
Player player;

player.setPos({ gbl::winWidth / 2.f, gbl::winHeight / 2.f });

std::vector enemies;

sf::RenderWindow window(sf::VideoMode(gbl::winWidth, gbl::winHeight), gbl::title);

for (int i = 0; i < 5; i++) {
Enemy newEnemy;
newEnemy.setPos({ randint(10 + newEnemy.getSize().x, gbl::winWidth - newEnemy.getSize().x), 100 });
enemies.push_back(newEnemy);

}

sf::Event ev;
while (window.isOpen()) {
while (window.pollEvent(ev)) {
switch (ev.type) {
case sf::Event::KeyPressed:
if (ev.key.code == sf::Keyboard::Escape) window.close();
break;
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyReleased:
if (ev.key.code == sf::Keyboard::R) {
player.reset();
for (auto& enemy : enemies) {
enemy.setPos({ randint(0, gbl::winWidth), 100 });
}
}
}
}

window.clear(gbl::bgColor);

player.draw(window);
for (Enemy& enemy : enemies) {
enemy.update();
if (enemy.getPos().y + enemy.getSize().y > gbl::winHeight + enemy.getSize().y) {
enemy.setOffscreen();
}
enemy.draw(window);
}

player.move();

window.display();
}

return 0;
}
< /code>
Я попробовал вручную создать объект типа врага и толкнуть их в вектор. Когда я запускаю игру, все работает, все работает так, как задумано. Но когда я использую для цикла, чтобы заполнить вектор, и я запускаю игру только спрайт игрока. Я попытался положить петлю внутри и за пределами основной петли, но это не сработало. Что мне делать?#include "Enemy.hpp"
#include

static inline float randint(float min, float max) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution dis(min, max);
return dis(gen);
}

Enemy::Enemy() {
texture.loadFromFile("assets/images/Enemy.png");
sprite.setTexture(texture);
speed = 0.1f;
offscreen = false;
}

sf::Sprite Enemy::getSprite() const {
return sprite;
}

sf::Vector2f Enemy::getPos() const {
return sprite.getPosition();
}

sf::Texture Enemy::getTexture() const {
return texture;
}

float Enemy::getSpeed() const {
return speed;
}

bool Enemy::getOffscreen() const {
return offscreen;
}

sf::Vector2u Enemy::getSize() const {
return texture.getSize();
}

void Enemy::setPos(sf::Vector2f e_pos) {
sprite.setPosition(e_pos);
}

void Enemy::setOffscreen() {
offscreen = true;
}

void Enemy::draw(sf::RenderWindow& d_window){

d_window.draw(sprite);
}

void Enemy::update() {
if (offscreen == false)
sprite.move({ 0, speed });
else {
setPos({ randint(getSize().x, 800.f - getSize().x), 0 });
offscreen = false;
}

}

This is the code for the Enemy class


Подробнее здесь: https://stackoverflow.com/questions/788 ... a-for-loop
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»