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);    
    } 

我的问题是:如何可以让他们在相同的图形绘制对象,或者它们都只是展示,而不是现在仅吃豆子?

+0

哦,所以我的问题是什么,是如何可以让他们在相同的图形绘制对象,或者它们都只是展示,而不是现在只有吃豆子。 – user2511562

+0

它看起来像他们使用相同的图形...是你的实际代码?如果是这样,那么在move()中如何实际完成绘图? –

我认为你应该考虑一下你的班级结构。 我会建议使用这样的事情作为一个起点:

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