2009-06-01 8 views
0

Je lisais ce topic et j'ai décidé de tenter le coup. À mon grand étonnement, cela semblait vraiment plus facile que ce que je suis en train de faire. J'ai une certaine confusion au sujet de la variable "DesiredPos". Eh bien au moins dans ma mise en œuvre. J'essaye de déplacer une fenêtre constamment et de la faire réagir comme une balle quand elle touche les bords des moniteurs. Comme la balle dans le jeu Pong. J'ai fait des programmes comme celui-ci qui bougent la souris, mais je ne peux pas sembler tourner la tête autour de celui-ci.Simulation du mouvement d'une fenêtre et avoir réagi aux collisions

C'est ce que j'ai jusqu'à présent, j'ai une expérience limitée quand il s'agit d'un grand nombre de fonctions dans l'API Windows. Gardez à l'esprit que c'est un brouillon hardcore.

EDIT Je n'ai pas implémenté la détection de collision mais je voulais juste que la partie mobile fonctionne.

#include <windows.h> 
#include <math.h> 

int newX(int oldx); 
int newY(int oldy); 
double SmoothMoveELX(double x); 
int main() 
{ 

    int lengthInMs = 10*1000; 
    HWND notepad = FindWindow("Notepad",NULL); 
    RECT window; 
    SetTimer(
      notepad, 
      NULL, 
      30, 
      (TIMERPROC)NULL 
      ); 
    int startTime = GetTickCount(); 
    int pos = elap/lengthInMs; 


    while(1) 
    { 
      RECT window; 
      GetWindowRect(notepad,&window); 
      int elap = (GetTickCount() - startTime); 
      if(elap >= lengthInMs) 
      { 
        int NEWX = NewX(window.x); 
        int NEWY = NewY(window.y); 
        MoveWindow(
          notepad, 
          NEWX, 
          NEWY, 
          100, 
          100, 
          TRUE 
          ); 
          } 
          } 
} 

int NewX(int oldx) 
{ 
    int newx = oldx*(1-SmoothMoveELX(pos)) 
      + 10 *SmoothMoveELX(pos)); 

    return newx; 
} 

int newY(int oldy) 
{ 
    int newy = oldy*(1-SmoothMoveELX(pos)) 
      + 10 *SmoothMoveELX(pos)); 
    return newy; 
} 

double SmoothMoveELX(double x) 
{ 
     double PI = Atan(1) * 4; 
     return ((cos(1 - x) * PI + 1) /2) 
} 
+3

Alors, quelle est votre question? – Blorgbeard

Répondre

1

Mon conseil est de jeter un oeil sur "l'intégration verlet". C'est un moyen assez simple de simuler la mécanique de base. Google pour cela et vous trouverez de nombreux exemples pour cela, y compris la détection des collisions et la friction. Sur le long terme, cela vous donnera plus de résultats natruels, puis d'estimer la vitesse ou la nouvelle position avec une fonction sinusoïdale.

Questions connexes