[問題] 摩擦力一問

看板C_and_CPP作者 (會彈吉他屌屁)時間14年前 (2010/06/24 21:59), 編輯推噓3(3013)
留言16則, 8人參與, 最新討論串1/1
遇到的問題:想要寫個推酒杯的小遊戲,但要讓杯子停住 勢必要寫到摩擦力....但是已經卡了兩天了還是沒有辦法寫出來, 目前先寫到偵測按下空白鍵時有往右的速度,讓酒杯移動,同時在 WndProc函式裡寫每次執行的時候speed會扣掉摩擦力,但每次都沒 有辦法像真正酒杯滑行的感覺。 希望得到的正確結果:希望能夠流暢的產生移動,然後速度減慢的效果。 程式跑出來的錯誤結果:一開始還是有speed,頓一下之後又跑一次, 就停止了。 開發平台: DirectX 有問題的code: (請善用置底文標色功能) // // WndProc // LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if(speed >= 0) { speed -= f; //speed每次都會扣掉摩擦力f。 cupx += speed; //杯子的位移。 } switch( msg ) { case WM_DESTROY: ::PostQuitMessage(0); break; case WM_KEYDOWN: if( wParam == VK_ESCAPE ) ::DestroyWindow(hwnd); switch( wParam ) { case VK_SPACE: speed=2; break; } } return ::DefWindowProc(hwnd, msg, wParam, lParam); } 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 192.192.154.48

06/24 22:06, , 1F
這應該是物理模擬錯誤 XDrz
06/24 22:06, 1F

06/24 22:08, , 2F
所以......錯得很深嗎=_=
06/24 22:08, 2F

06/24 22:27, , 3F
位置為時間的函數,那就要跟現實的時間作連結。
06/24 22:27, 3F

06/24 23:18, , 4F
國中物理 x = v*t + a*t*t/2
06/24 23:18, 4F

06/25 00:15, , 5F
寫物理的東西就要有timestep的概念
06/25 00:15, 5F

06/25 05:38, , 6F
先把力學弄懂再來唄~
06/25 05:38, 6F

06/25 10:50, , 7F
其實單看原 po 的 logic 也不是那麼錯. 假設每次執行都
06/25 10:50, 7F

06/25 10:51, , 8F
是一單位時間, 摩擦力其實是逆向的加速, 即是每一單位
06/25 10:51, 8F

06/25 10:52, , 9F
時間對速度作等量的改變 (speed -= f), 而速度就是每一
06/25 10:52, 9F

06/25 10:54, , 10F
單位時間對位置的等量改變 (cupx += speed). 所以理論
06/25 10:54, 10F

06/25 10:55, , 11F
上模擬不是那麼錯 (前題是每一單位時間相對於 speed
06/25 10:55, 11F

06/25 10:56, , 12F
和 f 不是那麼大, 舉個例就是如果每一單位時間等同一分
06/25 10:56, 12F

06/25 10:56, , 13F
鐘, 但你的速度是 10 m/s , 加速是 -1m/s, 那麼一個單
06/25 10:56, 13F

06/25 10:57, , 14F
位時間內就由有速度變靜止了, 就算只有兩三個單位時間,
06/25 10:57, 14F

06/25 10:57, , 15F
看上去也一樣會很不流暢)
06/25 10:57, 15F

06/25 12:31, , 16F
試試WM_TIMER //要先建立一個計時器
06/25 12:31, 16F
文章代碼(AID): #1C8sJC66 (C_and_CPP)