![](/img/trans.png)
[英]How do I create an image mask from a PNG with transparency in Java?
[英]How do i create a grid map on a png image with java?
事實是,我正在幫助一個Java項目的朋友來實現大學,我們必須重制MSX的Knightmare。 游戲已經相當成熟,但是我們不知道如何與場景中的東西(如圓柱和河上的橋)產生碰撞。 為了做到這一點,我認為我們可以在png上創建邏輯“網格映射”(整個級別是此圖像,像在普通圖像上一樣在游戲中調用)並對其進行邏輯處理,只是布爾邏輯。
因此,我建議這樣做的基本方法是根據我們的想法計算出此網格的2D陣列。 我們是否可以使用某些工具以某種方式更輕松或自動地完成此任務?
我將嘗試回答標題問題,這似乎很重要。
我前段時間用Java編寫了一個小平台游戲,在那里我編寫了一個名為comprobarColisiones()的方法(檢查沖突),我每次都會調用它
// Check collisions
comprobarColisiones();
h.mover(pasadas); //Move hero
// Moving enemies
if (h.x > en.getX()){
en.mover(h.getdx(), h.getIzq(),pasadas);
}
if (h.x> en2.getX()){
en2.mover(h.getdx(), h.getIzq(),pasadas);
}
// Moving static objects (rocks)
roca1.mover(h.getdx(),h.getIzq());
roca2.mover(h.getdx(),h.getIzq());
roca3.mover(h.getdx(),h.getIzq());
// REPAINTING
repaint();
// A time calculation that I use to control the game speed somewhere
tiempoAnteriorTipito = System.currentTimeMillis();
當我指的是“靜態對象”時,它只是將自我移動的對象與隨英雄移動而滾動的對象區分開來,在您的游戲中(如我的),可能不會有任何靜態對象(嗯,可能是分數和東西),甚至岩石也會滾動。
public void comprobarColisiones(){
// Getting bounds
Rectangle r1 = en.getBounds();
Rectangle r2 = en2.getBounds();
Rectangle rec_roca1 = roca1.getBounds();
Rectangle rec_roca2 = roca2.getBounds();
Rectangle rec_roca3 = roca3.getBounds();
// Getting bounds and resolving collisions with shooting objects
ArrayList martillos = Heroe.getMartillos();
for (int i = 0; i < martillos.size(); i++) {
Martillo m = (Martillo) martillos.get(i);
Rectangle m1 = m.getBounds();
if (r1.intersects(m1) && en.vive())
{
en.setVive(false);
m.visible = false;
}
else if (r2.intersects(m1)&& en2.vive())
{
en2.setVive(false);
m.visible = false;
}
}
// Checking if hero touches enemies
Rectangle heroecuad = h.getBounds();
if (heroecuad.intersects(r1)&&en.vive()){
perdio = true;
System.out.println("PERDIO CON EL ENEMIGO 1");
}
if (heroecuad.intersects(r2)&&en2.vive()){
perdio = true;
System.out.println("PERDIO CON EL ENEMIGO 2");
}
// Checking if hero touches static objects
if(heroecuad.intersects(rec_roca1)){
System.out.println("CHOCO ROCA 1");
}
if(heroecuad.intersects(rec_roca2)){
System.out.println("CHOCO ROCA 2");
}
if(heroecuad.intersects(rec_roca3)){
System.out.println("CHOCO ROCA 3");
}
}
我創建了敵人和靜態內容,並在加載場景時將其放置,如下所示:
en = new Enemigo(800, ALTURA_PISO+8);
en2 = new Enemigo(900, ALTURA_PISO+8);
roca1 = new Roca(1650, ALTURA_PISO+17);
roca2 = new Roca(2200, ALTURA_PISO+17);
roca3 = new Roca(3400, ALTURA_PISO+17);
// Being the first number the initial X-Pos and the second the initial Y-Pos, this will change everytime the hero moves, of course
可能在您的游戲中,您將地圖的任何區域定義為可探索的,並添加一些幻影對象以檢查與英雄的交集並停止其移動。 就我所見,英雄不應該探索水和柱子。
希望這會給您一些想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.