自更新图纸c#

本文关键字:更新 | 更新日期: 2023-09-27 17:53:20

我正在尝试为电脑游戏制作外部地图。因此,我制作了一个带有图片框的表单应用程序,其中包含我的地图图像。现在我想用GDI在地图上画些小方块。我已经用Graphics.DrawRectangle让它工作了。现在我想每0.2秒更新一次矩形的位置。我怎么做呢?

我的当前源(我想用自动更新替换按钮):

    public partial class Form1 : Form
{
    //choords local player
    int localX;
    int localY;
    int running;
    const int Basex = 0x05303898;
    const int Basey = 0x05303894;
    const string Game = "ac_client";
    //map drawing
    Pen aPen = new Pen(Color.Black);
    Graphics localp;

    //choords enemy
    //permission to read process memory
    const int PROCESS_VM_READ = 0x0010; //needed for reading memory

    [DllImport("kernel32.dll")]
    public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
    [DllImport("kernel32.dll")]
    public static extern bool ReadProcessMemory(int hProcess,
    int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    }
    private void button1_Click(object sender, EventArgs e)
    {
        if (Process.GetProcessesByName(Game).Length > 0)
        {
            Process process = Process.GetProcessesByName(Game)[0];
            IntPtr procHandle = OpenProcess(PROCESS_VM_READ, false, process.Id);
            int bytesRead = 0;
            byte[] buffer = new byte[24]; //'Hello World!' takes 12*2 bytes because of Unicode 

            // 0x0046A3B8 is the address where I found the string, replace it with what you found
            ReadProcessMemory((int)procHandle, Basex, buffer, buffer.Length, ref bytesRead);
            localX = BitConverter.ToInt32(buffer, 0);
            LBlocalx.Text = Convert.ToString(Math.Ceiling(Convert.ToDecimal(localX)));

            ReadProcessMemory((int)procHandle, Basey, buffer, buffer.Length, ref bytesRead);
            localY = BitConverter.ToInt32(buffer, 0);
            LBlocaly.Text = Convert.ToString(Math.Ceiling(Convert.ToDecimal(localY)));

            localp = pictureBox1.CreateGraphics();
            localp.DrawRectangle(aPen, (Convert.ToInt32(Convert.ToString(Math.Ceiling(Convert.ToDecimal(localX))))/1000), (Convert.ToInt32(Convert.ToString(Math.Ceiling(Convert.ToDecimal(localY))))/1000), 10, 10);
        }
        else
        {
            MessageBox.Show("Error! Process not running.");
        }
    }

自更新图纸c#

如果您存储两个时间变量(DateTime),其中一个具有您开始检查2秒差异的时间,另一个具有当前时间,并且在每次迭代开始时验证两次差异是否为2秒。请记住,第一个变量是当时间差为2秒或您第一次开始检查时间差时的时间。

你也可以使用Timer类并设置一个计时器,每隔2秒做一些事情。

定时器类引用:https://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.110%29.aspx