[英]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.