然うして

「M.Kakumotoなホームページ」の編集後記

風が強いけど

2010年12月31日 | Weblog
2010年も今日で終わりです。大晦日、いかがお過ごしでしょうか。

Fable2 は3人目の仲間を得るところまで行ったら、あとはラスボスを倒すだけという話になったので、そこで止まっています。

そうそう。うちの初期型 Xbox360 はまた故障したのですが、保障期間も過ぎていることだし、Kinect 発売を期に新型に買い換えることにしました。前よりスタイリッシュになって、放熱もしっかりしている感じです。なんだか初代 Xbox のあの大きさが懐かしく思われます。

Kinect は、同梱される「アドベンチャー」と、同時発売の「スポーツ」で遊んでみました。跳んだり走ったりで、なかなか疲れます。体力の無い人は息切れ必至です。これを作るのに10年かかったそうですね。

人間の動作を正しく認識できないことがたまにあって、例えば或る競技では投げていないのに投げたことになったりするのですが、まぁ許容範囲でしょう。

その他個人的なこととしましては、Realistic Vision II の改良を少しずつ進めており、大体やりたいことは実現できたかなと。あと着手していないのは音声関係だけかなと思っています。

では良いお年を。



朝晩冷え込むようになりましたね

2010年10月21日 | Weblog
その後もスクリプトエンジンの拡張を進めまして、.NET Framework の一部のクラスを扱えるようにしました。すべて Type.InvokeMember による間接的な呼び出しになるのでパフォーマンス的には問題ありますが、プロパティおよびフィールドに対する取得、設定。そしてメソッドの呼び出しを、静的か非静的かに関わらず行なえます。また、コンストラクタも CreateInstance コマンドを使えば呼び出せます。なおパラメータは全て参照渡しとしました。

また、ウィンドウの描画を自前でできるようにしました。まぁ画面に色を塗って、文字列が描かれたテクスチャを貼るだけですが、入力を調べるコマンドを使えばメニューも自作できます。これは現状、プラグインでやっています。で、その過程で時間を計測するコマンドが無いなと思って、それから 64bit 整数の必要性について考えて、そこから冒頭の機能の実装に至ったわけです。

ただし現在のバージョンのものとは一部で互換性が失われており、また、それこそ時間を計測するコマンドも作っていないし、公開は(もう前回から1年になりますが)もうしばらく先の事になるでしょう。今年の話になるかどうか。

Xbox360 は、最近 Fable2 をプレイしています。3 ではありません。船に乗る所で嫌な予感がしましたが、1 よりはマシな展開でよかったです。スキル(遠距離攻撃)は非常に使いやすくなったと思いますが、スペル(魔法)は不便になったような気がします。

あと我が家は未だに ISDN なのですが、これで LIVE につないだらどうなるかと思って実験してみました。360 とパソコンをクロスケーブルで接続し、ICS を使ってネットにつなぐわけです。結果としては、いちおうプレイできました。が、当然ながら、何をやるにもレスポンスが悪い。比較的まともにプレイできるのはマンツーマンかそれに近いレーシングゲームだけ。多くのゲームでは早い段階で強制切断されます。うちにブロードバンドが来るのはいつの日か。

次のブログ更新は12月?


メンバアクセス演算子みたいな

2010年09月03日 | プログラミング
前回の更新から2ヶ月近く経ちますが、なぜかいつもこの間隔。決して計画しているわけではなく、ただ気分が、書きたいモードになっただけです。

その前回は XNA がどうのと話をしましたが、とりあえずコードの変換は終わりました。でもフォントサイズが変わったりして、完璧ではありません。

で、なんか言語を拡張できないかと思いまして、メンバを導入してみました。例えばプロパティへのアクセスは次のようになります。

Something.Property

でもこれ、実体は次のようになっています。

GetMember(Something, "Property")

解析する時にこのように変換するわけです。プロパティが代入の左辺である場合は SetMember になります。

同様にしてメソッドも導入しました。

Something.Method(arg1, arg2, ...)

ちなみにこれの実体は次のようになっています。

GetMember(Something, "Method", arg1, arg2, ...)

