2009-06-01 9 views
0

私はこれを読んでいたtopicと私はそれを打つことにしました。私の驚きには、私が思っているよりも簡単に思えた。私は "DesiredPos"変数についていくらか混乱しています。私の実装では少なくとも。私は常に窓を動かそうとしていて、モニターの端に当たるとボールのように反応します。ゲームのポンのボールのように。私はマウスを動かすこのようなプログラムを作ったが、私はこの1つの周りに頭を抱えるように見えない。ウィンドウの動きをシミュレートして衝突に反応する

これは、Windows APIの関数の多くに来るとき、私はこれまでのところ、私は経験が限られているものです。これはハードコアの大まかなドラフトです。

EDIT 私はまだ衝突検出のいずれかを実装していない私はちょうど移動する部分が働いて取得したいです。

#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

あなたの質問は何ですか? – Blorgbeard

答えて

1

私のアドバイスは、 "verlet integration"を見てみることです。基本的な力学をシミュレートするのは非常に簡単な方法です。 Googleのために、あなたは衝突検出と摩擦を含む多くの例を見つけるでしょう。長期的にはこれは、速度や正弦関数を使用して新しい位置を推定その後、あなたに多くのnatrual結果が得られます。

関連する問題