我正在爲uni工作,我必須在Visual Studio 2010中使用C#Win Forms創建Breakout遊戲。目前,我正在專注於只有一塊磚被摧毀,所以在擴展它之前,我已經讓這些技工失效了。更簡單的方法來檢查碰撞?
澄清我的當前程序:我使用圖片框作爲圖形對象和計時器來創建動畫效果。球可以在每個幀中跳過1到10個像素 - 這是創建球的隨機起始矢量的一部分。
這工作得很好,直到它檢查球是否'撞到'我繪製的磚。我所擁有的是if語句,用於檢查球是否位於與磚的輪廓對應的圖片框上的任何座標處。我知道這個邏輯很好,因爲它在一段時間內都有效。但是,由於球位置的「跳躍」變化,我需要爲我的if語句添加+/- 5像素的緩衝區。
這是哪裏的問題出現了,因爲我的if
聲明(二,真)是真的複雜,因爲它是:
// Checks if ball hits left side or top of brick
if (((x >= brickX) && (x <= (brickX + 50)) && (y == brickY)) ||
((y >= brickY) && (y <= (brickY + 20)) && (x == brickX)))
{
brickHit = true;
}
// Check if ball hits right side or bottom of brick
else if ((((x >= brickX) && (x <= brickX + 50)) && (y == (brickY + 20))) ||
(((y >= brickY) && (y <= brickY + 20)) && (x == brickX + 50)))
{
brickHit = true;
}
對於澄清:x和y是球brickX的座標而brickY是矩形磚左上角的座標(寬50像素,高10像素)。
有什麼辦法可以簡化上面的if語句嗎?如果我可以讓它們變得更簡單,我知道在'緩衝區'(它只需要5個像素在磚的輪廓的任一側,以允許球的位置改變)中添加會容易得多。
如果需要進一步澄清,請問 - 我在5點12分寫這個問題,所以我知道我可能有點不清楚。
哦,很好。不過,問題是:它是否返回真/假值? – 2010-11-13 05:32:00
@Saladin @Computer在這裏不要挑剔,但1.膨脹返回void,你不能調用.Contains就可以了。您需要創建矩形,將Inflate作爲單獨的呼叫進行調用,然後調用其中包含的對象,也是2.在Inflate上擡頭,它只會移動增加的磚塊大小向右,如果您需要在左側和頂部需要+5緩衝區,如果您只需要左側,右側和底部的空間,然後偏移(-5,0)然後膨脹(10,5),需要首先偏移矩形。 – pstrjds 2010-11-13 05:56:47