あと、いわゆるインデクサないしデフォルト プロパティも導入しました。これは [ ] で指定します。

a_list[index]

これも実体を示しますと次のようになっています。

GetMember(a_list, "Default", index)

つまり [ ] は Default という引数付きプロパティへの参照に置き換わるわけです。

なお現在の仕様において、インデックス無し取得プロパティは引数なしメソッドと変わりありません。ですから次の 2 式はどちらも正当であり等価です。

Something.Property
Something.Property()

また Get/SetMember は直接呼び出すことが可能です。もちろん通常は . (ドット)によるアクセスのほうが簡単ですが、メンバ名を変数で指定する場合には直接の呼び出しが必要になります。


7月も半ばとなりまして

2010年07月14日 | Weblog
そういやブログ放置してた、ということで近況報告をだらだらと。

Windows 2000 が終了ということで、Windows 7 の入った PC を買いました。64bit のデュアルコア。で、まず自作ソフトが正常に動作するかどうかを真っ先に確認しましたが、検証した範囲では不具合は認められませんでした。

それから先日 XNA Framework をインストールしまして、自作ゲームの移植を少しずつ試みているところです。まず最初に既存の VB のコードを C# に変換しなければならない。もちろんオンラインでそういうツールが既に用意されているわけですが、どうも完璧でなく、手作業で修正しなければならない箇所が多数。

それでシステムの内部的な事は、元々 .Net Framework だけで構成されているし、さらに Tick および Render という構造もそのまま流用できるのですが、問題は入出力関係で、これはほぼ全部書き換える必要があります。特に文字関係が厄介。

でもいちおうシューティング ゲームを動作させることには成功しました。たぶん Xbox360 でも動作すると思います。

以上は自作ゲームの話ですが、他人の作ったやつで言えば、今「トロピコ3」を主にプレイしています。


Muzzle Flash ってゲームですが

2010年04月07日 | Xbox360
マズル・フラッシュ。初代 Xbox 用のゲームで、確か 2003, 4 年のあたりに買ったと記憶しています。ジャンルは「コンバットアクション」。まぁ要するに、敵が点在するフィールドを、各種の武器を駆使して目的地まで行き、場合によってはボスのような存在を倒すというものです。続編があるかどうかは知りません。

でもこれ、どうも自分の性格(?)に合わず、全然先に進むことができませんでした。全クリどころか「ミッション1」でさえ無理。というわけで、買ってまもなくほとんどプレイしなくなりました。しかしなんか悔しいので毎年数回引っ張り出して(360 でもプレイ可能)クリアを試みたのですが、いずれも失敗に終わりました。

ところが先月末、「DiRT 2 も終わったことだし、またやってみるか」と思って再度挑戦したら、2日目でミッション1をクリアできました。のみならず、以降のミッションも次々とクリアできて、ついに先日全クリしました。

……こんな昔のゲームについてあれこれ書いてもどうしようも無い気がしますが、続行します。

クリアできた要因は、敵を倒すコツを発見したことに尽きるでしょう。敵がプレーヤーの存在に気付いて武器を構えて撃つまでには、短くない時間がかかります。ですから撃たれる前に標準合わせて撃つ。或いは一旦物陰に隠れて相手が先に撃つのを待つ。その後、リロード(?)中の敵を撃つ。これです。

これはライフルでは無理です。自動的に照準を合わせることができないからです。それに全ての敵を遠くから狙撃できるわけでもありません。ですのでライフルは真っ先に捨て、アサルトライフルかマシンガンを拾います(どれかひとつしか持てません)。それを拾うまでは弾数無限のハンドガンで頑張ります。

ライフルが不利な理由はこれだけではありません。初代 Xbox では分かりませんが 360 ではプログラムの処理が追いつかず、フレームレートがかなり落ちる場面があります。敵の数が多いとひどくなる気がします。そういう状況で遠くの敵に照準を合わせて撃つのは極めて困難です(照準が動かないなら別ですが、このゲームでは上下左右に揺れます)。むしろアサルト ライフル等のほうが、遠くの敵を打つ場合には照準が固定されるし、近くの敵には自動標準で対応できるし、非常に便利です。

これに気付くのに6、7年もかかるなんて。……