簡體   English   中英

如何使用Java在png圖像上創建網格圖?

[英]How do i create a grid map on a png image with java?

事實是,我正在幫助一個Java項目的朋友來實現大學,我們必須重制MSX的Knightmare。 游戲已經相當成熟,但是我們不知道如何與場景中的東西(如圓柱和河上的橋)產生碰撞。 為了做到這一點,我認為我們可以在png上創建邏輯“網格映射”(整個級別是此圖像,像在普通圖像上一樣在游戲中調用)並對其進行邏輯處理,只是布爾邏輯。

因此,我建議這樣做的基本方法是根據我們的想法計算出此網格的2D陣列。 我們是否可以使用某些工具以某種方式更輕松或自動地完成此任務?

Knightmare原始版本視頻

這就是我們在游戲中使用的圖像

我將嘗試回答標題問題,這似乎很重要。

我前段時間用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.

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