2010-11-27 96 views
3

我在c#中創建了一個突破遊戲,我使用布爾值來告訴程序是否要繪製磚塊,我已經使用矩形類來放置繪製的矩形,以便能夠告訴如果球擊中的磚塊刪除一個矩形類

這是我迄今爲止所使用的代碼:

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

我想刪除矩形類磚已被其設置爲零的打擊後,但是矩形仍然存在,仍然可以被擊中,觸發磚頭代碼。

任何建議,對不起,如果我不是很清楚。

+6

理想情況下,您將從磚塊集合(或類似的東西)中移除磚塊實體。就像你不能「刪除一個整數」一樣,你不能「刪除一個矩形」。也許你應該重新考慮一下你的程序的結構? – strager 2010-11-27 14:11:01

回答

1

這不會很好地擴展,因爲您似乎是在爲每個磚塊聲明一個新變量。

考慮將Rectangle s變成List的一些變種。然後遍歷該列表以查看磚是否被擊中。當它有,從列表中刪除它,並重繪。

0

無需創建新的Rectangle,已經有靜態成員爲此:

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

OMG,我一直在尋找類似的事情,但被我找到了解決方案感到驚訝!你可以只用VisualBasic中的PowerPack,它是隨我的版本的Visual Studio 2008

這裏是一個示例代碼,將繪製一個矩形在一個文本框,即我給它一個定義邊框 [代碼]

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() 

代碼是自我描述的,但如果您有任何問題,請留言... 是的,如果您想刪除矩形,只需將控件(矩形或ShapeContainer全部)繪畫,沒有麻煩!