キー入力奮闘記

投稿者:           mini 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 」∠)_

【追記】
これ斜め移動できないねぇ、まだ工夫が必要や(´・ω・`)




・・・というように普段スクリプトをまったり見ています、リアルタイムで考えながらブログ書くの楽しい(´・ω・`)




さて、明日ついにメンテですね、運営のみなさん頑張ってください!(ノシ´・ω・`)ノシ バンバン
で結局誰得なん?このブログ

コメントする

コメントするには、ログインする必要があります。

コメント一覧

            mini mosmoss(投稿日:2017/01/28 12:56, 履歴)
斜め移動は、x軸とy軸の移動量を数値に取り、
(該当キー押している分だけ数値を増やしたり減らす)
それに自分で設定したスピード値をかけて、
できた値をプレイヤーのポジションとしてワープさせたらどうでしょう?
プレイヤーを透明イベントにして
アニメーションを描画すると制止アニメ、斜め移動アニメや
攻撃アニメその他コマンドアニメなどもできるようになるかもですね

キー入力は簸川さんの説明がシンプルで管理しやすいと思います
追加で、cfm_さんのキー入力を一行で取得する関数
これ手っ取り早くて好きなんで紹介しておきますね('ω'っ)3
           mini naoki4019(投稿日:2017/01/28 13:23, 履歴)
自身を透明イベントにする発想はありませんでした・・・(´・ω・`)
確かにそれなら自分(透明化)にNPCを重ねることでいろんなアニメーションが再現できる・・・

ということはこれ擬似的にプレイヤーキャラクターを2人にして切り替えながら進むとか
2人操作してスイッチを2個同時に踏むとかもできるわけで・・・!


キー入力のも参考にさせていただきます、ありがとうございます!(´ω` つ )3
Cdv30200 aoi icon mini aoihikawa(投稿日:2017/01/28 12:43, 履歴)
キーの入力状態をフラグで管理すると
全体が見やすくなり

同時入力などもスムーズに
判別処理することが出来ます

 
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)
           mini naoki4019(投稿日:2017/01/28 13:14, 履歴)
昔なら即投げ出してたのに今ならわかる不思議

ありがとうございます!その手がありましたか・・・
こっちでも同時押し対応やってみたんですけど挙動不審だったので・・・
位置変更を最後に1回だけ挟めばよかったか・・・まだまだ勉強不足_(:3 」∠)_