【问题标题】:I want to render objects depending on other objects y coords [closed]我想根据其他对象的坐标来渲染对象[关闭]
【发布时间】:2015-07-18 23:09:28
【问题描述】:

在我的游戏中,我有一个玩家、敌人和敌人掉落的升级。

首先渲染升级,然后是玩家,然后是敌人,但我希望我的玩家在 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 上找到任何我能理解的内容。

谢谢。

【问题讨论】:

  • 如果您能告诉我们问题的重要细节并显示相关代码,您的问题会更好。这些详细信息包括您正在使用哪个 GUI 库、您当前如何渲染您的项目。如果是 Swing,那么渲染顺序非常重要,将决定图像的 z 顺序。
  • 您绘制的第一个对象将位于底部。第二个将在顶部。因此,根据需要构建您的绘画逻辑。

标签: java object render


【解决方案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);
}

注意,这要求所有渲染的元素都继承自ElementType,这需要实现getY()render(Graphics).ElementTypecan either be aninterfaceor(abstract) class`用任意名称,只需替换与您的代码匹配的名称。

【讨论】:

  • 是的,这听起来像我想要的,但我不知道该怎么做。这是我第一次。关于我如何编码的任何建议?
  • 将所有元素添加到Collection,对其进行排序(Collections.sort(...))并按给定顺序呈现结果Collection。我会编辑帖子
猜你喜欢
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2020-12-19
  • 2021-03-21
相关资源
最近更新 更多