プロフィール

JaJa

JaJa
ツイニ スマートフォンヲ テニイレタゾ~! ('▽'ノ

...Now Developing
→ちょっと大きいサイズ
ブログ内検索
リンク

スポンサーサイト

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

2012/04/23▼4箇所まで制御できるように

4箇所までのタッチ操作を並列的に制御できるよう、操作周りの処理を拡張しました。
まあ、たいていの場合、最大2箇所(左手用1箇所、右手用1箇所)で事足りるとは思うのですが、もしかしたら4本の指を駆使するようなアクロバティックな操作に対応したゲームを作る事があるかもしれないので、やはり4箇所は必要だろうかと。('-'ノ

拡張作業中、またしてもバグ取りに少し手間取ってしまい、ピンチとフリック操作の実装はまだ手つかず。
これらの実装は次回に!

20120423.jpg
▲昨日とさほど画面映えが変わらないのでー……。

2012/04/22▼タッチ状態の捕捉方法を変更

デバッグ表示を作って色々ろと検証したところ、どうもTargetElapsedTimeで設定した秒間30フレームの処理間隔とは関係なしに、システム内部でタッチ情報が更新されているみたいなのでした。
つまり、フレームの隙間(1/30秒間隔)でタッチ状態が変わってしまうと、秒間30フレームの処理ではその変化を捉えきれなくて、システム内部のタッチ情報とゲームで制御しているタッチ情報にズレが生じてしまいます。
これが今回うまくいかなかった原因でした。。。
ためしに、秒間60フレームに変更してみても同様に発生したので、フレーム数の大小はあまり関係ないみたい……('-';

とりあえず、タッチ状態の捕捉方法を変更して、デバッグ表示を追ってみたら、正しく動くことが確認できました。
まあ、チェック用に自作したデバッグ表示自体もバグっていたりして、なかなか手間取ったりしましたが……なんとか正常に動いてくれて一安心です。('▽'

現在は1つのタッチ情報に基づいたジェスチャ処理しか行えていませんが、次はこれを複数のタッチ情報を常に並列的に扱えるように拡張する予定です。
実際のゲームでは、左手で画面をタッチ&ホールドしながら、右手で画面をタップする……みたいな操作も実現できるようにしておきたいので。

20120422.jpg
▲タッチ操作を検知すると、タッチ状態やジェスチャ判定結果に対応した文字列が白く光る……といったデバッグ表示です。

2012/04/21▼ひきつづきプログラム変更中

TouchPanel.GetStateが返してくれるタッチ情報の挙動が掴みきれなくて、まだ作業が終わらず。orz
タッチ操作をしながら、自分が予測している値と異なる値がタッチ情報として返ってくるので、たぶんシステム内部で行われている挙動を自分が把握しきれていないんだと思う('-';
タッチした瞬間のシグナルが抜けたり、離した後も離した瞬間シグナルがずっと残り続けたり……うーむ。
このシグナルが上手くキャッチできないと、それらをもとにジェスチャ判定する処理が正しく機能しないのです。

いったん、システム内部の動きを詳細に把握するため、急遽、値の動きが毎フレーム視認できるデバッグ表示処理を作成。

20120421.jpg
▲小さなデバッグ用のフォントで、内部のタッチ情報が表示されるようにしました。

2012/04/20▼ジェスチャーを判定する処理を変更

スマートフォンのゲームは、主にタッチパネルを使ったジェスチャーと呼ばれる操作によってプレイします。
画面を1回叩く「タップ」とか、画面の1箇所を1秒くらいタッチしたままにしておく「ホールド」とか、2本の指でつまむようにタッチする「ピンチ」とか。

これらの操作については、マイクロソフトが用意してくれているReadGestureという関数を使って処理していたんだけども、脳内ゲームをしばらくプレイしていると、ちょっとカスタムしたほうが良いかなあーと思えてきました。
というのも、この関数を中心としたジェスチャー処理は本当に便利で、面倒な判定などを知らないところで勝手にやってくれて、「今、タップしたよ!」とか知りたい結果だけ教えてくれるんだけど、その判定をこちらで制御できる状態にしておいたほうが、個々のゲームに合わせた調整が行えそうなので。

デフォルトでは、ホールドというジェスチャーは1秒くらいタッチし続ける操作なのですが、例えば、ユニットをホールドすると、そのユニットのステータスが表示されるようにしたい場合、1秒待ってから表示されるのは不便な気がします。
もっとサクッと見たいはずなので、ここは0.2秒くらいのホールド操作で表示させるようにしたい……とか。

そんな感じで、ReadGestureを使わずに、代わりにTouchPanel.GetStateを使う処理へとプログラムを書き換えることに。
TouchPanel.GetStateは、タッチした画面座標とタッチの状態(画面に触れたか/画面から離されたか)のみを列挙したようなシンプルな情報のみが得られる関数なので、それらの情報がどんなジェスチャーを意味しているのかといった判定は、自分で組まなくてはいけません。
まあ、逆に言えば、既存のジェスチャーを好きなようにアレンジすることができるってことで、秒間16連射タップとか、3分間ホールドしないと反応してくれないスーパーロングホールドといったジェスチャーも実現可……たぶん作らないけど。('-';

とはいえ、ジェスチャーの判定に手間取っており、プログラムの変更は明日一杯までかかりそう。ぐももも。。。

20120420.jpg
▲近所のコンビニで買ってきた朝食。食べたら寝て、起きたら続きをやる予定~

2012/04/19▼基本システムの組み立て

昨日書いたゲーム案のメモファイルを開いて、そこから実際にゲームに採用する部分を抽出していきます。
仕様書作成の準備となる工程です。

一晩寝て、ある程度冷静になってからメモファイルを開き、これはブッ飛びすぎてるッ!…とか、なんでこんなの面白いと思ったんだろorz…といった部分をガンガン削除。('-';
そして、生き残ったゲーム案から、自分なりのやり方で1本の軸となる基本システムを組み立てます。
組み立ての過程においても、コアとするゲーム案に不要(余計)な案や背反する案は、たとえ面白そうでもここでは除外していきます。
(そういったアイディアはネタ帳にとっておいて、別の機会に使ったりします。笑)

……といっても、生き残りのゲーム案だけで綺麗に基本システムが組み上がることは殆ど無くて、案同士の整合性を取ったり、効果的に繋げたりするために、ヤスリや接着剤のような役割をする新しいアイディアを加えつつ、基本システムを仕上げます。
フンワリした書き方になりましたが、そんな感じで基本システム部分はひとまず完成させました。

20120419.jpg
▲案同士をいろいろ組み合わせたり、繋げたりしながら、面白い仕組みを作るべく脳内ゲーム中。企画の作業の中で、一番美味しい部分なんだ!('▽'*

2012/04/18▼ゲーム案出し

表示周り、操作周り、サウンド周り、セーブロード周りについては、とりあえず基本的なところができたので、そろそろゲーム自体の案出しをしていきます。
ゲームの案出し……なんて改まってみたものの、インディーズゲームなんだし、自分が作ってみたいゲームを好きに作ればいいわけで!('▽'*
なので、思いつくままを書式とか考えずに、テキストエディタにどんどんメモっていきます。

これはつまんないかも……とか、そんな後ろ向きな考えは抜きにして、どんどんポジティヴに書いていきます。
書いていくうちに、どんどんどんどん楽しくなってきます!('▽'=3

そして、疲れたところで終了です。=□○_
今日書いたゲーム案のメモは保存しておき、日を改めて見直すこととなります。

20120418.jpg
▲思いついたことをガーッと書いていく。(ネタバレになるような部分は、いちおう圧縮高めの方向で。)

2012/04/17▼やっと文字列表示

ようやく文字列が表示できるようになりました。

パイプライン処理ではデータファイルの解析を行い、各過程でデータの受け渡しを行うのですが、その受け渡しが複数箇所でうまく行っていなかったのが原因ぽいです。
あと、TypeWriterとTypeReaderとの対応付けができていなかったり……と、理解しきれていない部分でのミスが重なり、うまく行かない理由を探り当てるまで時間がかかってしまいました。
かなり時間を要しましたが、ようやく文字列が画面に表示でき、感無量('▽'。

20120417.jpg
▲ある程度分かってきたので、縁取り機能やドロップシャドウ機能も使ってみた。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。