まあそんなこんなでXNAでゲーム作ってひっそりと某所で配布してました。
もう配布は終わってますが。
内容もしょんぼりなゲームをなんとかバグまみれながらも動くだけは動くところまで持っていきました。
で、以下反省とかXNAへの愚痴など。
XNAに慣れてないうちからまともに作ろうとしたのは失敗。
Gameクラスはともかく、GameComponentとかネストも出来ないし、細かい制御もできないんでそのままじゃ全然使えない。 なのに面倒くさがってほぼそのまま使おうとしちゃって、後で失敗したなぁと思うところが多々あったり。
新しく作り直さないにしても継承してかなり改造して使う必要はあったかな。
あとは普通にDirectXそのまんまってことで、ちゃんといろいろラッピングして使う必要があったかなぁ、と。
改造するにしてもRenderTarget2Dをそのまま継承してたりしたんだが。しかし、360にしてみたらRenderTargetのDisposeがvirtualじゃなかったりして失敗したり。
まあRenderTargetとか継承すること考えてないようなクラスを継承するのが間違ってるんだけど、だったらsealしておけよと思わないでもない。
描画に関してはよくわからん所は回避しながら行けたんだが、360で動かしてみたらさっぱりで、気をつけてたつもりだがやっぱり忘れてた、RenderTargetを設定すると不定値になってる制限にやられた。
これは気をつけてればいいだけなんだが、Windowsでずっと動かしてると忘れる。
あとは書き込む色をRGBA全部にしてたらフォーマットがColorのRenderTargetとかバックバッファに描き込もうとして描き込めなかったりとか。ちゃんとRGBにしなきゃならんのね。
で、最後にやられて、もうどうでもいいから放置した問題は、バックバッファのサイズが800x600にしていて、360の画面設定をワイドにした時に横に伸びまくる問題。
どうなんのかと思ってはいたんだが引き伸ばされるんだー。
ああ、忘れてたけど、ContentPipelineのProcessorとかImporterのデバッグがめっちゃ面倒なのもなんとかならんかな。これは仕方ないと言えば仕方ないんだけどね。
あ、まだあった! パッドがXInputのみなんでそのままでは普通のパッドが使えん。ManagedDirectInputを使わなきゃいけないのがめんどい。
確かにXInputは便利なんだが、巷に溢れるDirectInput用のパッドが全部使えないのはゴミすぎるだろ。普通のパッドをXInputで使えるようにするドライバなりユーティリティを作ってくれない限り使えないね。
そういや、360で動かしてもゲーマータグが取れるわけでもないし、実績みたいなのを作れるわけでもないので、あんまり面白くないなー。CPUは遅いし。
XNAはRefreshになってからかなりドキュメントがまともになったんだけど、面倒で読んでなかったりする。これは最初からあったら読んでたんだけど。
まあ2.0で大幅に変わるみたいなんで、XNAでゲーム作ってみようかと思う人は少なくとも2.0がどうなってるか確認してからでもいいんじゃないかと思う。2.0でExpress以外でも動くようになってViemuも使えるようになるしね。
でもMSのことなんで3.0まで待った方がいいかもしれんけど。
べつにXNAじゃなくてもC++とDirectXでいいしな。どうしてもC#がいいってならXNAぐらいしかないんだが。
どうしてもXNAじゃないと出来ないのは360でも動くってことだが、配布しようとなると、360で動かせる人はほとんどいないのでWindowsがメインになってしまう。そうするとめっちゃ少数派な360に気を使って開発するのも面倒になって、あれ? XNAの必要ないんじゃね?
ということで誰でも360で動かせるようになるまではあんまりいらんかな。
こっちはLongsPeakが3.0になりますた。
仕様書が出てないので正直なんとも言えん。
そろそろ出る仕様書に期待。
LongsPeak Reloadedっていうちょっとした拡張も予定してるみたい。 コンパイル済みシェーダを取り出したりバッファ間のコピーが出来たり、 3.0ではどこかに行ってしまったDisplayListとか頂点属性のオフセットを設定したりといったものが入るって。2〜3ヶ月後って、まあ、もっと遅れそうだね。
あとMt.Evansはいつ出んの? いちおうLongsPeakの3〜5ヶ月後ってことだけど、これも順調に遅れまくりそうな予感がするね。
先月の頭に0.36が出てんだけど、訳はそのうち。
ViewMTNがいつのまにかApacheとmod_pythonだけじゃなくて単体でも起動できるようになってた。
うーん、ViewMTNもいいんだけど妙に重いのが気になる。それよりなによりmiruから変えるとアドレスが変わるのがアレなだけなんだが。
Rikoの方も再開。つってもあんまり進めてはないけど。
とある狭いコミュニティでゲーム作る講座でもやろうかと考えて、Rikoをベースに簡単にゲームが作れるライブラリ(笑)てな物を作るかと思ってるんだけど。
そもそも講座なんて俺に出来るのかどうかはまあともかく。
対象はゲームとかプログラミングは興味はあるけどなにから手をつけていいものやら、という人が主になる気がする。
で、できる時間が週に1回、3〜4時間はできるけど、まあ聞いてる方も大変だから2〜3時間ぐらいになるかなぁ。
それで、途中で飽きたり挫折しないようにやっていくことを考えると、動くこと最優先にして文法とか出来る限りぶっとばしてやってく必要があるかな。
てなところまで考えたんだが、もしこれで簡単なゲームが作れるようになったとして、その後どうするかってのを考えてなかったな。
ぶっとばしてなにか出来た後は、ちゃんと勉強してまともにゲームを作れるような状態になるといいんだけど、それはちょっと期待しすぎ…というか無理だろうな。
それであれば、入門編から基礎編の講座をやらんとならん? そんなことやったら何回シリーズになるんだよ…。毎週1回で1年とかやるのか? 4クールとかねーよ。
うーん、まあしかしよくわからんし、そこまで考える必要もないか。とりあず入門編でどこまでやるかとか考えた方がいいような。そもそも入門編ですらやってる暇があるのかどうか。
さて、電波垂れ流しの時間は終了だ。
もし講座やるとなればRikoベースの簡単ライブラリを作ろうと思う。つか作ってる。
まあMyGameとか使えばいいんじゃね、と言えばその通りなんだが、なんで使わないのかと言えば、作りたいからだよ。車輪の再発明なんてのは趣味でプログラムを書く気違い共の心のオアシスなんでほっといてくれ。
実のところ別な理由もあって、MyGameはちょっとちゃんとしすぎてるから、ってなところ。
文法とかあんまり気にせず書けるようにもっともっと酷いコードで動くようにしたいんだよね。
とりあえず試しに作ってみたのがこんな感じ。
require 'pcg' include PCG Screen.setup 640, 480 bg = Sprite.new('bg.tif') casko = Sprite.new('minicasko.tif') casko.move(100, 100) Screen.text.move(8, -8) Screen.layer[-1] << bg Screen.layer[100] << casko on_input_left do casko.move(-2, 0) end on_input_right do casko.move(2, 0) end on_input_up do casko.move(0, 2) end on_input_down do casko.move(0, -2) end on_input_reset do casko.reset end PCG.main do casko.rotate(1) text_color rgb(1.0, 0.0, 0.0) puts Time.now puts '日本語' puts "FPS: #{fps}" end
これで背景とキャラ1個でてキャラが勝手にくるくる回転してさらにパッドで動かせる。putsはWindow上に描画されてる。text_colorが赤指定してるっぽいのに黒いのはバグ。
なんかまだまだRubyっぽいし、シンプルでもないし、ここからゲームに仕立てるにはいろいろ必要だけど、ここまででHSPみたいっていう感想は貰えたのでおっけーかな。
やっぱりHSPみたいにだらだら書けるのが良いかと思うんで。じゃあHSPでいいじゃんとなるんだが、HSPは分からないのでパス。
あといざちゃんと書こうという時に普通にRubyで書けるのがいいよね。Rubyは動けばいいやでだらだら書けて、さらにちゃんとしようとすればそのまま綺麗に書き直せるのがいい所だと思うんだ。
あとはあれか。最終的に3Dとネットワーク対応させたい。ネットワーク対応はともかく3D対応はしたいのでRikoベースという。さらに言えばRikoを使うことによってちゃんと俺がRikoをいじる。
ネットワーク対応はよく考えてないけどdRubyとかRindaでキー入力を簡単に共有するだけでもなんとなく出来るんじゃないかなーと甘く見てる。これはちゃんと考えてからだね。
つかね、講座とかその前にね。なぜかそのとあるコミュニティでプログラミングコンテストでもやるかとかいう話を考えちゃってやることになったので準備中。
大富豪のAIみんなで作って対戦させようということでサーバー作ってるんだがめんどい。通信はパイプでやるんで楽なんだが、やっぱりルールの処理がめんどいよー。
あとグラフィカルに画面表示もできなくちゃいけないのでまずいとか。まずい。時間とか。
プログラミングのイベントだと対戦もいいけどスコアアタックみたいなのもいいかと思った。ゴルフとかICFPみたいなの。
対戦はどうしても難しくなるんだよな。しかしまあ見た目には対戦の方がいいか。
しかし、AIって難しそうって人から思考時間の制限はどのくらいですか?とかいうやる気まんまんの人までいやがるから怖い。
楽しみではあるんだけどね。しかし上手くいくかが俺の準備次第なのでほんと怖いぜ。