2013-11-26 37 views
2

性質並不因爲窗臺很好地工作。 讓我們用一些圖片:2D像素完美平臺遊戲 - 字符和凸緣

Standing 這裏是綠色的字符,淺綠色是spriteBox。 黑色是爲了「世界」。

在子畫面的底部,在所述紋理寬度的50%時,存在的一個熱點。 (在紅十字會的中心)

我使用這個熱點來檢測從底部碰撞。 一切工作在這裏。

Running 但是如果玩家運行到右跳1個像素太晚了(太遲手段:當熱點是不高於黑色像素= Texture.Width/2 - 1),玩家不能跳躍,將下降。即使身體的50%-1px觸及世界。那就是問題所在。對於着陸

Landing 同樣的問題。

floating

如果我增加更多的熱點,這裏將變成:輸入的字符會上浮。所以我不知道該怎麼辦......

希望你會有所幫助。

+1

下降時,增加了另一個熱點的球員,而不是在說,點你可以添加一個條件= X +(3/4)寬度(75%)和x +(1/4)寬度(25%)。所以只能在跳轉後添加熱點,並在登陸後刪除/忽略它們。 – Colton

+0

@Colton我們應該深入探索你的想法。這是一個非常好的主意,但至少有一個問題:當角色會落在斜坡上時,他會像圖片一樣着地4. – Sharpnel

+0

是的,你基本上試圖有兩種不同的物理定律,造成問題。一個想法是,你的像素角色真的會很大嗎?如果它更小,那麼很少有重疊就不會引人注目。例如,如果腿靠得更近。在這種情況下,一個好的選擇是專注於角色設計而不是編程。 (我認爲這是一個重要的考慮因素。改變設計可以使編程更加清潔。)我會繼續思考它。 – Colton

回答

0

看像蠕蟲類似的比賽,他們有幾個熱點在你的第三個例子,但它們交錯相匹配的精靈,他們也改變取決於所使用的精靈(例如,面對左/右)

有通過下面的Worm2D頁閱讀:

worms2d.info

+0

何!非常非常有趣的文章,即使我沒有找到答案,它可以幫助我很多。謝謝 ! – Sharpnel

+0

我在他的鏈接和Colton的幫助下找到了答案:我必須添加Colton的另外2個熱點,並且必須在主熱點(大約8px下)添加一個「標記」。如果「標記」不與世界相撞,那麼我檢查添加的2個熱點。如果標記與世界相撞,那麼我不檢查它們。 Thx! – Sharpnel

1

下面是我做的一個代碼示例:

public Boolean TouchingPlatformUpdater(Vector2 charapos){ 
    int[] BasePlatforms = { Convert.ToInt16(platformapos1.X), Convert.ToInt16(platformapos1.Y), Convert.ToInt16(platformapos2.X), Convert.ToInt16(platformapos2.Y), Convert.ToInt16(platformapos3.X), Convert.ToInt16(platformapos3.Y), Convert.ToInt16(platformapos4.X), Convert.ToInt16(platformapos4.Y), Convert.ToInt16(platformapos5.X), Convert.ToInt16(platformapos5.Y), Convert.ToInt16(platformapos6.X), Convert.ToInt16(platformapos6.Y), Convert.ToInt16(platformapos7.X), Convert.ToInt16(platformapos7.Y), Convert.ToInt16(platformapos8.X), Convert.ToInt16(platformapos8.Y), Convert.ToInt16(platformapos9.X), Convert.ToInt16(platformapos9.Y), Convert.ToInt16(platformapos10.X), Convert.ToInt16(platformapos10.Y), Convert.ToInt16(platformapos11.X), Convert.ToInt16(platformapos11.Y), Convert.ToInt16(platformapos12.X), Convert.ToInt16(platformapos12.Y), Convert.ToInt16(platformapos13.X), Convert.ToInt16(platformapos13.Y), Convert.ToInt16(platformapos14.X), Convert.ToInt16(platformapos14.Y), Convert.ToInt16(platformapos15.X), Convert.ToInt16(platformapos15.Y) }; 
    for (int Item = 0; Item < BasePlatforms.Length; Item = Item + 2) 
    { 
     try 
     { 
      if (charapos.X > BasePlatforms[Item] - 15 && charapos.X < BasePlatforms[Item] + 60 && charapos.Y > BasePlatforms[Item + 1] - 14 && charapos.Y < BasePlatforms[Item + 1]) 
      { 
       return true; 
      } 
     } 
     catch { } 
    } 
    return false; 

我的「玩家」是一個正方形等等都是平臺,但你可以做的更細的水平與腳區域和世界一樣的東西。它所做的是檢查玩家是否在單一平臺覆蓋的區域內。你必須找到一種方法來使曲線起作用。

總體而言,你的系統是非常錯誤的。只需交換我的概念或找到另一個使用。熱點的事情看起來不會太好。 Id雖然能夠爲你解決,但是你沒有提供任何代碼來幫助你解決問題。如果你在這個問題中得到了代碼,請告訴我[email protected]和我編輯我的答案。

+0

你的遊戲基於瓷磚。例如,Mine是基於像PixelPerfect一樣的遊戲'Worms'。即使在斜坡上,這個系統也能很好地工作。唯一的問題是像本主題中解釋的那樣。我只想知道,如果有人有一個想法,代碼是真的不需要。無論如何,Thx! ^^ – Sharpnel