JAVA: фон рендеринга поверх игрока - PullRequest
0 голосов
/ 18 мая 2018

Я создаю свою первую очень простую игру на 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 голосов
/ 29 мая 2018

У меня только что было решение!Проблема была в 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!
}

Проблема была в цикле, первый объект, добавленный в игру, является игроком. Итак, он получал рендер первым после того, как фон рендерился.Это было глупой ошибкой. Правильно, если следовать следующим изменениям .->

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
}

, поэтому последний объект отображается первым, а первый - последним.Мир!

0 голосов
/ 19 мая 2018

Если я правильно понял код, фон создается после рендеринга плеера, что приводит к тому, что фон находится поверх плеера.Я бы попытался вызвать spawner.tick () (где, я думаю, фон исходит от вашего комментария к коду) перед вызовом hod.tick ().Надеюсь, что это должно решить эту проблему.

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