キー入力奮闘記
投稿者:
naoki4019
投稿日:2017/01/28 00:20
startInput() #キー入力の開始!
setMenuOpenKeyEnable(false) #XorCキーでメニューとか開かせないよ?
a = true
while a #さぁループ開始だァ!
takeInput() #必要らしい
if isKeyDown("DOWN") #↓を押すと
b = true
while b #ループが作動
if isKeyUp("DOWN") #↓を離すと
b = false #ループ脱出
end
x = getPlayerPosX()-16
y = getPlayerPosY()-16
xx = x/32
yy = y/32
warpEvent("playerCharacterEvent",xx ,yy +0.1) #↓を離さない限り下にちまちまと移動
waitTime(10)
end
elsif isKeyDown("Z") #Zを押すと
a = false #おしまい
end
waitTime(30) #いれないとダメでした
end
endInput() #キー入力おしまーい
setMenuOpenKeyEnable(true) #メニュー開いていいよん
今適当に組んでるスクリプトがこれ、でも想像通りに動かないんですよね
キー入力を始めるドン ←━━←━━←━━←━━←━┓ ┃ ┃ ┣↓ボタンを押したッ! ┃ ┃┃ ↑ ┃┏ここでループ作動ッ!━━━━━━━━━━━━━┓ ┃ ┃┃ ┃ ┃ ┃┣↓ボタンを離さない限り下に進み続ける・・・ッ!┛ ↑ ┃┃ ┃ ┃┗↓ボタン離したらやめるぜ━━→━━→━━→━━→━┛ ┃ ┗Zボタンを押したッ! ┃ ┏━┛ キー入力おしまい
が理想(´・ω・`)
やだ・・・わかりにくい・・・
フローチャートか何かよくわかんない謎の表(´・ω・`)
上スクリプト、実際にやってみると↓を押したら最後、↓を離そうが何しようが下に進み続けます、詰みです
startInput()
a = true
while a
takeInput()
if isKeyDown("DOWN")
speak("↓を押した")
elsif isKeyUp("DOWN")
speak("↓を離した")
elsif isKeyDown("Z")
a = false
end
waitTime(30)
end
setText(getVariable("テキスト1"),
"")
deleteText(getVariable("テキスト1"))
endInput()
ちょっと簡略化したスクリプトにて実験、speakでスクリプト中断中に離しても応答なし(当たり前)、
中断中に押しなおしてからspeak閉じて離すと離した判定
要するに入力受付してる期間中は何をしようが「押す前に離す(入力受付前に押しておく)」と
isKeyUpが作動するらしいっすね(´・ω・`)
・・・あ!
startInput()
setMenuOpenKeyEnable(false)
a = true
while a
takeInput()
if isKeyDown("DOWN")
b = true
while b
takeInput() #\ヒャッハァァァァァァァァァァァァァァァァァァァァァァァ/←←←←←←←←←←←←←←←←
if isKeyUp("DOWN")
b = false
end
x = getPlayerPosX()-16
y = getPlayerPosY()-16
xx = x/32
yy = y/32
warpEvent("playerCharacterEvent",xx ,yy +0.1)
waitTime(10)
end
elsif isKeyDown("Z")
a = false
end
waitTime(30)
end
endInput()
setMenuOpenKeyEnable(true)
うん、間違いなくこれだね原因
よっし、無事に動いた、あとはwaitTimeとwarpEventの追加量を調整すれば
普段の移動と変わらない移動システムが実現できるかもしれない・・・!!
これの何がいいってしっかり移動もできる上に好きなキーに好きなコマンドを当てれるってのと
waitTimeを利用して時間制限がつけれるってのがいいね、自由度が増している_(:3 」∠)_
【追記】
これ斜め移動できないねぇ、まだ工夫が必要や(´・ω・`)
・・・というように普段スクリプトをまったり見ています、リアルタイムで考えながらブログ書くの楽しい(´・ω・`)
さて、明日ついにメンテですね、運営のみなさん頑張ってください!(ノシ´・ω・`)ノシ バンバン
で結局誰得なん?このブログ
コメントする
コメントするには、ログインする必要があります。
コメント一覧
キーの入力状態をフラグで管理すると
全体が見やすくなり
同時入力などもスムーズに
判別処理することが出来ます
全体が見やすくなり
同時入力などもスムーズに
判別処理することが出来ます
setMenuOpenKeyEnable(false)
startInput()
#フラグの準備
key_flg_u = false
key_flg_d = false
key_flg_l = false
key_flg_r = false
key_flg_z = false
key_flg_x = false
key_flg_c = false
loop = true
while loop
while hasInput()
takeInput()
#----- キー入力の判定 -----
if isKeyDown("UP")
key_flg_u = true
elsif isKeyUp("UP")
key_flg_u = false
elsif isKeyDown("DOWN")
key_flg_d = true
elsif isKeyUp("DOWN")
key_flg_d = false
elsif isKeyDown("LEFT")
key_flg_l = true
elsif isKeyUp("LEFT")
key_flg_l = false
elsif isKeyDown("RIGHT")
key_flg_r = true
elsif isKeyUp("RIGHT")
key_flg_r = false
elsif isKeyDown("Z")
key_flg_z = true
elsif isKeyUp("Z")
key_flg_z = false
elsif isKeyDown("X")
key_flg_x = true
elsif isKeyUp("X")
key_flg_x = false
elsif isKeyDown("C")
key_flg_c = true
elsif isKeyUp("C")
key_flg_c = false
end
end
#----- キー入力に対応した動作処理 -----
if key_flg_u
y = getPlayerPosY() - 16
end
if key_flg_d
y = getPlayerPosY() + 16
end
if key_flg_l
x = getPlayerPosX() - 16
end
if key_flg_r
x = getPlayerPosX() + 16
end
if key_flg_z
loop = false
end
#----- 位置変更の実行 -----
xx = x/32
yy = y/32
warpEvent("playerCharacterEvent",xx ,yy +0.1)
#待ち時間
waitTime(10)
end
endInput()
setMenuOpenKeyEnable(true)
(該当キー押している分だけ数値を増やしたり減らす)
それに自分で設定したスピード値をかけて、
できた値をプレイヤーのポジションとしてワープさせたらどうでしょう?
プレイヤーを透明イベントにして
アニメーションを描画すると制止アニメ、斜め移動アニメや
攻撃アニメその他コマンドアニメなどもできるようになるかもですね
キー入力は簸川さんの説明がシンプルで管理しやすいと思います
追加で、cfm_さんのキー入力を一行で取得する関数
これ手っ取り早くて好きなんで紹介しておきますね('ω'っ)3
確かにそれなら自分(透明化)にNPCを重ねることでいろんなアニメーションが再現できる・・・
ということはこれ擬似的にプレイヤーキャラクターを2人にして切り替えながら進むとか
2人操作してスイッチを2個同時に踏むとかもできるわけで・・・!
キー入力のも参考にさせていただきます、ありがとうございます!(´ω` つ )3