我不知道为什么我的图像不会重新绘制
本文关键字:新绘制 绘制 为什么 我的 图像 我不知道 | 更新日期: 2023-09-27 18:34:23
我的图像肯定是移动的,但无论我做什么,我都无法得到它,所以图像重新绘制!游戏管理器绘制猫,form1 将绘制参数和对象传递给游戏管理器。
表格1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
public partial class Form1 : Form
{
GameManager myGM = new GameManager();
int dir = 0;
public Form1()
{
InitializeComponent();
newGame();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (this.myGM != null)
this.myGM.paint(e.Graphics);
//e.Graphics.DrawImage(imgMouse.Images[0], pointXMouse, pointYMouse);
//e.Graphics.DrawImage(imgCat.Images[0], 50, 100);
//e.Graphics.DrawImage(imgCheese.Images[0], 75, 100);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up)
{
dir = 0;
}
if (e.KeyCode == Keys.Right)
{
dir = 1;
}
if (e.KeyCode == Keys.Down)
{
dir = 2;
}
if (e.KeyCode == Keys.Left)
{
dir = 3;
}
}
public void newGame()
{
timer1.Start();
myGM.newGame(imgCat, imgMouse, imgCheese, this);
}
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Refresh();
}
public int getDir()
{
return dir;
}
}
}
游戏管理器:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
class GameManager
{
Form1 myForm;
Cat ca1 = new Cat();
Mouse m = new Mouse();
Cheese ch = new Cheese();
int amount = 5;
int catdir = 0;
Timer time = new Timer();
public ImageList imgCat = new ImageList();
public ImageList imgMouse = new ImageList();
public ImageList imgCheese = new ImageList();
public void newGame(ImageList cat, ImageList mouse, ImageList cheese, Form1 form)
{
imgCat = cat;
imgMouse = mouse;
imgCheese = cheese;
myForm = form;
time.Start();
}
public void move()
{
ca1.Move(amount, catdir);
m.Move(amount, catdir);
}
public void paint(Graphics g)
{
g.DrawImage(imgCat.Images[0], ca1.getLocation());
}
private void time_Tick(object sender, EventArgs e)
{
move();
getDir();
myForm.Refresh();
}
public void getDir()
{
catdir = myForm.getDir();
}
}
}
猫:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
class Cat: Moveable
{
Random myCLoc = new Random();
private Moveable myCatMove;
public Point p = new Point(100, 100);
int dir = 0;
public void Move(int n, int d)
{
dir = d;
if (dir == 0)
{
p.Y = p.Y - n;
}
if (dir == 1)
{
p.X = p.X + n;
}
if (dir == 2)
{
p.Y = p.Y + n;
}
if (dir == 3)
{
p.X = p.X - n;
}
}
public void changeDirection()
{
}
public Point getLocation()
{
return p;
}
public void paint(PaintEventArgs e)
{
}
}
}
无论我做什么,它都不会重新粉刷!
仔细检查计时器是否已启用并触发了 PictureBox.Paint 事件(不要害怕使用调试器)。如果它没有帮助,请尝试不使用PictureBox.Paint
事件和Refresh
方法,而是直接在 Timer.Tick 处理程序中调用myGM.paint
这
在PictureBoxes
和其他Controls
中一直对我有用
PictureBox.Refresh();
PictureBox.Update();
或
PictureBox.Update();
PictureBox.Refresh();
虽然我不记得是哪个了
我不得不向 GameManager 构造函数添加time.Tick +=new EventHandler(time_Tick);
,显然这就是计时器连接 time_tick 方法的方式。