JAVA:播放器上的背景渲染?

时间:2018-05-18 11:16:30

标签: java swing applet rendering japplet

我在JAVA中构建我的第一个非常基本的游戏,而不使用任何其他外部库。 我得到的问题是 You can see that the background is rendered over player how can I fix that

您可以看到背景是通过播放器呈现的,我该如何解决这个问题 播放器呈现代码如下

@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;
    }
}

游戏的主要类别可以看到执行流程的顺序。

 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.
    }

我知道用这么少的代码来解决问题对你们来说都很难。但我完全相信这个庞大而强大的社区。

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

2 个答案:

答案 0 :(得分:0)

如果我得到正确的代码,则在渲染播放器后生成背景,导致背景位于播放器顶部。在调用hod.tick()之前,我会尝试调用spawner.tick()(我认为背景来自给定的代码注释)。希望这可以解决这个问题。

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

答案 1 :(得分:0)

我刚刚解决了! 问题出在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!
}

问题出在循环中,游戏中添加的第一个对象是播放器。所以,在渲染背景之后,它首先得到渲染。 这是一个愚蠢的错误。通过改变来做对了.-&gt;

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
}

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