Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anonimo12121 en 12 Mayo 2012, 17:32 pm



Título: [C++ Game][Aporte] Física gravedad y salto.
Publicado por: anonimo12121 en 12 Mayo 2012, 17:32 pm
Bueno os pongo mi código de física para juegos de gravedad y salto.
Recordad que un objeto cae a 9,81 m/s  en la tierra por su gravedad. hecho un sistema parecido cambiado un poco la realidad XD

Y el sistema de salto lo he hecho parecido pero invertido.
VIDEO: HD

vIc5_asdCfQ
fisica.hpp
Código
  1. #ifndef _FISICAHPP_
  2. #define _FISICAHPP_
  3. using namespace std;
  4. #include "fisica.hpp"
  5. class Gravedad {
  6.    private:
  7.        float Intensidad;
  8.        float Fuerza;
  9.        float Tiempo;
  10.    public:
  11.        Gravedad();
  12.        bool State(float fps);
  13.        float GetFuerza();
  14.        void Reset();
  15. };
  16.  
  17. class Salto {
  18.    private:
  19.        float Intensidad;
  20.        float Fuerza;
  21.        float Tiempo;
  22.    public:
  23.        Salto();
  24.        bool State(float fps);
  25.        float GetFuerza();
  26.        void Reset();
  27. };
  28. #endif]

fisica.cpp
Código
  1. #include "fisica.hpp"
  2. Gravedad::Gravedad(){
  3.    Intensidad=2.98;
  4.    Fuerza=2.98;
  5. }
  6. bool Gravedad::State(float fps){
  7.    Tiempo = Tiempo+(1000/fps);
  8.    if(Tiempo>100){
  9.        Tiempo=0;
  10.        Fuerza=Fuerza+Intensidad;
  11.        return true;
  12.    }
  13.    return false;
  14. }
  15. float Gravedad::GetFuerza(){
  16.    return Fuerza;
  17. }
  18. void Gravedad::Reset(){
  19.    Fuerza=0;
  20. }
  21.  
  22.  
  23.  
  24. Salto::Salto(){
  25.    Intensidad=2.98;
  26.    Fuerza=12;
  27. }
  28. bool Salto::State(float fps){
  29.    Tiempo = Tiempo+(1000/fps);
  30.    if(Tiempo>100){
  31.        Tiempo=0;
  32.        Fuerza=Fuerza-Intensidad;
  33.        if(Fuerza<0)Fuerza=0;
  34.        return true;
  35.    }
  36.    return false;
  37. }
  38. float Salto::GetFuerza(){
  39.    return Fuerza;
  40. }
  41. void Salto::Reset(){
  42.    Fuerza=12;
  43. }


Título: Re: [C++ Game][Aporte] Física gravedad y salto.
Publicado por: david_BS en 12 Mayo 2012, 19:21 pm
Buena, pero acordate que en los juegos online, hay una diferencia entre las frames (FPS) del cliente con las del server, es decir, para juegos como el Counter-Strike 1.5/1.6 por ejemplo, no sería un cálculo muy preciso si hacés algo que depende del servidor.

Esto lo digo si estás usando un hack para un juego online, pero si se trata de algo que sirve sólo del lado cliente está muy bien que uses las frames del cliente.


Título: Re: [C++ Game][Aporte] Física gravedad y salto.
Publicado por: anonimo12121 en 12 Mayo 2012, 20:09 pm
Cuando haga modos online, haré una aplicación que sera servidor y el servidor hará todo solo mandara información al cliente. El cliente solo mandará información al servidor del tipo de tecla que se ha pulsado y esas cosas. Creo que se debe hacer así si me das más información lo agradecería.

Gracias por comentar. :)


Título: Re: [C++ Game][Aporte] Física gravedad y salto.
Publicado por: david_BS en 12 Mayo 2012, 20:33 pm
Cuando haga modos online, haré una aplicación que sera servidor y el servidor hará todo solo mandara información al cliente. El cliente solo mandará información al servidor del tipo de tecla que se ha pulsado y esas cosas. Creo que se debe hacer así si me das más información lo agradecería.

Gracias por comentar. :)

claro, el servidor es el que maneja el juego y valida los datos y los envía al cliente para que el cliente pueda continuar el juego. El cliente presiona una tecla pero envía al server ese evento y el servidor determina que va a hacerse, cuando ya ha evaluado la situación envía los resultados al cliente para que el cliente pueda realizar esas acciones. Es obvio que en esta comunicación hay una diferencia de tiempo por lo que debes usar predicción+interpolación (http://es.wikipedia.org/wiki/Interpolaci%C3%B3n) para compensar los datos de la predicción por un lado o los datos que se pierdan durante la comunicación (paquetes perdidos por problemas de conexión).

te recomiendo que veas algún motor gráfico o una sdk de algún juego moderno (no me refiero a un juego nuevo sino a un motor más o menos moderno), por ejemplo quake3 o Counter-Strike Source , para notar como se maneja todo esto que te había comentado








Título: Re: [C++ Game][Aporte] Física gravedad y salto.
Publicado por: anonimo12121 en 12 Mayo 2012, 20:42 pm
Gracias. El link a la wiki muy original ehh!! xD, me podrías decir donde mirar lo del counter? Saludos.


Título: Re: [C++ Game][Aporte] Física gravedad y salto.
Publicado por: david_BS en 12 Mayo 2012, 20:52 pm
pongo varios links interesantes, en verdad yo lo único que hice para CSS fueron hacks pero para pruebas personales, pero hace tiempo.. te recomiendo que consigas la sdk del Half-Life 2 si estás interesado en el Counter-Strike Source

https://developer.valvesoftware.com/wiki/SDK_Docs
http://counterstrike.wikia.com/wiki/GoldSrc_(game_engine)
http://forums.bots-united.com/forumdisplay.php?f=62
http://halflife2.filefront.com/news/Source_SDK_Base_Orange_Box_Released;37435
http://source.valvesoftware.com/
http://www.fileplanet.com/81538/80000/fileinfo/Full-Half-Life-SDK-2.3-(source-only)
http://www.gamedeception.net/threads/10613-Compiling-HL2-SDK-in-VS-2005

con referencia al tema hablando antes
https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization
http://en.wikipedia.org/wiki/Lag_(online_gaming)
https://developer.valvesoftware.com/wiki/NPC_Lag_Compensation
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
https://developer.valvesoftware.com/wiki/Lag_compensation
http://counterstrike.wikia.com/wiki/GoldSrc_(game_engine)



Título: Re: [C++ Game][Aporte] Física gravedad y salto.
Publicado por: anonimo12121 en 12 Mayo 2012, 21:47 pm
No es que este todavía interesado pero me gusta almacenar info :)