2010-11-27 6 views
3

Je crée un jeu de rôle en C#, j'utilise des valeurs booléennes pour indiquer au programme s'il faut dessiner la brique ou non, j'ai utilisé des classes de rectangle pour placer les rectangles dessinés pour pouvoir dire si la balle a frappé les briquesSuppression d'une classe de rectangle

Ce code est i utilisé jusqu'à présent:

Rectangle brick4 = new Rectangle((490), (50), (50), (20)); 
bool hitBrick4 = brick4.Contains(x, y); 
if (hitBrick4) 
{ 
    brick4 = new Rectangle(0, 0, 0, 0); 
    brick4draw = false; 
    yChange = -yChange; 
    bricksdestroyed = bricksdestroyed + 1; 
    lblBricksDestroyed.Text = "Bricks Hit: " + bricksdestroyed; 
} 

Je suis en train de supprimer la classe rectangle après la brique a été frappé par la mise à zéros, mais le rectangle est toujours là et peut toujours être touché, déclenchant le code brique hit.

Toutes les suggestions, désolé si je ne suis pas très clair.

+6

Idéalement, vous devez supprimer l'entité brique d'une collection de briques (ou quelque chose comme ça). Vous ne pouvez pas "supprimer un rectangle" comme vous ne pouvez pas "supprimer un entier". Peut-être devriez-vous repenser un peu la structure de votre programme? – strager

Répondre

1

Cela ne va pas bien évoluer, puisque vous semblez déclarer une nouvelle variable pour chaque brique.

Pensez à mettre les Rectangle dans une List d'une certaine variété. Passez ensuite en revue cette liste pour voir si une brique a été touchée. Quand c'est le cas, retirez-le de la liste et redessinez.

0

Pas besoin de créer un nouveau rectangle, il est déjà membre statique pour cela:

if (hitBrick4 && brick4 != Rectangle.Empty) 
{ 
    brick4 = Rectangle.Empty; 
    ... 
} 
0

OMG, je cherchais quelque chose de similaire, mais a été surpris par la solution que je trouve! Vous pouvez simplement utiliser PowerPack VisualBasic, il est inclus avec ma version de Visual Studio 2008

Voici un exemple de code qui dessinez un rectangle sur une zone de texte, à savoir que je donne une bordure personnalisée [code]

Dim x = TextBox1.Location.X 
Dim y = TextBox1.Location.Y 
Dim width = TextBox1.Width 
Dim height = TextBox1.Height 
Dim ShapeContainer1 As New Microsoft.VisualBasic.PowerPacks.ShapeContainer 
Me.Controls.Add(ShapeContainer1) 
Dim RectangleShape1 As New Microsoft.VisualBasic.PowerPacks.RectangleShape 
ShapeContainer1.Shapes.AddRange(New Microsoft.VisualBasic.PowerPacks.Shape() {RectangleShape1}) 
RectangleShape1.Location = New System.Drawing.Point(x - 1, y - 1) 
RectangleShape1.Size = New System.Drawing.Size(width + 1, height + 1) 
RectangleShape1.BorderColor = Color.MistyRose 
ShapeContainer1.Refresh() 

Le code est auto-descriptif mais si vous avez un problème, laissez simplement un message ... Oui, si vous voulez supprimer le rectangle, il suffit de disposer les contrôles (soit le Rectangle ou le ShapeContainer en entier), non peinture, pas de tracas!