簡體   English   中英

單獨類實例的碰撞檢測-Java處理

[英]Collision detection for separate class instances - Processing Java

我有一個產生敵人的職業,還有一個產生玩家的職業。 目前,他們都是兩個互相靠近的圈子。 我為它們崩潰時提供了碰撞檢測功能,但是我無法使其正常工作。 我已經在類之外創建了函數,並嘗試調用每個類的位置變量,但是它說我不能對非靜態字段進行靜態引用。 我還嘗試了每個類中的碰撞檢測,這也行不通。

class Player {
    int Pos_X;
    int Pos_Y;
    int Speed;

    Player(int x, int y, int speed) {
        this.Pos_X = x;
        this.Pos_Y = y;
        this.Speed = speed;
    }

    void Update() {
        ellipse(Pos_X, Pos_Y, 40, 40);
        Pos_X += Speed;
    }
}

class Enemy {
    int Pos_X;
    int Pos_Y;
    int Speed;

    Enemy(int x, int y, int speed) {
        this.Pos_X = x;
        this.Pos_Y = y;
        this.Speed = speed;
    }

    void Update() {
        ellipse(Pos_X, Pos_Y, 40, 40);
        Pos_X -= Speed;
    }
}

Player Player1;
Enemy Enemy1;
void setup() {
    size (500, 500);
    Player1 = new Player (0, 200, 3);
    Enemy1 = new Enemy (500, 200, 3);
}

void draw() {
    background(200);
    Player1.Update();
    Enemy1.Update();
    if (intersectsBox(Player.Pos_X, Player.Pos_Y)) { 
        ellipse(100, 100, 100, 100);
    }
}

boolean intersectsBox(float X, float Y) {
    if (X > Enemy.Pos_X && X < Enemy.Pos_X + 40) {
        if (Y > Enemy.Pos_Y && Y < Enemy.Pos_Y + 40) {
          return true;
        }
    }
}

要使用類中的變量,您必須引用該類的實例 在您的代碼中, Enemy是一個類, Enemy1是該類的實例。 因此,當您嘗試執行此操作時:

if (X > Enemy.Pos_X && X < Enemy.Pos_X + 40) {

處理會給您一個錯誤,因為您使用的是類,而不是實例。 處理不知道您在說哪個敵人 相反,您必須執行以下操作:

if (X > Enemy1.Pos_X && X < Enemy1.Pos_X + 40) {

現在,Processing知道您正在談論的Enemy類的哪個實例。 您也可以將Enemy的實例作為該函數的參數傳遞,這樣您就可以使用它與多個敵人碰撞。

這只是一條一般性建議:如果遵循標准格式和命名約定,您的代碼將更容易閱讀-縮進代碼(如果在編輯器中按ctrl + t,則處理將為您完成)。類以大寫字母開頭。 方法和變量應以小寫字母開頭。

暫無
暫無

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

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