くまりゅう日記

もっと過去の日記
[.NET | BeOS | Blender | COLLADA | fossil | mono | monotone | NPR | OpenGL | PeerCastStation | Riko | Ruby | Silverlight | TRPG | XNA | ゲーム | ゲーム作り | プログラム | | 模型]

2013-08-16

日記

あー、日記書いたのに上げ忘れてた。

週末はやばいくらい暑くなった。

一瞬だけコミケ行ってみたがやはりしんどくて目当てのところ4つだけ回って20分程で出てきた。 夏は初めて行ったけど暑すぎて見てまわろうなんて気にならん。 サークル側で出てる人はほんと大変だなー。

換気のために家の窓全開にして出掛けてたんだけど帰ってきたら室温37℃でこりゃひどく熱籠ってしまったと思ったが外気温も37℃だった。 どうも過去最高記録を叩き出したようで。 夜も下がっても28℃台とか相当厳しい。冷房無かったらあぶなかったぜ。

ICFPプロコンは一週間前まで覚えてたんだけど、二日目朝にコミケ行こうと思う直前まで忘れてて、見なかったことにしてしまった。三日目は仕事だったしなー。今年は日付が悪いよ。

[Ruby][OpenGL][ゲーム作り] ゲームシーンのデータ管理

PeerCastStationのGUIいじりはLOOX Uではしんどいので、LOOX Uでまたゲーム作りの続きを再開した。 これもしょぼGPUなLOOX U向きの作業ではないんだが。

相変わらず全然進んでない。 各シーンへの入出力をはっきりと分離する(地味な)作業をした。

シーン間でデータを受け渡すのをどうやるかというのは悩ましいところ。 ゲーム中のデータは沢山あるし、けっこういろんな情報をいろんな場所で表示したりいじったりする必要がある。

あんまり考えずにやる方法は$gamedataみたいなグローバル変数に大本をつっこんじゃってみんなでこれをアクセスするの。 考えることは少なくて簡単だけどあちこちからグローバル変数を参照すると管理が大変だぞー。

大変なことの一つに、最初からじゃなくてあるシーンから開始したいと思うことがある。デバッグするためにいちいちタイトル画面から開始してたらめんどいのでメインのゲームシーンから始めたいと思う。さてゲームシーンを始めるにあたって、グローバル変数のどのメンバを最低限適切に設定しておけば正常に始まるんだろう?というのを判別するのが大変だ。今から始めようとするシーンには関係ないデータも$gamedataに入っちゃってるんだけどどれが関係ないかを探すのは面倒なのだな。

もういっこ、あるシーンが終わった時に一体どのメンバが書き換えられてるのかわからんという点も困る。所持金メンバがあってゲームシーンが終わった時に、所持金メンバにはステージ中で得たお金が加算されているのだろうか?それとも「ゲーム中で得たお金」メンバだけが加算されていて所持金にはゲームシーンが終わったあとに結果画面か何かで加算しないといけないのだろうか。といったあたりが分かりづらい。 これでさらに困るのは「ゲーム中で得たお金」とかいう明らかに一場面でしか使わない変数がグローバルになってるところだ。こいつは一体どこで誰が初期化するんだ?

全部グローバル変数につっこむとあとで大変な思いをするというのは想像できたが、さてではどうしましょう。

解決方法としてシーン毎に入力・出力データクラスをつくって、シーンを作る時には入力データを適切に設定して(シーンのコンストラクタにでも)渡してやる、シーンが終わった時には終わったよという通知とともに出力データを受け取る、という形にした。これならば入力データにあるメンバだけ埋めておけばよいことがわかって、出力データ以外には何も変更されてないことが期待できる。どのデータを誰が初期化するのかは一目瞭然なので初期化漏れも無くせる。

不利な点としては、シーン毎にいちいち入出力用のデータを定義しないといけないところと、入力データへの詰め込み・出力データからの取り出しをしないといけないところか。とはいってもそんなに大変なものじゃないし、あちこち変更するより一箇所でそれやっておけばいいだけだから、利点の方が多いと思う。

というようなことをやっていた。

[Ruby][OpenGL][ゲーム作り] UIめんどいわ

ゲームデータのシーン間受け渡しがある程度確立したので、これでやっとゲーム前の準備画面を作れるわーと作り始めたんだが、UIというかメニューを沢山出すのが難しい作りになっていて苦労している。

UI定義は以前作ったけど、ゲーム中のUIくらいしか考えてなかったのでメニュー選んでサブメニューが出て、という形は対応していなかった。 あんまり凝った作りにはしたくないがどうだかな。

軽くサブメニューを表示できる仕組みを作ってみたが描画順の制御が出来てなくて詰んだ。 メニューの枠をPrimitiveBatchにつっこんでなるべく一気に描画しようとし、中のテキストをTextBatchにつっこんでなるべく一気に描画しようとしたら、メニューの上にサブメニューが出るのに下から枠→テキスト→枠→テキストの形が実現できなかった。うぼぁ。TextBatchを後から描いてるからテキストが絶対枠の上に出ちゃうわ。

混ぜて描けるUIBatchみたいなの用意した方がいいんかな。しかし結局マテリアルは別だから一発では描けないんだよなぁ。 結局のところ奥行きの問題だから、深度テストするっていう手もあるか。あー枠が半透明だとだめだー。ちゃんとUIも奥行き?で分割するか。


ページのトップへ | トップ «前の日記(2013-08-07) 最新 次の日記(2013-08-19)» | 編集 | kumaryu.net by kumaryu