c#绘制对象的图形对象
问题描述:
好的,所以我在c#中创建了一个pacman游戏,并且我得到了pacman。现在我试图让我的怪物进入游戏。c#绘制对象的图形对象
我创建了一个移动方法和一切的类。现在问题是我正在绘制怪物和pacman在不同的图形对象上。它们都是我的面板的大小,当我运行代码时只有pacman出现,怪物正在工作,但它在pacman正在移动的图形对象下。
此画两个怪物吃豆子的代码:
private void timMove_Tick(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap(panBox.Width, panBox.Height);
Graphics g = Graphics.FromImage(bitmap);
foreach (Monster mon in monsters)
{
mon.move(g);
}
foreach (Pacman pac in characters)
{
pac.move(g);
}
Graphics g2 = panBox.CreateGraphics();
g2.DrawImage(bitmap, 0, 0);
}
我的问题是:如何可以让他们在相同的图形绘制对象,或者它们都只是展示,而不是现在仅吃豆子?
答
我认为你应该考虑一下你的班级结构。 我会建议使用这样的事情作为一个起点:
abstract class GameObject
{
public abstract void Move();
public abstract void Draw(Graphics g);
}
class Pacman : GameObject
{
public override void Move()
{
//Update the Position of Pacman, check for collisions, ...
}
public override void Draw(Graphics g)
{
//Draw Pacman at his x and y coordinates
}
}
class Monster : GameObject
{
public override void Move()
{
//Update the Position of the Monster, ...
}
public override void Draw(Graphics g)
{
//Draw the Monster at his current position
}
}
class GameClass
{
private Pacman _pacman;
private Monster _monster;
private List<GameObject> _gameobjects = new List<GameObject>();
public GameClass()
{
_pacman = new Pacman();
_monster = new Monster();
_gameobjects.Add(_pacman);
_gameobjects.Add(_monster);
}
private void TimerTick()
{
//update all GameObjects
foreach (var gameobject in _gameobjects)
{
gameobject.Move();
}
//Draw every single GameObject to the Bitmap
Bitmap bitmap = new Bitmap(panBox.Width, panBox.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
foreach (var gameobject in _gameobjects)
{
gameobject.Draw(g);
}
}
//Draw the Bitmap to the screen
using (Graphics g = panBox.CreateGraphics())
{
g.DrawImage(bitmap, 0, 0);
}
}
你应该看一看继承/ Polimorphism和类一般。 Polimorphism: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/polymorphism 类: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/classes
哦,所以我的问题是什么,是如何可以让他们在相同的图形绘制对象,或者它们都只是展示,而不是现在只有吃豆子。 – user2511562
它看起来像他们使用相同的图形...是你的实际代码?如果是这样,那么在move()中如何实际完成绘图? –