2017-02-06 97 views
-2

我有一個測試程序,用於構建遊戲的開始。你如何讓你的精靈在屏幕上反射屏幕邊緣?

我在if語句中的速度屬性有問題,應該從屏幕的精靈創建反彈效果,但我似乎無法得到正確的組合。一直在這個工作很長一段時間,似乎無法取得任何進展。任何幫助將不勝感激。

在附註中,在else if方法中有一個名爲getWidth和getHeight的屬性,這應該可以獲得屏幕的高度和寬度。但我不確定它是否確實如此。如果需要,我可以附上該課程。但是下面我將添加我嘗試創建屏幕邊緣的「跳動」效果的方法。

public void checkScreenEdge(Sprite s){ 
    if (s.getX() > getWidth()){ 

    } 
    else if (s.getX() + s.getWidth() >= getWidth()); 
    { 

    } 

    if (s.getY() > getHeight()) { 

    } 
    else if (s.getY() + s.getHeight() >= getHeight()) 
    { 

    } 
} 
+0

不會'x <0 || x +寬度>寬度'是否更合適?那麼你可以修改相反方向的速度'xVelocity * = -1'? – MadProgrammer

+0

希望你以每秒預定的速率給你打電話。 –

+0

@Abhijith:但總是最好計算實時時間片 –

回答

1

如果您使用的是DELTAX和移動deltaY值(或速度值)來決定移動的方向,只是在適當的位置從正的值更改爲負值,反之亦然。例如:

if (s.getX() <= 0) { 
    s.setDeltaX(Math.abs(s.getDeltaX()); 
} else if (s.getX() + s.getWidth() >= MAX) { 
    s.setDeltaX(-Math.abs(s.getDeltaX()); 
} 

我覺得它使用絕對值,而不是直接交換DELTAX值是非常重要的,因爲如果你這樣做:

if (s.getX() <= 0) { 
    s.setDeltaX(-s.getDeltaX()); 
} 

你的風險精靈被「困」在邊緣由於過度拍攝,三角洲被反覆翻轉。

+0

當你說> = Max時,你是什麼意思?什麼價值的最大值? –

+0

@CaptainCode:這是給你決定和定義 - 你的模型的右邊界。 –

+0

難道你不只是指定這是屏幕的大小?我有一個自動包含屏幕大小的類,所以我可以使用這個權利?或者我需要創建一個新變量 –