#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
Вражеские спрайты не отображаются, когда я заполняю вектор для цикла ⇐ C++
Программы на C++. Форум разработчиков
1738166734
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
Подробнее здесь: [url]https://stackoverflow.com/questions/78813655/the-enemy-sprites-are-not-rendered-when-i-fill-the-vector-with-a-for-loop[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия