Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的游戏中的精灵不显示?_C++_Oop_Sfml - Fatal编程技术网

C++ 为什么我的游戏中的精灵不显示?

C++ 为什么我的游戏中的精灵不显示?,c++,oop,sfml,C++,Oop,Sfml,您好,我正在使用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,

您好,我正在使用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
\ifndef敌军
#定义敌人
#包括
阶级敌人{
私人:
sf::纹理;
雪碧敌人;
漂浮敌人的速度;
int-maxY,maxX;
公众:
敌人(int_maxY,int_maxX);
无效渲染(sf::RenderWindow*wnd);
无效更新(sf::时间增量);
无效复位(浮动速度);
};
#恩迪夫
敌方.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);
}
}
#包括
敌人:敌人(整数最大,整数最大){
loadFromFile(“SFML游戏开发手册-
master/03_World/Media/Textures/Raptor.png);
Enemisprite.setTexture(纹理);
敌人旋转(180);
最大值=_最大值;
maxX=_maxX;
}
无效敌人::渲染(sf::渲染窗口*wnd){
wnd->draw(敌人之旅);
}
无效敌人::重置(浮动速度){
srand(时间(空));
int num=rand();
敌人速度=速度;
enemySprite.setPosition(num%maxX,maxY);
}
无效敌人::更新(sf::时间延迟){
enemySprite.move(0.0f,enemySpeed*deltaTime.asSeconds());
如果(enemySprite.getPosition().y>600){
重置(敌人速度);
}
}
游戏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();
 };
类游戏{
私人:
sf::RenderWindow*mWindow;
飞机;
病媒天敌;
无效重置();
私人:
void proccesEvent();
无效更新(sf::时间增量);
void render();
公众:
游戏();
无效运行();
};
Game.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; i<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();
}
}
Game::Game(){
mWindow=新sf::RenderWindow(sf::VideoMode(800600),“ventana SFML”);
用于(int i=0;iPolleEvent(事件)){
如果(event.type==sf::event::Closed){
mWindow->close();
}
}
}
无效游戏::重置(){
对于(int i=0;iisOpen()){
sf::Time deltaTime=clock.restart();
proccesEvent();
重置();
更新(deltaTime);
render();
}
}

问题是“敌人”不会出现在屏幕上。纹理加载正确,如果我从类游戏中运行的函数中删除函数重置,则会出现一个白色正方形,而不是纹理,同时显示一个,那么我如何才能更正此错误,以便同时显示多个敌人。

这行代码:for(int i=0;friends.size();i++)你希望它对条件从句做什么?buzzers.size()是否达到零以终止循环?是的,我更正了该行,忘了在此处添加。问题仍然是你的纹理实际加载了吗?我会在那里添加一个if检查,并用它进行测试<代码>如果(!texture.loadFromFile(“texture.png”)//错误检查代码我已经这样做了,是的,纹理正在加载。帮我一个忙,在构造器中将你的精灵的位置设置为屏幕中间,在构造器中将你的速度设置为10,并让我知道你是否可以看到任何敌人的精灵。