LoginSignup
6
6

More than 5 years have passed since last update.

C#でDxLibDotNetを使うときのTips

Last updated at Posted at 2014-03-28

画像ロードを簡単にしたい!!!

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(); 

を追加するだけで済む。というのを教えていただきました。

6
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6