#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;
}
Я попробовал вручную создать объект типа Enemy и вставить его в вектор. Когда я запускаю игру, все работает так, как задумано. Но когда я использую цикл for для заполнения вектора и запускаю игру, отображается только спрайт игрока. Я попробовал поместить цикл for внутри и снаружи основного цикла, но это не сработало. Что мне делать?
Примечание: файл случайного заголовка находится в одном из файлов заголовков
#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