XNAで使える最低のテクスチャサイズ
2D開発してる私には重要なことなのですが、時間がたつと忘れてしまう&検索してもなかなか引っかからないのでメモしておきます。
PC: 2048×2048[px]
XBOX 360: 8192×8192[px]
form 「MSDNフォーラム:Texture2Dに使用するXNB内抱のパフォーマンスについて」
Archive for the ‘ 開発ログブログ ’ Category
2D開発してる私には重要なことなのですが、時間がたつと忘れてしまう&検索してもなかなか引っかからないのでメモしておきます。
PC: 2048×2048[px]
XBOX 360: 8192×8192[px]
form 「MSDNフォーラム:Texture2Dに使用するXNB内抱のパフォーマンスについて」
どうも、お久しぶりです。テストがあったり、私が所属してる情報工学科に革命がおこったりで色々ごたごたしてまして落ちつて作業できる時間が少なくて、更新できてなかったです。どんな革命が起きたかはここで語ることじゃないので、控えておきますが。
さてタイトルのことですがこれはかなり悩みに悩みました。
この前書いたとおりこのプロジェクトはプラグインに対応させるつもりです。ですのでできるだけ外から追加できる拡張性をもったコードを書かなければならず、 しかもこのチップの部分はこのプログラムの中核の部分なので手は抜きたくありませんでした。
デザインパターンをあたってみて、「あ、これ使えるじゃん!!ふむふむ、え~っとこうやって、これがこうで… で、肝心なここは……使えねぇ!!!!!」的なことの連発でした。
どうにかならないか困り果ててとつぶやいたら@haxeさんから回答がいただけました。
@kassyi |
@haxe クラスを条件によって作り分けたいんです。例え話にすると調査員という仕事があり、Aは0歳から9歳までの朝食の食べる量を調査する、Bは14~50歳までの歩数を調査する。AとBが調査員というクラスを継承しているとすると、どうすればインスタンスを作り分けられるかって話です。 |
link | |
| @kassyi | @haxe 普通に考えれば if(age >= 0 && age <= 9) retrun new A(); else if(age >=14 && age<= 50) retrun new B(); となると思うのですが、これだとプラグインなどで調査員を追加するのが難しくて。。 |
link | |
| @haxe | @kassyi 今WebRequestクラス見てるので、お勧めするのはその方法かなぁ。 http://msdn.microsoft.com/ja-jp/library/system.net.webrequest.aspx | link | |
| @haxe | @kassyi ちなみに標準機能はどこかで初期化するとして、利用者が派生クラスを追加する際に、app.configから登録できるようにしておくとさらに吉。 http://msdn.microsoft.com/ja-jp/library/42z9z1b9.aspx | link |
このやり取りのおかげ様でやっとこさ整合性のとれたコードを書くことができました。書いたコードをざっとまとめるとこんな感じです。
すべてのチップはこのCihpクラスを継承して表現されます。また継承されたクラスのコンストラクタはprotectedにして直接はインスタンスが作れないようにします。で、どこからインスタンスが作れるかというとChipクラスのCreate()です。そのCreate()の中で何をやってるかというと、登録された派生クラスのクリエイター対して「このIDのチップ扱える?」って順繰りに訪ねて行って扱えるなら「インスタンスを頂戴ね」ということでクリエイターにインスタンスを作らしています。
…ってなことで、なんとかえっちらおっちら拡張性のあるチップ登録機構を作ることができました。いやーまさかWebRequestクラスをまねできるとは思いませんでした…。.Netライブラリは当然プログラマーのプロの人が書いているので吸収できるところは吸収するようにしようと思いました。@haxeさんに、感謝。
とあるサイトでXSSができてしまうことを偶然発見しました。
ところが普段私が使ってるChromeだとブロックしてくれるらしく、スクリプトの実行まではされませんでした。そこで他のブラウザではどうなってるのだろうと思って調べてみました。
| ブラウザ | ぜい弱性の種類 | 調査結果 |
| Chrome 4.0.249.78 | URL | OK |
| From | OK | |
| IE8 | URL | OK |
| From | NG | |
| FF3.6 | URL | NG |
| From | NG | |
| Safari | URL | NG |
| From | NG |
…Chorme最高!どっちの場合もちゃんとブロックしてくれました。FormのほうはURLの場合に比べて遭遇する可能性は少ないと思いますけど、たとえばFormに値を自動入力して、自動でポストしちゃうスクリプトをブックマーレットとして作ってTwitterのおかげで大活躍なURL短縮サービスかなんかで一見わからないようにしておけばURLと変わらなくなります。
まぁそもそもこういうぜい弱性を作っちゃう開発者が悪いのですが、安全なことにこしたことはありません。
ってことで、Chromeお勧めだよ!!爆速だよ!便利だよ!軽いよ!!(笑)
一応進んではいるのですが亀のようなスピードです。。
今後の方針が見えなくなるといけないのでメモ代わりに更新します。
DLLプラグインを導入しようと思ったのは大人の事情ってやつです。(まだ私は未成年ですが(笑)
今のまま公開すると某所から苦情がきてもおかしくないので… 。公開するものは後ろめたいものを完全に消した物にします。
境界線自動生成チップを標準搭載しなくなるので、機能としてはそこらへんに転がってるものと変わりなくなりますが
というものは少ないと思うので妥協することにしました。
と言いつつも、かなりハードルが高い気が(汗;
いままでDLLの動的ロードなんてやったことないし、プラグインが使えるようなアプリを作ったこともない。。
でもUndo、Redoと同じようにググってみたらサンプルがあるのでなんとかなりそうです。
まぁ何事もやってみなきゃ分からないので今日も前に進むことにします。
VS2010Bata2を導入してみたので、最上級エディションにしか載ってないと思われる「アーキテクチャ->依存関係グラフの作成」をやってみました。対象はオールリライトする前のプロジェクトです!
…。ぽかーん… これはひどい!作った自分が言うのもなんだけど、依存しすぎだろこれは。
今書いているプロジェクトはこんなことにならないように心がけつつ作っていくことにします。
XNA(.net)で使用できる2Dゲーム用マップエディタを作っています。いつ完成するかは全く未定ですが日々完成するように努力しています。