簡體   English   中英

Collission似乎不起作用

[英]Collission doesn't seem to work

我正在嘗試在生物和玩家之間發生碰撞,所以我試圖將兩個生物都添加到單個Rectangle中

   protected bool Collide()
    {

        PlayerRect = new Rectangle((int)playerPos.X, (int)playerPos.Y, playerFrameSize.X, playerFrameSize.Y);
        MobsRect = new Rectangle((int)greenMobPos.X + (int)orangeMobPos.X, (int)greenMobPos.Y + (int)orangeMobPos.Y, greenMobFrameSize.X + orangeMobFrameSize.X, greenMobFrameSize.Y + orangeMobFrameSize.Y);

        return PlayerRect.Intersects(MobsRect);
    }

多數民眾贊成在我的代碼,但只有我的“ greenMob”正確碰撞,第二個暴徒“ orangeMob”不會碰撞。 我應該分開檢查它們是否相互碰撞?

protected bool Collide()
{

    PlayerRect = new Rectangle((int)playerPos.X, (int)playerPos.Y, playerFrameSize.X, playerFrameSize.Y);
    MobsRectGreen = new Rectangle((int)greenMobPos.X , (int)greenMobPos.Y , greenMobFrameSize.X , greenMobFrameSize.Y ;
    MobsRectOrange = new Rectangle((int)orangeMobPos.X,  (int)orangeMobPos.Y,  orangeMobFrameSize.X, orangeMobFrameSize.Y);

    return PlayerRect.Intersects(MobsRectGreen ) || return PlayerRect.Intersects(MobsRectOrange )  ;
}

您可以為每個生物和玩家計算邊界框。 如果您的播放器與綠色邊界框相交,則會與綠色碰撞。 如果與橙色邊框相交,則與該邊框碰撞。 || 表示邏輯或。

您的支票將綠色和橙色X以及y以及x + y的大小加在一起,除非它們彼此靠近且為“一個”形式,否則這沒有多大意義。 (即就像一個帶屋頂的房子,每個都單獨建模,但它們一起移動/放置-盒子對於屋頂沒有多大意義)。

創建一個耗費大量生命並檢查玩家是否像這樣碰撞的方法可能會更好:

private bool CollideWithMob(Mob m)
{
    // do the check for player and m here
}

protected bool Collide()
{
    return CollideWithMob(greenMob) || CollideWithMob(orangeMob); 
}

並將Pos和FrameSize作為要檢查的屬性放入class Mob 如果拳頭檢查是否為false,則此檢查將對玩家Rectangle進行兩次計算,但組合方法不會,但這樣會更清晰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM