C#游戏开发中快速的游戏循环

C#游戏开发中快速的游戏循环的实现。参考《精通C#游戏编程》一书。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;



namespace GameLoop

{

    [StructLayout(LayoutKind.Sequential)]

    public struct Message

    {

        public IntPtr hWnd;

        public Int32 msg;

        public IntPtr wParam;

        public IntPtr lParam;

        public uint time;

        public System.Drawing.Point p;

    }



    public class FastLoop

    {

        [System.Security.SuppressUnmanagedCodeSecurity]

        [DllImport("User32.dll", CharSet = CharSet.Auto)]

        public static extern bool PeekMessage(

            out Message msg,

            IntPtr hWnd,

            uint messageFilterMin,

            uint messageFilterMax,

            uint flags);



        PreciseTimer _timer = new PreciseTimer();

        public delegate void LoopCallback();

        LoopCallback _callback;



        public FastLoop(LoopCallback callback)

        {

            _callback = callback;

            Application.Idle += new EventHandler(OnApplicationEnterIdle);

        }



        void OnApplicationEnterIdle(object sender, EventArgs e)

        {

            while (IsAppStillIdle())

            {

                _callback();

            }

        }



        private bool IsAppStillIdle()

        {

            Message msg;

            return !PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);

        }



    }



}

 

---恢复内容结束---

你可能感兴趣的:(游戏开发)