c#图形对象相互重叠
好的,我正在用c#创建一个吃豆人游戏,我已经搞定了吃豆人。现在我正试图让我的怪物加入游戏 我创建了一个包含移动方法和所有内容的类。现在的问题是,我正在另一个图形对象上绘制怪物和吃豆人。它们都是我面板的大小,当我运行代码时,只有吃豆人出现,怪物正在工作,但吃豆人正在移动的图形对象下面 这是绘制怪物和吃豆人的代码:c#图形对象相互重叠,c#,object,graphics,drawing,pacman,C#,Object,Graphics,Drawing,Pacman,好的,我正在用c#创建一个吃豆人游戏,我已经搞定了吃豆人。现在我正试图让我的怪物加入游戏 我创建了一个包含移动方法和所有内容的类。现在的问题是,我正在另一个图形对象上绘制怪物和吃豆人。它们都是我面板的大小,当我运行代码时,只有吃豆人出现,怪物正在工作,但吃豆人正在移动的图形对象下面 这是绘制怪物和吃豆人的代码: private void timMove_Tick(object sender, EventArgs e) { Bitmap bitmap = new Bitma
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);
}
我的问题是:如何让它们在同一个图形对象上绘图,或者它们都只是显示,而不是现在只显示pacman?我认为您应该总体考虑您的类结构。 我建议以这样的方式作为起点:
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);
}
}
抽象类游戏对象
{
公共抽象无效移动();
公开摘要作废图(图g);
}
Pacman类:游戏对象
{
公共覆盖无效移动()
{
//更新Pacman的位置,检查碰撞。。。
}
公共覆盖无效绘制(图形g)
{
//在其x和y坐标处绘制Pacman
}
}
类怪物:游戏对象
{
公共覆盖无效移动()
{
//更新怪物的位置。。。
}
公共覆盖无效绘制(图形g)
{
//在怪物当前位置绘制怪物
}
}
类游戏类
{
私人吃豆人(Pacman),;
私人怪物;
私有列表_gameobjects=新列表();
公共游戏类()
{
_吃豆人=新吃豆人();
_怪物=新怪物();
_gameobjects.Add(_pacman);
_游戏对象。添加(_怪物);
}
私有void TimerTick()
{
//更新所有游戏对象
foreach(var gameobject in_gameobjects)
{
gameobject.Move();
}
//将每个游戏对象绘制到位图
位图位图=新位图(panBox.Width、panBox.Height);
使用(Graphics g=Graphics.FromImage(位图))
{
foreach(var gameobject in_gameobjects)
{
游戏对象绘制(g);
}
}
//将位图绘制到屏幕上
使用(Graphics g=panBox.CreateGraphics())
{
g、 DrawImage(位图,0,0);
}
}
一般来说,您应该了解继承/Polimorphism和类。
多晶型:
课程:
哦,我的问题是,如何让他们在同一个图形对象上绘图,或者他们都只是显示而不是现在只显示pacman。在我看来,他们使用的是同一个图形……这是您的实际代码吗?如果是,那么在move()中绘图实际上是如何完成的?