2009/05/27(水)StaticResourceLoader.cs

はてブ数 2009/05/27 02:48 計算機な日記::ソフト作りつーさ

GSDK on C# で。

これで

namespace Tsukikage.GameSDK.Base
{
  public interface IDXResourceLoader<ResourceType>
  {
    ResourceType LoadResource(ResourceType target);
  }
}

こうして

namespace Tsukikage.GameSDK.Direct3D
{
  public class D3DDevice : DXResource,
    IDXResourceLoader<D3DTexture>, IDXResourceLoader<D3DFont>
  {
    public D3DTexture LoadResource(D3DTexture target)
    {
      LoadTexture(target);
      return target;
    }
  }
}

こうやって


using Ref = System.Reflection;
namespace Tsukikage.GameSDK.Base
{
  /// <summary>
  /// staticリソース読み込み支援クラス
  /// </summary>
  public class StaticResourceLoader
  {
    static Dictionary<Type, StaticResourceLoader> loaders = new Dictionary<Type, StaticResourceLoader>();
    public static void Load<TypeToLoad>(Type target, IDXResourceLoader<TypeToLoad> loader)
    {
      lock (loaders)
      {
        if (loaders.ContainsKey(target) ) 
          return;
        
        loaders[target] = new StaticResourceLoader();

        foreach (Ref.FieldInfo fi in target.GetFields(Ref.BindingFlags.Public | Ref.BindingFlags.Static))
        {
          if (fi.FieldType == typeof(TypeToLoad) && fi.GetValue(null) != null)
            loader.LoadResource((TypeToLoad)fi.GetValue(null));
        }
      }
    }
  }
}

で、こう。


namespace WindowsGame1.Scenes
{
  public class Textures
  {
    public static D3DTexture Circle = new D3DTexture("circle.png");
  }

  class Scene1 : Scene
  {
    public override void Initialize()
    {
      StaticResourceLoader.Load<D3DTexture>(typeof(Textures), GSDK.D3D);
    }
  }
}

……。

まず口から出てくるのは「キメェ」の一言かもしれない。

ただ、大富豪的プログラミング時代においては、中規模程度のゲームまではこういうリソースの持ち方もありかなぁと思わないでもない。

(自分も含めて)ゲーム作り初心者が多いうちのサークルでは、この前もテクスチャリソースがリークして大変なことになってたけど。

ここを読んでくださっているみなさんはどう思われますか、なんつて。

ここを見てる人はきっとリソース管理なんて朝飯前で、こんなことしないのかもしれない……。

あー、ゲーム作りてぇなぁ……。

2009/05/11(月)固定IP→DHCP設定変更バッチファイル

はてブ数 2009/05/11 05:23 のんびり日記::大学つーさ

実行前の状態を保存して、元に戻すバッチファイルを作る機能付き。
今日使うかもしれないので一応作ってみた。

デスクトップのパスとか取得できたらもっとよかったが、
バッチファイルじゃこの辺が限界かしら。
素直にWSHとかC#とか使えばよかったかもしれない。

まぁ、こんなもん使わなくとも、普通に netsh 打てばいいんだけどさ。

続きを読む

2009/05/11(月)パソコン総合サポート あれこれ

はてブ数 2009/05/11 01:45 のんびり日記::大学つーさ

生協でパソコン総合サポートという名のパソコン講座をやるんです。

まずは、事務局スタッフとして受講生データの管理やらサポーター(講師・アシスタント)データの管理やらやってる。他諸々、思いつく限りの(主に技術面での)雑用とか。

いよいよ、明日、というか今日、月曜日から講義がスタートする。スタートしてしまえば事務局としての仕事は一段落する、はず。今後はサポーターとして気を引き締めて向かう所存。受講生のみなさん、サポーターのみなさん、改めてよろしくね!

しかしまぁ……。

続きを読む

2009/05/07(木)ブロック崩し

はてブ数 2009/05/07 05:32 計算機な日記::ソフト作りつーさ

そういえば5月に入ってから日記を書いていないじゃないか。

ブロック崩しを作っている。

作っているといっても、まだ、1文字もコードは書いてないので
作ろうかなぁと考えていると言った方が正しいか。

簡単だと思っていたけど1つわからないことがでてきてしまった。

ボールが長方形であるブロックにぶつかったときに、
X軸速度成分を反転するのか、Y軸速度成分を反転するのか。
これを判定するスマートなアルゴリズムとはなんだろか。

ブロックの縦横の辺の長さの比とatanを使う?
ボールの半径分太らせた長方形を用意して、ボ線分と円の交差ール中心が今どの矩形内に収まっているかを判定する?
ブロックの4辺に対して、線分と円の交差判定を適用する?
いずれの方法でもやればできそうなのだけど、なにぶん面倒くさがりなもので。

それに、ボールは離散時間上を動くわけでブロックや壁にめり込む。
単に衝突を矩形判定してると、2つのブロックに同時にぶつかりうる。
よくよく考えないと2回反射して貫通弾になってしまうだろう。

