画像ロードを簡単にしたい!!!
image.cs
namespace Test
{
static class Images
{
public static ImgHandler Ins = new ImgHandler(){FileName=@"images\hoge.png"};
//ここに上のように使いたい画像を追加する
}
public class ImgHandler
{
public ImgHandler()
{
CsLib.RegisterImage(this);
}
public int Handler_ID
{
set;
get;
}
public string FileName
{
set;
get;
}
}
class CsLib
{
private static Queue<ImgHandler> loadImageQueue;
public static void RegisterImage(ImgHandler h)
{
loadImageQueue.Enqueue(h);
}
//この関数をDxLib_Init()の後に呼び出せばOK
public static void LoadImages()
{
while (loadImageQueue.Count > 0)
{
var img = loadImageQueue.Dequeue();
int ptr = DX.LoadGraph(img.FileName);
img.Handler_ID = ptr;
}
}
}
}
原理はわかりませんが自動的にQueueに追加されます。
whileで3つの関数の戻り値を処理するとか大変
一般的にDxLibDotNetを使うときは
- DX.ScreenFlip()
- DX.ProcessMessage()
- DX.ClearDrawScreen()
を一気にするのが鉄則(だと思います)。
しかし処理1個1個にif(0 == DX.Hogehoge())などと書いていては日が暮れてしまいます。
そこで
enumerable.cs
private static IEnumerable<int> ProcessWorks()
{
yield return DX.ScreenFlip();
yield return DX.ProcessMessage();
yield return DX.ClearDrawScreen();
}
という関数を用意して
work.cs
public static bool Process()
{
return ProcessWorks().All(x => x == 0);
}
こうする。
ループごとに処理を追加したくなっても
aone.cs
yield return DX.Hogehoge();
を追加するだけで済む。というのを教えていただきました。