[回到版面]
回應模式
名 稱
內 文
附加圖檔[] []
  • 可附加圖檔類型:GIF, JPG, JPEG, PNG, WEBM,瀏覽器才能正常附加圖檔
  • 附加圖檔最大上傳資料量為 3072 KB。
  • 當檔案超過寬 125 像素、高 125 像素時會自動縮小尺寸顯示
  • 目前附加圖檔使用量大小: 193303 KB / 500000 KB
  • 回覆時程式碼縮排會被trim消掉,請善用[code][/code]標色或貼到ideone等網站
  • LaTeX記法可以用「$$」或「\( \)」包起來,例如「$\sum_{k=1}^{k=n} k^2 = \frac{n(n+1)(n+2)}{6}$」
  • 投稿時請點擊畫像認證後,再按下 [送出] 按鈕提交。
  • 鬧板、攻擊性發言、煽動性發言請無視(回應者也無視),並使用del或在貓管理部向管理員回報。
  • 新介面尚處於測試階段,如果有任何問題可以向管理員或於程設交流版反映。

檔名:1560689653000.png-(9 KB, 786x292)
9 KB
無題無名19/06/16(日)20:54:13 ID:3Ks4DxiMNo.13424del
想使用狀態機來控制人物
但不知道連點兩下的跑步該怎麼實現出來
按了方向鍵右會轉到WalkState,放掉會回到IdleState
不知道該怎麼設計才合理可以從IdleState或者WalkState進入到RunState
該用一些FLAG嗎? 要把變數記錄哪個地方?

麻煩島民給點想法 感恩


code大概是以下這樣 不知道該怎麼觸發到RunState
//IdleState&WalkState&RunState都是繼承StateMachine
void IdleState::input(KeysState key)
{
if (key == PRESSED)
{
switch (key)
{
case RIGHT:
{
//會把狀態機從IdleState替換成WalkState
break;
}
case LEFT:
{
//...
break;
}
}
}
else (key == RELEASED)
{
//...
}
}

void WalkState::input(KeysState key)
{
if (key == PRESSED)
{
//...
}
else (key == RELEASED)
{
//放掉方向鍵回到IdleState
}
}
無名19/06/16(日)22:14:33 ID:D/6EACHkNo.13425del
每次按下右鍵的時候記錄當下時間 (C++用clock())
並檢查上次記錄的時間是否與這次的時間距離很近
低於某個上限值就視為連點兩下,進行進入RunState的相關處理
無名19/06/16(日)22:45:56 ID:3Ks4DxiMNo.13426del
檔名:1560696356781.jpg-(439 KB, 1080x1920)
439 KB
>>13425
感謝意見

因為library的鍵盤資訊只會給到按下&彈起
所以可能還需要額外寫個物件 來處理keyboard更細節的資訊就是?

剛剛想到的是
void IdleState::input(KeysState key)
{
if (key.state == PRESSED && key.deltaTime < 0.1)
{
switch (key.code)
{
case RIGHT:
{
//會把狀態機從IdleState替換成RunState
}
}
//...
}


KeysState在原PO文中是原生library所給的資訊
可能會在追加一層處理鍵盤資訊 把原生資訊加工變成處理後的資訊
如果有怪怪的地方麻煩也請大家告訴我
無名19/06/17(一)09:11:05 ID:iS8zuijMNo.13427del
檔名:1560733865753.jpg-(182 KB, 800x500)
182 KB
void IdleState::input(KeysState key)
{
switch (key.code)
{
case RIGHT:
{
if (/*雙擊第二下判斷*/)
{
//會把狀態機從IdleState替換成RunState
}
else
{
/*單擊*/
}
}
}
//...
}

Switch內的邏輯處理要盡可能的獨立喔,這樣進一步抽出委派與抽象或介面會比較容易。
(像是由外部註冊RIGHT蘿擊處理)
無名19/06/17(一)15:22:14 ID:dSSJJR3INo.13428del
檔名:1560756134497.png-(11 KB, 786x398)
11 KB
除非你要做格鬥遊戲對按鍵順序有嚴格要求,
不然加個"滑行"的中間狀態就可以解決了,
加上"滑行"角色操作性跟流暢性也會變得比較好
原po19/06/17(一)19:41:59 ID:jPJzpBxoNo.13429del
檔名:1560771719267.jpg-(147 KB, 960x1280)
147 KB
>>13427
>>13428
好喔 多謝指點受教了
無名19/06/17(一)21:28:36 ID:ETRiUHxUNo.13431del
>>13428
這樣會有一個小問題是
如果你走了很長一段時間後,放開一瞬間又按回去
這不是「連按兩下」,但依你的邏輯會開始跑
無名19/06/18(二)03:06:05 ID:0yOdwwSYNo.13432del
>>13431
這樣反而是好事,否則每次都要求玩家快速連按來跑步很容易手指疼痛。
跑步這種常切換/使用的功能就應該盡量避免太複雜的操作要求,求短時間連點就是過度複雜了。
不過具體來說還是要看遊戲種類來設計。
無名19/06/18(二)11:02:46 ID:y8lb29CYNo.13433del
>>13432
該死的異塵餘生4wwwwwwww


【刪除文章】[]
刪除用密碼: