9/1(金)パッチ期待してた人まじすいません。あやまります。すいません。告知をサイトでやらなくてマジで良かったと思った。良くないんですけど。
DirectXでゲーム創りたいって思ってる人にすべからく忠告したいのですけど、絶対3Dからやった方がいいと思う。マジ難しそうとか思える専門用語たくさん出されるけどこけおどしよあんなの。
行列とかわかんなくて大丈夫だから。3次元座標に平行移動の要素1をくわえたベクトルの分解と結合をするための式で、その変化は行列同士の積によって効果を積み上げていけるとか知らなくていいから。
DirectDraw系列からDirectGraphicsに移ったときもマジで気軽さにビビッたけど、3DなんかそのD3DGraphicsの初期化処理プラスアルファぐらいよ。プラスアルファしないと全部の3Dが真っ黒に写るだけで(ライトがないので)
昨日あたりはテキスト表示をよりフレキシブルに行う手法を探してて、フォントのベクターデータから抽出したパスで3Dテキストのメッシュ(形状)を作り出して表示するとかやってた。まあおもしろいし、この3Dメッシュを簡単にしたりする方法もあるけど、止めました。重いし。重くないけど2Dで表示するよりは重い。あと毎フレームじゃなくてもチョコチョコ変りまくるテキストの内容を追うには向かない。まあでもなぜかはじめての3Dモデルのレンダリング表示となった。おめでとう俺。
なんでテキスト表示を避けてるかというと、テキストの表示機能がGDI利用なんです。うざい。重い。大量のテキストとか書いたらたぶん涙が止まらないと思う。今までMONSTERでは、対戦時は一切フォントテキスト表示を止めるという手法で切り抜けてきましたけど、限界があって。というか家の環境だと、フォント表示がすごい重い感じで、グラボが「ギリギリギリギリ」とか謎の歯軋り音を漏らすもんだから。
結局、テキストを「更新する状況でのみ」、テクスチャにマッピングして表示することにした。まあこれで文字の画像的な装飾も出来るようになったっぽい。まあ軽いし。
でもって、これは実装はまだしてないです。もう一つの問題を片付けることにした。キー入力問題ね。
最悪ダイアログにしても良いし、実はタイトルバーとか装飾一切ないダイアログにすればアリかなとも思ったけど、ウィンドウ内部に押し込められればそれに越したことがないんで。それと、ProjectYNPさんの「ALIBAT」のサポートに「チャット日本語打ちのとき変換候補が見えない」というのがあって「ええ~そんなんむりやあ」って思った。だってFFXIでも見れないのにどうすりゃええねん!と思ってたんだけど内部埋め込みしても見えるように出来るっぽい。出来た出来た。よかった。FFXIはIMEのあの見た目が許せなかったんだと思う。独自変換のソフトが内臓されてるみたいだし。
そしてここで大きな問題がおきた。ウィンドウのものを上書きさせないように画面を更新する手段はあったんだけど、フルスクリーン時に「見えない」ウィンドウタイトルやら枠やらの画像も一切更新されなくなっちゃう。コリャガッカリ。そんで、それらを消す努力をしたわけだけど、どうもウィンドウとフルスクリーンの切り替え時に色々なバグを背負ってるみたいだった、というより報告もきていたのでこの際スパッと解決することにした。
まあ原因はたわいないことで復帰するときに無限ループに陥っていただけだったんですけど。あと、初期化時に出ていたNULLアドレス参照エラーは用意してないデバッグ用のエラーメッセージにE_FAILをリターンしてたのに気づかなかったからだった。参った参った。というわけで、以前あったDirectX9未対応の古いデバイスでも強制終了はもうしません。よかった。
で、ウィンドウ<>フルスクリーンと、フルスクリーン時のALT+TABからの復帰もちゃんと何度も出来るようになった。フルスクリーンからウィンドウに復帰させるときって、HideしてShowしてUpdateして、とかが御約束事?らいしけど、実は位置直しとサイズ直しを改めてちゃんとやると大丈夫だった。というわけでHideとShowとUpdateは排除した。別にあっても良いんだけど。
…って書いている間に違うって事に気づいた。
とりあえずデバイスの取得終了と同時にUpdateはお勧めします。絵がちゃんと表示されてうれしい。
ここで、復帰できないよ!って人にワンポイントアドバイス。
「D3DDeviceー>Reset(&d3dp)を
やる前にD3DPOOL_DEFAULTのリソースは
すべてユーザーが開放しなくてはならない」事に注意。
これはマジで引っかかります。上のD3DPOOL_DEFAULTのリソースってほとんどないんですけど、ほぼすべての動的リソースはそうだと思います。動的テクスチャとか、サーフェイスとか。このサーフェイスにはレンダリングターゲットやプレーンオフスクリーンサーフェイスも含まれます。
で、メッチャクチャ残念ですが、これらは復帰後つくり直しです。
昔は読み込みテクスチャが全部D3DPOOL_DEFAULTだったりして死ぬかと思った。今はD3DPOOL_MANAGEDってリソースがほとんど。これは静的なリソースにうってつけで、管理はDirectX任せ。具体的には本体の分身みたいなのがここそこに作られて勝手に移動したり消失しても大体コピーが残っていて復帰できるってもの。これでメモリを余計に食っているのかどうかはわからない。どうなんだろう。でも格ゲーは特にスプライト多いから全部読み込みなおしとかありえない。
でも正直、ゲーム中からディスプレイいじくるのって怖い。最近は復帰しないなんて事はないけれど、昔はたまーに、デスクトップの解像度がゲームのものになったまま戻らなかったりして困りましたね。
まあとりあえずこれでMONSTERからはダイアログがなくなって、キー入力以外はすべてパッド操作可能になりそう。ウフフ。
がんばりやす。
分からない人が大半でしょうけどすいません。
でも分からなかった人が分かるとうれしい内容でもあると思いました。
優光嬢:
ベンキをなめたから
來御さん:
exblog使いづらいです。お勧めしません。
ムルトさん:
おかしな人ですから。
権兵衛さん:
嫌いじゃないですよ。分からないネタはイライラするけど。