我的renderwndow变成空白并停止工作

时间:2018-11-16 14:27:09

标签: c++ sfml

实际上我试图制作一个子弹射击代码。我使用了矢量并将精灵添加到其中,并在单独的矢量中添加了位置。但是当我运行程序时,我的窗口停止了工作。这是代码。我希望它不会重复。

#include <SFML/Graphics.hpp>
#include <iostream>
#import "bulletcode.h";
#include <vector>
using namespace std;
using namespace sf;
int main()
{
vector<Sprite> bullets;
vector<float> xp;
vector<float> yp;
sf::RenderWindow window(sf::VideoMode(900, 600), "SFML works!");
sf::CircleShape shape(75.f);
shape.setFillColor(sf::Color::Green);
Texture bullet;
bullet.loadFromFile("bullet.png");
shape.setPosition(400,100);
while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
    }
    if(Keyboard::isKeyPressed(Keyboard::Space)){
        Sprite bulletsp;
        bulletsp.setTexture(bullet);
        bulletsp.setScale(0.8,0.8);
        bullets.push_back(bulletsp);
        xp.push_back(shape.getPosition().x);
        yp.push_back(shape.getPosition().y);
    }
      for(int i=0;i<=bullets.size()-1;i=i){
        yp[i]=yp[i]+0.2;
        i++;
        bullets[i].setPosition(xp[i],yp[i]);
        window.draw(bullets[i]);
     }

    window.clear();
    window.draw(shape);
    window.display();
}

return 0;
}

2 个答案:

答案 0 :(得分:1)

您正在循环中增加i。因此,在最后一次迭代中,您将访问数组两端之外的地方。

您可能希望将循环声明中的i=i替换为i++,而不要在循环主体中递增i。

答案 1 :(得分:0)

由于for循环,您的程序无法运行:

<platform name="android">
    <config-file target="res/xml/config.xml" parent="/*">
      <feature name="QRScanner">
        <param name="android-package" value="com.bitpay.cordova.qrscanner.QRScanner"/>
      </feature>
    </config-file>
    <config-file target="AndroidManifest.xml" parent="/*">
      <!-- <uses-permission android:name="android.permission.CAMERA" android:required="false" />
      <uses-feature android:name="android.hardware.camera" android:required="false" />
      <uses-feature android:name="android.hardware.camera.front" android:required="false" /> -->
    </config-file>
    <source-file src="src/android/QRScanner.java" target-dir="src/com/bitpay/cordova/qrscanner"/>
    <framework src="src/android/qrscanner.gradle" custom="true" type="gradleReference"/>
  </platform>

其中for(int i=0;i<=bullets.size()-1;i=i) bullets.size()。当项目符号向量为空(size_t (unsigned int))时,条件size() = 0始终为true。您的程序进入for正文并崩溃(yp,xp,项目符号为空)。

您的编译器应该警告您有关此问题的地方吗?

您应该使用i=0 <= (unsigned int)(0 - 1)并重新编写您的正文代码,这样可以使您的代码保持整洁并避免问题的根源。