現フレームで移動するはずのブロックの軌道を線分で表して、
衝突面での反射をシミュレーションするとか。

ブロックを円にするという誰もが思いつきそうなアイディアを採用すると、
当たり判定は円判定になって、反射方向はベクトルを射影して計算するーとか。

でも、よりうまく反射させるには、同じように軌道を線分化、
ボール半径分太らせたブロック円との交差判定、
めり込むはずだった分の距離を、その交点で反射、か……。

とまぁ、改めていろいろ考えてみると、
アクションゲーム作りを学ぶにはブロック崩しはなかなかいい題材なのかも。
そのうちプロジェクト自体放り出しそうだなぁω

2009/04/30(木)人間の脳は2つに分かれている

はてブ数 2009/04/30 00:26 ゲーム日記::LunaticRaveつーさ

いや、サーセン。タダのゲーム日記です。

最近片手プレイが楽しげ。
右手はまぁ右手なのだけど、ことに左手プレイは頭の中がふわふわするようでおもしろい!

「脳が止まっている」「全然押せてない」と思っているのに繋がるコンボ。
「脳が止まっている」「全然押せてない」は、
左手を動かす方の脳(右脳?)と反対側の脳(左脳?)で考えているから、
こんな不思議な感覚になるのかなぁ、とか。

少なくとも私の場合は物事考える感じるにあたって、左脳優位ってことなのかな?
左脳は右手しかセンシングしてないから全然押せてない? そもそも動かしてもないし。

人間工学の授業で脳梁を切るとどうのこうのという実験の話は聞いたけれど、
こう繋がっていても、右脳と左脳のリンクはそんなに強力ではないのだなぁ。

うーん……。今日も、ゲーセン行ってきました日記を見て、
ゲーセン行けば会えたのになぁ、行けば良かったなぁ みたいな。

部室PCのハードディスクを掃除中

なんかクラウド管理しようとか言う人がいるので。
データドライブの内容を丸々持ち帰って整理。
過去作とか企画倒れっぽいゲームの資料とかわらわら出てくる出てくる。

私が入る前に卒業されたOBの方が作ったとあるゲームのヘルプより。

むだばなし――"使い捨て言語"

 GSDではシナリオをプログラムに埋め込まず、スクリプトインタプリタ(別に作った台本ファイルを解釈して、それに応じて動作するプログラム)を作るのが流行しています。"SEED"もそのひとつです。メンバー全員がプログラミングをする訳ではないので、作業を巧く分割することが重要になっているのです。ところが、今ではスクリプト記述用の特殊な言語が乱立して、凄い状況になっています。汎用システムを使うことに比べてかなり無駄が多く、生産性の悪いことです。GSDは汎用システムでゲームを作りたくない人の集まりであるということなのでしょう。

入学して最初に携わったQoFは言語作ったっけなぁ、分業が必要になるGSDではここら辺は今も昔もかわらないのな! とか思った。
もっとも、今作はついにC#で、APIを実装したクラスを継承してシナリオを書いてもらっているのだけどω

歴史を刻んでゆくのだー。

0x20000ひっと!

気がついたら、アクセスカウンタが 131072(=2^{17})(無駄にtex記法)を超えてしまっているのです。
いつも、見ていただいてありがとうなのですよ!
次は 262144(=40000_{(16)}=2^{18})を目指すのです。
……4~5年後くらいかな^^;

2009/04/27(月)休日が終わる

はてブ数 2009/04/27 06:38 のんびり日記::のんびり日記つーさ

いやぁ、2週間本当に大変だった。

そして今、実に14日ぶりの「どこかに出かける必要のない日」が終わろうとしている。

日曜日は無駄に夕方まで寝てて、それからネットをふらふらしてたらこうして、朝になった。
なんか、やることたくさんあるのに何も片付かなくて、ひどくもったいなかったかなぁ。

寒くてエアコンもつけていた。もう春であるはずなのに。

続きを読む

2009/04/23(木)危機感焦燥感

はてブ数 2009/04/23 02:09 のんびり日記::のんびり日記つーさ

シャワーを風呂に変更して少しゆっくり入った。
そしてふと考えて。気づく。

このペースで行くと、間に合わない。
忙しいとか言ってる場合じゃない……。

PCSSの優先順位を高く設定しすぎてて、他、特にサークルのライブラリ開発が滞りすぎている。ライブラリに手を入れていてはキリがないのだが、やはり整備はしたい。その上でゲームを作るっていうんだから……。

正直、今も体力的に結構ギリギリ感があるのだけど、そんなことを言っている場合ではないというか、言っていられないというか。
むちゃくちゃな一週間のスケジュールの合間に作られる細切れ時間のやりくりを。
体力を戻して、多少の無茶も効くようにしておかないと、この先がヤバすぎる……。

風呂に入る前は、シャワー浴びて寝ようと思ってたけど、やはり作業か……ぐぅ。