Dev - C++ - Movimiento de sprite en sfml

 
Vista:
Imágen de perfil de Jean Pierre
Val: 169
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Movimiento de sprite en sfml

Publicado por Jean Pierre (45 intervenciones) el 09/02/2019 05:08:09
quiero mover un sprite por teclado pero si por ejemplo mantengo D para que se mueva para la derecha tengo que mantenerla unos segundos presionados para que se mueva el sprite



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
 
int main()
{
	sf::Event evento;
	bool running=true;
 
    sf::RenderWindow window(sf::VideoMode(780, 640), "x");
	window.setFramerateLimit(60);
 
	sf::Texture t_nave;
	sf::Sprite nave;
 
	t_nave.loadFromFile("nave.png");
	nave.setTexture(t_nave);
 
 	sf::Clock clock;
	float speed = 600.f;
 
	while(running)
	{
 
		float delta = clock.restart().asSeconds();
 
		while(window.pollEvent(evento)){
			if(evento.type == sf::Event::Closed){
				window.close();
				running=false;
			}
 
			if(evento.type == sf::Event::KeyPressed && sf::Keyboard::isKeyPressed(sf::Keyboard::D)){
				nave.move(speed * delta, 0);
			}
 
		}
 
        window.clear();
 
		window.draw(nave);
 
        window.display();
 
	}
 
    return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 505
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Movimiento de sprite en sfml

Publicado por Thanatos (184 intervenciones) el 09/02/2019 09:53:51
Esta es una manera de lograr que el movimiento sea más fluido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <SFML/Graphics.hpp>
 
int main() {
    sf::RenderWindow ventana(sf::VideoMode(780, 640), "x");
	ventana.setFramerateLimit(60);
 
	sf::Texture tNave;
	tNave.loadFromFile("nave.png");
 
	sf::Sprite nave(tNave);
 
    sf::Time tiempo = sf::seconds(1.0f);
    sf::Vector2f velocidad;
    float rapidez = 0.2f;
 
	while (ventana.isOpen()) {
        sf::Event evento;
 
		while (ventana.pollEvent(evento)) {
			if (evento.type == sf::Event::EventType::Closed) {
				ventana.close();
			}
		}
 
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) {
            velocidad.x -= rapidez;
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) {
            velocidad.x += rapidez;
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) {
            velocidad.y -= rapidez;
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) {
            velocidad.y += rapidez;
        }
 
        nave.move(velocidad * tiempo.asSeconds());
 
        ventana.clear();
		ventana.draw(nave);
        ventana.display();
	}
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Movimiento de sprite en sfml

Publicado por Tom (54 intervenciones) el 09/02/2019 21:33:24
Generalmente el sistema no comienza a enviar pulsaciones repetidas hasta que no pasa un cierto tiempo. Busca cómo configurar ese tiempo en tu S.O.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jean Pierre
Val: 169
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Movimiento de sprite en sfml

Publicado por Jean Pierre (45 intervenciones) el 10/02/2019 04:15:14
Ya lo solucione solo era quitar esa condicional del bucle de eventos y ponerlo en el bucle principal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar