【问题标题】:Entity is not rendering properly in my game实体在我的游戏中未正确渲染
【发布时间】:2021-03-31 06:30:23
【问题描述】:

最近一直在开发一款游戏(我是初学者,但是很有条理)。 我的问题是我在我的游戏中添加了一个树(静态实体),并且我已经制作了一个实体管理器来使用比较器正确渲染它。它的代码可以在下面看到。

public class EntityManager {

    private Handler handler;
    private Player player;
    private ArrayList<Entity> entities;
    private Comparator<Entity> renderSorter = new Comparator<Entity>() {

        @Override
        public int compare(Entity a, Entity b) {
            if(a.getY() + a.getHeight() < b.getY() + b.getHeight()) { 
                return -1;
            }
            return 1;
        }
        
    };
    
    public EntityManager(Handler handler, Player player) {
        this.handler = handler;
        this.player = player;
        entities = new ArrayList<Entity>();
        addEntity(player);
    }
        
    public void tick() {
        Iterator<Entity> it = entities.iterator();
        
        while(it.hasNext()) {
            Entity e = it.next();
            e.tick();
            //if(!e.active)
                //it.remove();
        }
        entities.sort(renderSorter);
    }
        
    public void render(Graphics g) {
        for(Entity e : entities) {
            e.render(g);
        }
        //player.postRender(g);
    }
    
    public void addEntity(Entity e) {
        entities.add(e);
    }

虽然树像这样正确渲染Tree rendering behind the player

但是我添加的一个新实体(一个 Rock)没有正确渲染,比如 thisrock rendering in front of player

我不知道为什么会这样,或者这是否是一个错误。 如果您需要任何其他详细信息或源代码,请告诉。 谢谢

【问题讨论】:

    标签: java rendering comparator game-development


    【解决方案1】:

    我认为您的代码的组织程度没有问题。 这里的问题在于比较函数,因为:

    tree height + tree y > player height + player y
    

    但是由于石头比玩家小,它会被放在前面,因为你涉及到物体的高度,所以它给出了这个:

    rock y < player y
    

    但是

    rock height + rock y> player height + player y
    

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 2014-01-23
      • 2012-06-23
      • 2018-04-10
      • 2014-10-24
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多