2015-07-18 94 views
-2

在我的遊戲中,我有一名玩家,敵人和敵人掉落的升級。我想根據其他物體渲染物體y座標

升級首先呈現,然後是玩家,然後是敵人,但我希望我的玩家背後的Y值大於玩家的對象,並且我希望我的玩家在Y值較小的對象前面價值比玩家。好的,好的。這是我的渲染類。

package main; 

import java.awt.Graphics; 

import javax.swing.JPanel; 

@SuppressWarnings("serial") 
public class Render extends JPanel { 
    public Game game; 

    public Render(Game game) { 
     this.game = game; 
    } 

    protected void paintComponent(Graphics g) { 
     game.world.render(g); 
     game.tile.render(g); 

     game.upgrade.render(g); 

     game.player.render(g); 
     game.bullet.render(g); 
     game.gun.render(g); 
     game.sword.render(g); 

     game.soldier.render(g); 
     game.blood.render(g); 

     game.hud.render(g); 
    } 

} 

我不知道如何去做這件事。如果有人能給我一些示例代碼,那就太棒了。

再次,我想要做的是呈現Y值較小的對象具有較大的Y值前面的對象。

我沒有真正找到Stack Overflow上的任何東西,我也能理解得太好。

謝謝。

+1

如果您能告訴我們您的問題的重要細節並顯示相關代碼,您的問題會更好。這些詳細信息包括您正在使用的GUI庫,當前如何渲染項目。如果是Swing,那麼渲染順序非常重要,並且將決定圖像的z順序。 –

+0

您繪製的第一個對象將位於底部。第二將是最重要的。所以根據需要構建您的繪畫邏輯。 – camickr

回答

1

這很簡單:按降序的y座標對所有對象(包括播放器)進行排序。並按照這個順序渲染它們。

public void render(Graphics g){ 
    List<ElementType> elements = new ArrayList<>(); 
    elements.add(player); 
    elements.add(title); 
    ... 

    //sort the list such that elements with higher y-value at lower indices than elements 
    //with lower y-value 
    Collections.sort(elements , (a , b) -> Integer.compare(b.getY() - a.getY()); 

    for(ElementType element : elements) 
     element.render(g); 
} 

注意,這要求它需要實現getY()render(Graphics).的ElementType can either be an接口or(摘要)與任意名稱class`是從ElementType渲染繼承的所有元素,只需更換與那些符合你的名字碼。

+0

是的,這聽起來像我想要的,但我不知道如何做到這一點。這是我第一次。關於如何編碼的建議? –

+0

將所有元素添加到一個'Collection'中,對它進行排序('Collections.sort(...)'),並按給定的順序渲染生成的'Collection'。我將編輯帖子 – Paul