2009/05/27(水)StaticResourceLoader.cs
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); } } }
……。
まず口から出てくるのは「キメェ」の一言かもしれない。
ただ、大富豪的プログラミング時代においては、中規模程度のゲームまではこういうリソースの持ち方もありかなぁと思わないでもない。
(自分も含めて)ゲーム作り初心者が多いうちのサークルでは、この前もテクスチャリソースがリークして大変なことになってたけど。
ここを読んでくださっているみなさんはどう思われますか、なんつて。
ここを見てる人はきっとリソース管理なんて朝飯前で、こんなことしないのかもしれない……。
あー、ゲーム作りてぇなぁ……。