[過去ログ] Delphiゲームプログラミング相談室 (976レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
114
(4): 名前は開発中のものです。 [] 02/04/29 20:03 ID:RsIpxpAM(1) AAS
便乗質問age
強制イベント(NPCが動く、など)の最中にキーボードを押すと
イベント終了時にさっき押した分だけキャラが動いてしまいます
FormKeyDownで処理しているんですが、この入力待機分のKeyを
クリア(?)するにはどうしたらいいんでしょうか?
DirectInputはごめんなさい
115
(1): 名前は開発中のものです。 [sage] 02/04/29 20:51 ID:??? AAS
>>114
強制イベント終了後、バッファが空になるまで読む。
116
(1): 名前は開発中のものです。 [] 02/04/29 20:57 ID:x6016wxY(2/2) AAS
>>114
どういう組み方をしているのか教えてくれ。
バッファのクリアよりも、根本的に
バッファにたまった分をイベント後に処理しないような組み方にした方が良いと思われ。
むしろ、動くようにする方が難しいと思うのだが。
117: 114 [] 02/04/30 10:00 ID:Y2Rh.VqQ(1) AAS
>>115
ごめんなさい。ど素人なんでそのやり方がわかりません。

>>116
まずグローバル変数「State:Integer」を定義します。
それでFormKeyDown手続きの中で
case State ofでState別に処理します
(ここでは0を通常状態,1を強制イベントと仮定)。
自キャラが自由に動くState=0の時に適当な行動を取ると
TTimerがオン、State:=1になります。
この時(State=1)のキーダウン手続きのcase文の中身はなにもありません。
そしてTTimerを使ってNPCを動かし終わると
TTimer文の最後でState:=0に戻すという組み方です。
このTTimerが作動している時(State=1)にキーをいろいろ押すと
State=0に戻った瞬間に自キャラが一気に動いたりして困ってます。
State=1の状態ではキーの入力による処理は何もないはずなんですが(?)。
分かりにくい文章ですが助言お願いします。
120: 114 [sage] 02/04/30 21:17 ID:??? AAS
>>118
118(1): 名前は開発中のものです。 [sage] 02/04/30 10:11 ID:??? AAS
115が理解できないと思った俺の予想が的中した。

なんだか面倒なことをやっているようだが、
FormKeyDownでは押されたキーのフラグを立てるだけにして、
メインルーチン(例えば始終動いているTimer)で、
フラグが立っていたら○○するというようにした方がいいよ。

まあ、そこまでくるとFormKeyDownなど使う必要はなく、
メインルーチン側でGetAsyncKeyStateやDirectInput等で
逐一キーの状態を見るのがよいのだが。
Timerのほうで試してみたんですが、どうもダメなようでした。
やっぱりGetAsyncKeyStateぐらい知らないといけませんね。
これからそれを勉強してみます。ありがとうございました。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s