Salut à tous,
J'essaie, en vain, de faire en sorte que lorsque je clique sur le bouton gauche de ma souris, un projectile Circleshape se crée dans un vector qui contient l'angle du tireur ( donc le tireur étant mon "personnage" qui est une flèche rouge qui pointe en fonction de la position de ma souris ).
Ensuite, j'essaie de faire en sorte que le projectile s'oriente en direction de là où j'ai cliqué..
Les positions de mes projectiles sont assez incohérentes et j'aimerais avoir un coup de main afin de mettre en oeuvre un système fonctionnel..
Ici mon code, en vous remerciant GRANDEMENT d'avance :
#include <SFML/Graphics.hpp>
#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
using namespace sf;
int main()
{
RenderWindow win(VideoMode(800,600),"SFML Rotation Test", Style::Titlebar);
win.setFramerateLimit(60);
Vector2f triPosition(20,20);
Vector2f mousePosition;
Vector2f diff;
float angle = 0;
CircleShape triangle(15,3);
triangle.setPosition(triPosition);
triangle.setFillColor(Color::Red);
triangle.setOrigin(10,10);
vector<CircleShape>bullet;
Clock clock;
while (win.isOpen())
{
triPosition.x = triangle.getPosition().x;
triPosition.y = triangle.getPosition().y;
mousePosition.x = Mouse::getPosition(win).x;
mousePosition.y = Mouse::getPosition(win).y;
diff.x = triPosition.x - mousePosition.x;
diff.y = triPosition.y - mousePosition.y;
Event event;
while (win.pollEvent(event))
{
switch (event.type)
{
case Event::Closed:
win.close();
break;
}
}
if (Keyboard::isKeyPressed(Keyboard::Z))
triPosition.y -= 2;
if (Keyboard::isKeyPressed(Keyboard::S))
triPosition.y += 2;
if (Keyboard::isKeyPressed(Keyboard::Q))
triPosition.x -= 2;
if (Keyboard::isKeyPressed(Keyboard::D))
triPosition.x += 2;
if (Mouse::isButtonPressed(Mouse::Left) & clock.getElapsedTime().asMilliseconds()>200)
{
CircleShape bul(15,3);
bul.setOrigin(10,10);
bul.setFillColor(Color::Green);
bul.setPosition(triPosition.x, triPosition.y);
float tAngle = atan2(bul.getPosition().y - mousePosition.y,
bul.getPosition().x - mousePosition.x) * 180 / 3.14159265359;
bul.setRotation(tAngle);
bullet.push_back(bul);
clock.restart();
}
if (Keyboard::isKeyPressed(Keyboard::Escape))
win.close();
angle = atan2(diff.y, diff. x) * 180 / 3.14159265359;
cout << " angle : " << angle << endl;
triangle.setRotation(angle+45);
triangle.setPosition(triPosition.x, triPosition.y);
win.clear();
if (bullet.size()>0)
{
cout << "Bullet Size : " << bullet.size() << endl;
for (int i = 0 ; i < bullet.size() ; i++)
{
float angBul = bullet[i].getRotation() * 180 / 3.14 ;
bullet[i].move(cos(angBul) * 4, -sin(angBul) * 4);
win.draw(bullet[i]);
if (bullet[i].getPosition().x < 0 || bullet[i].getPosition().x > 800 ||
bullet[i].getPosition().y < 0 || bullet[i].getPosition().y > 600)
{
bullet.erase(bullet.begin()+i);
}
}
}
win.draw(triangle);
win.draw(triangle);
win.display();
}
}