JAVA: 播放器的背景渲染?

JAVA: background rendeing over the player?

我正在 JAVA 中构建我的第一个非常基础的游戏,没有使用任何其他外部库。 我遇到的问题是

你可以看到背景渲染在播放器上我该如何解决 播放器渲染代码如下

@Override
    public void render(Graphics g) {
        int bulletcount = 0;
        //render player
        g.setColor(color);
        g.fillRect(x,y,32,32);
        if(shooting) {
            handler.add(new bullet(x + 8, y - 24, ID.bullet, handler));
            bulletcount++;
        }
    }

后台渲染代码如下

public class background extends GameObject{
    private int width;
    private Random random = new Random();
    public background(int x, int y , ID id,Handler handler){
        super(x,y,id,handler);
        valy = 2;
        width = getWidth(x,800);
    }
    public void tick() {
        y += valy;
        if(y>650)
            handler.remove(this);
    }
    public void render(Graphics g) {
        g.setColor(Color.white);
        g.fillRoundRect(x,y,width,10,1,1);
    }

    public int getWidth(int x,int width1){
        int wid;
        while(true){
            if((width - x) > 35) {
                wid = random.nextInt((width-x-35));
                break;
            }
            else{
             x -= 10;
            }
        }
        return wid;
    }
}

主游戏class可以看到执行流程的顺序

 private void render() {
    // render the Game
        BufferStrategy bs = this.getBufferStrategy();
        if(bs == null)
        {
            this.createBufferStrategy(3);
            return;
        }

        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0,0,WIDTH,HEIGHT);
        handler.render(g);
        hod.render(g);    //handler is rendering every object in game
        g.dispose();
        bs.show();
    }

    private void tick() {
    //update Game
        handler.tick();
        hod.tick();
        spawner.tick(); // background is generating in spawner class.
    }

我知道用这么少的代码来说明问题对你们所有人来说都很难。但我对这个庞大而强大的社区充满信心。

提前致谢。不要犹豫编辑并指出我的错误谢谢!

如果我的代码正确,背景将在渲染播放器后生成,这会导致背景位于播放器之上。在调用 hod.tick() 之前,我会尝试调用 spawner.tick()(我猜背景来自给定的代码注释)。希望这应该能解决这个问题。

private void tick() { //update Game 
         spawner.tick();
         handler.tick();
         hod.tick();
}

我刚刚有了解决方案! 问题出在 handler.render(g);方法:- 以下是;

    private void render(Graphics g){
      for(int i =0; i<gameobj.size(); i++){//gameobj is linkedlist of GameObject
         GameObject tempobj = gameobj.get(i);
         tempobj.render(g);//getting every object and rendering them!
}

问题出在循环中,游戏中添加的第一个对象是 player.So,它先渲染,然后再渲染背景。 这是一个愚蠢的 mistake.which 通过以下更改得到正确的。->

private void render(Graphics g){
  for(int i = gameobj.size()-1; i > 0; i--){//gameobj is linkedlist of GameObject
     GameObject tempobj = gameobj.get(i);
     tempobj.render(g);//getting every object and rendering them! from reverse
}

因此,最后一个对象首先呈现,第一个对象最后呈现。 和平!