HGE引擎學習筆記1 如何模擬物理碰撞

2021-06-03 19:24:03 字數 1720 閱讀 1112

模擬物理碰撞要解決的幾個問題:

1.怎樣模擬速度的變化?

設定乙個摩擦係數friction(0

2.怎樣模擬碰撞?

每個時間片處理過程中,判斷物體的邊緣座標加上dx與dy後有沒有超過螢幕邊緣,如果超過,則採取一定的策略重新設定物體座標讓其在正常範圍內,如x軸超過,則對dx取反;如y軸超過,則對dy取反.計算好座標之後再進行繪圖.

windows sdk視窗對此過程的模擬(僅摹仿了速度和碰撞等,對聲音的相關處理貌似比較複雜,還沒搞清楚怎麼寫.由於是做個簡單demo,並沒有加入多執行緒等技術,所以程式裡的座標等資料的同步並不精準,上,下,左,右鍵最好是短暫地點一下即鬆開,連著按的話會出現速度的突兀變化):

/**

* file : collision.cpp

* 功能 : 模擬乙個小球在乙個封閉區域內的碰撞等活動

* 作者 : mzlogin ( )

* 宣告 : 版權沒有 盜版不究

*/#include float x = 100.0f; // 球的中心點x座標

float y = 100.0f; // 球的中心點y座標

float speed = 10.0f; // 球響應按鈕後的初始速度

float friction = 0.99f; // 球與地面的摩擦係數

float dx = 0.0f; // x軸增量

float dy = 0.0f; // y軸增量

lresult callback mainwndproc(hwnd, uint, wparam, lparam);

int winapi winmain(hinstance hinstance, hinstance hprevinstance, pstr szcmdline, int ncmdshow)

100,

100,

800,

600,

null,

null,

hinstance,

null

);showwindow( hwnd, ncmdshow );

while( getmessage( &msg, null, 0, 0 ) )

return msg.wparam;

}lresult callback mainwndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

break;

case wm_timer:

dx *= friction;

dy *= friction;

x += dx;

y += dy;

if (x > rect.right - nradius)

if (x < nradius)

if (y > rect.bottom - nradius)

if (y < nradius)

invalidaterect(hwnd, &rect, true);

break;

case wm_destroy:

killtimer(hwnd, 1);

deleteobject(hbrush);

postquitmessage(0);

return 0;

}return defwindowproc(hwnd, message, wparam, lparam);

}

HGE引擎學習筆記

1 framefunc 是每幀都將呼叫的函式,dt hge timer getdelta 則是一幀的持續時間,故跟dt有關的過程都受fps的影響。2 不可在framefunc 呼叫延時函式,如sleep 他將使程度停留在某一幀延時,改變fps。同樣renderfunc 也是每幀都會呼叫,不可在其中使...

PushButton引擎學習筆記1

1,理解pbe類。pbe類在pb引擎中就相當於我們程式中的main一樣,是一切pbe引起模組的起點。其下面的方法和屬性都是靜態的,一方面,pbe類作為引擎的啟動入口,另一方面,該類對引擎的各個模組有很好的組織作用,通過其靜態成員很好的管理著各個模組。如 inputmanager對按鍵等進行著監聽 l...

模擬電路學習筆記(1) 基本概念

1 半導體 導電性能位於可導電和不可導電之間,稱為半導體。常用的半導體 材料有矽。2 本徵半導體 純淨的半導體材料,沒有任何雜質的矽或者鍺等。其內部結構圖1,立體如圖2所示。圖 1 平面結構 圖 2 立體結構 本徵半導體受熱或者光照等外作用後,會讓內部電子逃離共價鍵,如圖3所示。圖 3 電子逃離共價...