elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / [SFML] Alguien me ayuda con los movimientos del personaje?? en: 25 Mayo 2022, 10:33 am
Hola mi duda es la siguiente este es un fragmento de mi código

Código
  1. void jugador::movimientos_jugador()
  2. {
  3. if(Keyboard::isKeyPressed(Keyboard::W)){
  4. spr_jugador.move(0, -0.5);
  5. y = 3;
  6. if(x<3)++x;
  7. else x = 0;
  8. }
  9. if(Keyboard::isKeyPressed(Keyboard::S)){
  10. spr_jugador.move(0, 0.5);
  11. y = 0;
  12. if(x<3)++x;
  13. else x = 0;
  14. }
  15. if(Keyboard::isKeyPressed(Keyboard::A)){
  16. spr_jugador.move(-1, 0);
  17. y = 1;
  18. if(x<3)++x;
  19. else x = 0;
  20. }
  21. if(Keyboard::isKeyPressed(Keyboard::D)){
  22. spr_jugador.move(1, 0);
  23. y = 2;
  24. if(x<3)++x;
  25. else x = 0;
  26. }
  27. }

Los valores de x e y son para ir movimiento el sprite luego... Mi duda es como puedo hacer que los sean mas realistas y no tan vectoriales con el move, que cálculos debería realizar...

Otra cosa que me gustaría y es que mi personaje tenga la habilidad de saltar este movimiento como se realiza, ya que, también va a poseer gravedad...

Acepto todo tipo de recomendaciones, tampoco tengo problema en reunirme y enseñar el código completo!
2  Programación / Programación C/C++ / Función para colisiones - c++ /SFML en: 17 Febrero 2022, 21:06 pm
Hola estoy teniendo un problema para poder hacer que varios rectángulos colisiones con el jugador para armar una especie de laberinto, este es el código de la función que quiero hacer:

Código
  1. void intersecciona(RectangleShape jugador, RectangleShape pared) {
  2.  
  3. FloatRect jug = jugador.getGlobalBounds();
  4. FloatRect pare = pared.getGlobalBounds();
  5.  
  6. if(jug.intersects(pare)){
  7.  
  8. if(jugador.getPosition().x<pared.getPosition().x)
  9. jugador.setPosition(jugador.getPosition().x-10, jugador.getPosition().y);
  10.  
  11. if(jugador.getPosition().x>pared.getPosition().x)
  12. jugador.setPosition(jugador.getPosition().x+10, jugador.getPosition().y);
  13.  
  14. if(jugador.getPosition().y<pared.getPosition().y)
  15. jugador.setPosition(jugador.getPosition().x, jugador.getPosition().y-10);
  16.  
  17. if(jugador.getPosition().y>pared.getPosition().y)
  18. jugador.setPosition(jugador.getPosition().x, jugador.getPosition().y+10);
  19. }
  20.  
  21. }

El programa asi funciona para una pared, pero seria incorrecto hacer los if para cada pared:

Código
  1. #include <SFML/Graphics.hpp>
  2. #include <iostream>
  3.  
  4. using namespace sf;
  5. using namespace std;
  6.  
  7. int main(){
  8. //Creamos la ventana
  9. RenderWindow window(sf::VideoMode(800, 600), "LABERINTO XD");
  10.  
  11. //Rectangualo
  12. RectangleShape rec(Vector2f(40, 40));
  13. rec.setFillColor(Color::Cyan);
  14.  
  15. //rec2es
  16. RectangleShape rec2(Vector2f(50, 300));
  17. rec2.setFillColor(Color::Magenta);
  18. rec2.setPosition(400, 300);
  19.  
  20. RectangleShape rec20(Vector2f(50, 230));
  21. rec20.setFillColor(Color::Magenta);
  22. rec20.setPosition(400, 0);
  23.  
  24. RectangleShape rec3(Vector2f(50, 500));
  25. rec3.setFillColor(Color::Magenta);
  26. rec3.setPosition(300,0);
  27.  
  28. RectangleShape rec4(Vector2f(50, 350));
  29. rec4.setFillColor(Color::Magenta);
  30. rec4.setPosition(200, 250);
  31.  
  32. RectangleShape rec5(Vector2f(50, 150));
  33. rec5.setFillColor(Color::Magenta);
  34. rec5.setPosition(1000, 100);
  35.  
  36. window.setFramerateLimit(120);
  37.  
  38. //Si la ventana está abierta
  39. while(window.isOpen()){
  40. //Creamos un evento
  41. Event ventana;
  42. //Llamamos a los eventos
  43. while(window.pollEvent(ventana)){
  44. //Cerramos la ventana cuando se solicite
  45. if(ventana.type == Event::Closed){
  46. window.close();
  47. }
  48. }
  49.  
  50. //Movimiento rectangulo
  51. if(Keyboard::isKeyPressed(Keyboard::Up)){
  52. rec.move(0, -1);
  53. }
  54. if(Keyboard::isKeyPressed(Keyboard::Down)){
  55. rec.move(0, 1);
  56. }
  57. if(Keyboard::isKeyPressed(Keyboard::Left)){
  58. rec.move(-1, 0);
  59. }
  60. if(Keyboard::isKeyPressed(Keyboard::Right)){
  61. rec.move(1, 0);
  62. }
  63.  
  64. //Colisiones
  65. if(rec.getPosition().x<0){
  66. rec.setPosition(0, rec.getPosition().y);
  67. }
  68. if(rec.getPosition().x>750){
  69. rec.setPosition(750, rec.getPosition().y);
  70. }
  71. if(rec.getPosition().y<0){
  72. rec.setPosition(rec.getPosition().x, 0);
  73. }
  74. if(rec.getPosition().y>550){
  75. rec.setPosition(rec.getPosition().x, 550);
  76. }
  77.  
  78. FloatRect rect = rec.getGlobalBounds();
  79. FloatRect rect2 = rec2.getGlobalBounds();
  80. FloatRect rect3 = rec3.getGlobalBounds();
  81. FloatRect rect4 = rec4.getGlobalBounds();
  82. FloatRect rect5 = rec5.getGlobalBounds();
  83.  
  84. if(rect.intersects(rect2)){
  85.  
  86. if(rec.getPosition().x<rec2.getPosition().x)
  87. rec.setPosition(rec.getPosition().x-10, rec.getPosition().y);
  88.  
  89. if(rec.getPosition().x>rec2.getPosition().x)
  90. rec.setPosition(rec.getPosition().x+10, rec.getPosition().y);
  91.  
  92. if(rec.getPosition().y<rec2.getPosition().y)
  93. rec.setPosition(rec.getPosition().x, rec.getPosition().y-10);
  94.  
  95. if(rec.getPosition().y>rec2.getPosition().y)
  96. rec.setPosition(rec.getPosition().x, rec.getPosition().y+10);
  97. }
  98.  
  99. //Limpiamos ventana
  100. window.clear();
  101.  
  102. //Dibujamos el rectangulo
  103. window.draw(rec);
  104. window.draw(rec2);
  105. window.draw(rec20);
  106. window.draw(rec3);
  107. window.draw(rec4);
  108. window.draw(rec5);
  109.  
  110. //Actualizamos ventana
  111. window.display();
  112.  
  113. }
  114. }
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines