Je travaille sur la compréhension de la détection de collision et j'ai décidé de créer un programme qui simule Pacman. Tout simplement quand un Pacman se heurte à un fantôme, il meurt.Problèmes de dessin à mon ClientRectangle en utilisant GDI + & C#
Je spécifie combien de Pacmen je voudrais et dans mon MainForm_Paint (appelé quand mon contrôle doit peindre) je crée un tableau de la quantité spécifiée d'une classe que j'ai créée appelée Pacman. Je continue ensuite à construire chaque Pacman dans le tableau avec les paramètres spécifiés.
Quand tout est dit et fait, je continue ensuite à essayer de dessiner tous les Pacmen à l'intérieur d'une boucle. Un seul dessin à l'intérieur du ClientRectangle, quel que soit le nombre de dessins que je spécifie. Quand j'élargis mon ClientRectangle, je vois des petites lignes ou ce qui semble être un ruban d'un Pacman. J'ai vérifié pour s'assurer que les positions de départ sont dans le système ClientRectangles x, y et ils sont. Je suis juste perplexe quant à pourquoi ils ne dessinent pas à l'intérieur du ClientRectangle cependant. . :(Toute aide serait appréciée ici
est ce que j'ai codé pour MainForm_Paint
private void MainForm_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Rectangle rect = this.ClientRectangle;
Pacman[] pacmen = new Pacman[parameters[0]];
int whichPacman = 0;
for (int i = 0; i < parameters[0]; i++)
{
pacmen[i] = new Pacman(rect, parameters[1]);
}
while (play)
{
pacmen[whichPacman].PacmanDraw(g, rect);
// Must reset whichPac if whichPac + 1 == parameters[0]
// Break out while testing
if ((whichPacman + 1) == parameters[0])
{
break;
}
else
{
whichPacman++;
}
}
}
Voici ce que j'ai codé pour ma classe Pacman:
public Pacman(Rectangle rect, int radius)
{
Random rand = new Random();
this.xpos = rand.Next(rect.Left, rect.Left + rect.Width);
this.ypos = rand.Next(rect.Top, rect.Top + rect.Height);
this.radius = radius;
}
public void PacmanDraw(Graphics g, Rectangle rect)
{
GraphicsPath path = new GraphicsPath();
path.AddArc(this.xpos, this.ypos, (float) this.radius * 2, (float) this.radius * 2, 0, 360);
path.CloseFigure();
g.FillPath(new SolidBrush(Color.AliceBlue), path);
path.Dispose();
}
Merci pour votre aide et désolé si c'est une utilisation inappropriée de SOF