キー入力奮闘記
投稿者: 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