Mam problem, po napisaniu kodu w c++ w bibliotece sfml i skompilowaniu go wyskakuje mi białe okno bez możliwości jego zamknięcia. Wielokrotnie szukałem błędu i poprawiałem kod ale bez skutku. Mam prośbę czy mógłby ktoś rzucić na niego okiem i mi powiedzieć co robię nie tak?
#include "stdafx.h"
#include <SFML\Graphics.hpp>
#include <math.h>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<ctime>
#include<sstream>
int main()
{
srand(time(NULL));
sf::ContextSettings settings;
settings.antialiasingLevel = 8;
sf::Font font;
std::srand(std::time(0)); //dekalrowanie liczb losowych
int random_variable = std::rand();
sf::RenderWindow window(sf::VideoMode(800, 600), "Armatka");//główne
float r=100;
sf::CircleShape kolo1(r);//kolo1 z obwodka
kolo1.setFillColor(sf::Color::Green);
kolo1.setOutlineThickness(-0.04*r);
kolo1.setOutlineColor(sf::Color::Red);
sf::CircleShape kolo2(30);//kolo2 z obwodka
kolo2.setFillColor(sf::Color::Yellow);
kolo2.setOutlineThickness(-0.04*r);
kolo2.setOutlineColor(sf::Color::Magenta);
//kwadrat
sf::RectangleShape rectangle(sf::Vector2f(1.5 * r, 0.4*r));
rectangle.setFillColor(sf::Color::Blue);
//określanie pozycji i rozmiaru kółek i prostokąta
kolo1.setOrigin(r, r);//ustawienie centrum obiektu
kolo1.setPosition(3 * r, 3 * r);
kolo2.setPosition(3 * r, 3 * r);
rectangle.setOrigin(0, 0.2*r);
rectangle.setPosition(3 * r, 3 * r);
const int x = 111;
sf::CircleShape kulki[x]; //tablica kulki
for (int z = 0; z < x; z++)
{
int a = (rand() % 25) + 10;
kulki[z].setRadius(a);
kulki[z].setOrigin(a, a);
int b = (rand() % 760) + 20;
int c = (rand() % 470) + 90;
while ((sqrt(((b - 3*r)*(b - 3*r)) + ((c - 3*r)*(c - 3*r)))) < (3*r))//tu zmieniamy odl kulek od promienia
{
b = (rand() % 710) + 20;
c = (rand() % 470) + 90;
}
kulki[z].setPosition(b, c);
kulki[z].setFillColor(sf::Color(rand() % 250 + 5, rand() % 250 + 5, rand() % 250 + 5));
kulki[z].setOutlineColor(sf::Color(rand() % 255+5, rand() % 255+5, rand() % 255+5));
kulki[z].setOutlineThickness(-2);
}
sf::Int16 xpos[x], ypos[x];// Sprawdzenie odleglosci od innych kulek
for (int z = 0; z < x; z++)
{
xpos[z] = rand() % 750;
ypos[z] = rand() % 470 + 30;
}
for (int z = 0; z < x; z++)
{
float dl = 0;
while (dl < rectangle.getSize().x)
{
int xt = xpos[z] + kulki[z].getRadius(), yt = ypos[z] + kulki[z].getRadius();
dl = pow((kolo1.getPosition().x - xt), 2);
dl += pow((kolo1.getPosition().y - yt), 2);
dl = sqrt(dl);
dl -= kulki[z].getRadius();
if (dl < rectangle.getSize().x)
{
xpos[z] = rand() % 750;
ypos[z] = rand() % 470 + 30;
}
}
float odleglosc = 0;
for (int c = 0; c < z; c++)
{
float rr = kulki[c].getRadius();
int xz = xpos[z] + kulki[z].getRadius(), xc = xpos[c] + kulki[c].getRadius(), yz = ypos[z] + kulki[z].getRadius(), yc = ypos[c] + kulki[c].getRadius();
rr += kulki[z].getRadius();
odleglosc = pow((xz - xc), 2);
odleglosc += pow((yc - yz), 2);
float rq;
rq = pow(rr, 2);
if (odleglosc < rq)
{
xpos[z] = rand() % 750;
ypos[z] = rand() % 470 + 30;
c = z;
z -= 1;
}
}
}
for (int z = 0; z < x; z++)
{
kulki[z].setPosition(xpos[z], ypos[z]);
}
sf::RectangleShape linia(sf::Vector2f(800, 1));//taka se linia
linia.setPosition(0, 40);
linia.setFillColor(sf::Color::Magenta);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
//window.setFramerateLimit(60);
window.clear();
window.draw(kolo1);//wyświetlenie
window.draw(rectangle);
window.draw(kolo2);
window.draw(linia);
for (int z = 0; z < x; z++)//wyświetlanie kółek w pętli
{
window.draw(kulki[z]);
}
window.display();
//ruch za myszką i celowanie
double dX = sf::Mouse::getPosition(window).x - rectangle.getPosition().x;
double dY = sf::Mouse::getPosition(window).y - rectangle.getPosition().y;
double rotation = atan2(dY, dX);
rotation *= 180 / 3.14;
rectangle.setRotation(rotation);//obracanie sie działa
}
return 0;
}