簡體   English   中英

2D數組中的Java運動

[英]java movement in a 2d array

在我制作的游戲中,我制作了一個基本的碰撞檢測系統。

我當前的方法解釋如下:

我鍛煉玩家在下一步游戲中的位置:

double checkforx = x+vx;
double checkfory = y+vy;

然后,我檢查是否與mapArray中的塊(1)發生沖突。

public static Boolean checkForMapCollisions(double character_x,double character_y){

    //First find our position in the map so we can check for things...
    int map_x = (int) Math.round((character_x-10)/20);
    int map_y = (int) Math.round((character_y-10)/20);

    //Now find out where our bottom corner is on the map
    int map_ex = (int) Math.round((character_x+10)/20);
    int map_ey = (int) Math.round((character_y+10)/20);

    //Now check if there's anything in the way of our character being there...

    try{
        for(int y = map_y; y <= map_ey; y++){
            for(int x = map_x; x <= map_ex; x++){
                if (levelArray[y][x] == 1){
                    return true;
                }
            }
        }
    }catch (Exception e){
        System.out.println("Player outside the map");
    }
    return false;
}

如果返回true {nothing}

如果返回false {玩家物理學}

我需要玩家能夠降落在方塊上然后走來走去,但是我找不到合適的教程。

有人可以給我一個有關如何運行碰撞檢測和/或運動的想法嗎?

這個問題分為兩部分。 碰撞檢測,意味着確定一個體積是在接觸另一個體積還是與另一個體積相交。 第二是碰撞響應。 碰撞反應是物理部分。

我將在這里介紹沖突檢測,因為這主要是您所要求的。

為地圖定義一個類,如下所示:

int emptyTile = 0;
//this assumes level is not a ragged array.
public boolean inBounds(int x, int y){
    return x>-1 && y>-1 && x<levelArray[0].length && y<levelArray.length;
}

public boolean checkForCollisions(Rectangle rectangle){
    boolean wasCollision = false;
    for(int x=0;x<rectangle.width && !wasCollision;x++){
        int x2 = x+rectangle.x;
        for(int y=0;y<rectangle.height && !wasCollision;y++){
             int y2 = y+rectangle.y;
             if(inBounds(x2,y2) && levelArray[y2][x2] != emptyTile){
                 //collision, notify listeners.
                 wasCollision=true;
             }
        }
    }
}

不要將您的方法設為靜態。 您可能想要多個關卡實例嗎? 靜態用於需要共享狀態的狀態,該狀態在一個類的多個實例之間保持不變。 級別數據肯定不會在每個級別上保持恆定。

而不是傳遞坐標,而是嘗試傳遞整個矩形。 此矩形將是角色的邊界框(邊界框有時也稱為AABB,這意味着與Axis對齊的邊界框,如果您正在在線閱讀此類教程,則僅供參考)。類決定其邊界矩形是什么,而不是地圖類的責任。 該地圖應全部用於渲染,以及矩形是否與不為空的重疊圖塊。

很抱歉,我的解釋很拙劣,但這是我的github代碼,它將更好地幫助您。

https://github.com/Quillion/Engine

只是為了解釋我的工作。 我有角色對象( https://github.com/Quillion/Engine/blob/master/QMControls.java ),它具有矢量和一個名為standal的布爾值。 每次布爾值站立都是錯誤的。 然后,將其傳遞給引擎以檢查是否發生碰撞,如果發生碰撞,則站立狀態為真,y vector為0。對於x vector,只要您按任意箭頭鍵,就可以將對象的xvector設置為所需的任何值。 在更新循環中,您可以根據速度移動給定的框。

暫無
暫無

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

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