如何解决这个"arithmetic exception"?
How to solve this "arithmetic exception"?
嗨,我正在使用SFML开发游戏,但我遇到了功能问题。
这是代码:
敌人.h:
#ifndef ENEMY_H
#define ENEMY_H
#include<SFML/Graphics.hpp>
class Enemy {
private:
sf::Texture texture;
sf::Sprite enemySprite;
float enemySpeed;
int maxY, maxX;
public:
Enemy(int _maxY, int _maxX);
void render(sf::RenderWindow *wnd);
void update(sf::Time deltaTime);
void reset(float speed);
};
#endif
敌人.cpp:
#include <ctime>
Enemy::Enemy(int _maxY, int _maxX) {
texture.loadFromFile("SFML-Game-Development-Book-
master/03_World/Media/Textures/Raptor.png");
enemySprite.setTexture(texture);
enemySprite.rotate(180);
maxY = _maxY;
maxX = _maxX;
}
void Enemy::render(sf::RenderWindow *wnd){
wnd->draw(enemySprite);
}
void Enemy::reset(float speed){
srand(time(NULL));
int num = rand();
enemySpeed = speed;
enemySprite.setPosition(num%maxX, maxY);
}
void Enemy::update(sf::Time deltaTime){
enemySprite.move(0.0f, enemySpeed * deltaTime.asSeconds());
if (enemySprite.getPosition().y > 600){
reset(enemySpeed);
}
}
游戏.h:
class Game {
private:
sf::RenderWindow *mWindow;
Aircraft aircraft;
std::vector<Enemy> enemies;
void reset();
private:
void proccesEvent();
void update(sf::Time deltaTime);
void render();
public:
Game();
void run();
};
游戏.cpp:
Game::Game(){
mWindow = new sf::RenderWindow(sf::VideoMode(800,600), "ventana SFML");
for (int i=0; i<5; i++){
enemies.push_back(Enemy(800, 600));
}
}
void Game::proccesEvent(){
sf::Event event;
while(mWindow->pollEvent(event)){
if(event.type == sf::Event::Closed){
mWindow->close();
}
}
}
void Game::reset(){
for (int i=0; enemies.size(); i++){
enemies[i].reset(100.0f);
}
}
void Game::update(sf::Time deltaTime){
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)){
aircraft.Up();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)){
aircraft.Down();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)){
aircraft.Left();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)){
aircraft.Right();
}
aircraft.update(deltaTime);
for (int i=0; i<enemies.size(); i++){
enemies[i].update(deltaTime);
}
}
void Game::render(){
mWindow->clear();
aircraft.Render(mWindow);
for (int i=0; i<enemies.size(); i++){
enemies[i].render(mWindow);
}
mWindow->display();
}
void Game::run(){
sf::Clock clock;
while(mWindow->isOpen()){
sf::Time deltaTime = clock.restart();
proccesEvent();
reset();
update(deltaTime);
render();
}
}
我认为问题出在类 Enemy 中的函数重置中,因为当我使用调试器时,它会在该函数中停止。
问题是什么,我该如何解决?
这个想法是敌人是一艘在 Y 轴上始终向下移动的船
这就是问题所在。你忘了使用不等式。enimies.size(( 将始终返回 true(如果有的话(。但你真的希望我<敌人.size((。>
void Game::reset(){
for (int i=0; i < enemies.size(); i++){
enemies[i].reset(100.0f);
}
}
相关文章:
- 为重写std::exception的库生成swig接口时出错
- 什么是 std::exception::what() 以及为什么要使用它?
- 链表"exception thrown"
- 为什么程序员同时使用 std::bad_alloc 和 std::exception.是否 std::例外 仅是不够的
- C++ broken_promise exception
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- QVTKWidget SetRenderWindow() with PCLVisualizer Exception
- 自定义派生的 std::exception 类的 'what' 函数返回神秘的废话
- 使用flag、return、exception、goto或break中止过程
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 派生自 std::exception 的类的赋值运算符
- 尝试打印字符串时"Python Exception <class 'gdb.error'> There is no member named _M_dataplus."
- std::exception :使用虚函数和继承与变量
- MFC ODBC SQLConfigDataSource() Unhandled Exception
- 这段 C++ 代码的奇怪行为(std::wcout 和 std::exception)
- VTK 7.1.1: vtkX3DExporter exception
- 无法在"catch(const std::exception &ex)"中捕获 std::invalid_argument
- opencv cv::addText exception if no window
- Ctypes: OSError: exception: stack overflow
- 如何解决这个"arithmetic exception"?