--------

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2014-03-31

【ウディタ】キー入力について

どうもです。
ウディタのキー入力について、製作している段階で困ったことが生じたのでいろいろ考えたのですが、解決いたしました。
今回はその話をしたいと思います。

まず、僕が何に困ったかというと
ウディタのキー入力では、決定キーとキャンセルキーと同時に特定キーを取得できない
という点です。

何が言いたいかというと、ウディタではキー入力時、決定キーとキャンセルキーやサブキー、方向キーは一つの変数で取得できますが、決定キーなどと一緒に特定キーも取得したいときにそれができないということです。

↓決定キーなどの主要キーの取得とキーボード全キーの取得が別々のため、一つの変数で取得できない。
キー入力1

入力待ちのキーを取得する場合、二つの変数の入力待ちにチェックを入れて取得するとうまく動作しません。

では、入力待ちのチェックを外して二つ取得すればいいじゃんとなります。
キー入力11


確かに入力待ちのチェックを外して取得すると二つの変数に基本キーとキーボード全キーで入れてもちゃんと動作します。ですがここでさらに問題が発生します。

そもそも入力待ちというのは、キーを押したときにその動作が瞬間的に何回も続かないように制御するためのものです。
では実際に、キー入力の動作を確認してみましょう。
キー入力にチェックをいれた変数と入れない変数で動作の確認をします。
まず、チェックを入れてない変数のデバッグを確認してみましょう。
下のようにコモンを組んで決定キーを一回のみ押してみます。
キー入力3

するとデバッグはこうなります。
デバッグ2

このように、入力待ちにチェックを入れないとたった一回のみキーを押したつもりでも実際には何回も実行してしまいます。
では、入力待ちにチェックを入れた状態でさっきと同じことをしてみましょう。
キー入力4
この状態で決定キーを一回のみ押すと・・・
デバッグ1
このようなデバッグになります。

このように入力待ちとは瞬間的に何回も実行してしまうのを防ぐ処理です。
本来ならこの入力待ちにチェックを入れて基本キーとキーボード全キーを一つの変数で取得したいのですがそれができません。これは困りました・・・・・。

というのが僕が困ったことの内容です。
ウディタでゲーム製作してるとキー入力は必ずかかわってくるのでもしかしたら誰もが引っ掛かる問題かもしれません。
さて、みなさんならこの問題をどのように解決するでしょうか・・・?
僕はこの問題を解決するためにいろいろ考えたのですが、ある方法を思いつきました。
それは「入力待ちに似た処理をコモンで作る」というものです。
つまり、入力待ちにチェックを入れない状態で二つの変数でキーを取得し、一回キーを押したら何回も実行しないような処理を作る。ということです。

この、キーを一回押したらキーを一度のみ実行するようにするというのが「入力待ち」です。
ですが、じゃあどのように作ればいいんだ・・・?と悩んでいました。

ですがある時、ヒントになるような言葉をネット上で発見しました。
それは、

キーを離したかどうかを監視する

です。

つまり、押したキーを離したかどうかを監視して、キーを離したときに処理を実行すればいいわけです。
そうすれば入力待ちにチェックを入れなくても、入力待ちに似た動きになります。

なんとなく形はつかめるでしょうか?
次回はその処理の内容について記したいと思います。

なお、この処理はtwitterにて、多くの方にご助言を頂きました。
本当にありがとうございます。
また、今回の議題である「基本キーとキーボード全キーを入力待ち状態で両方実行できるようにする」というのは僕がやってる方法以外にもいろいろあると思います。僕がやってる方法はいろいろある方法の中の一つとして見ていただければと思います。

では今回はこれにて。
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

プロフィール

リル

Author:リル
どうも。
ウディタでゲ製してます。
リル(lilL)と申します。
リンクフリーですが、報告いただけるとありがたいです。
現製作中→「Animal Time」
Twitter : https://twitter.com/lilL76725976
Youtube : https://www.youtube.com/channel/UCZu
9eYaYrfBkzgUX1Msaajw

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
訪問感謝します!
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。