Java Racing Game фон не движется должным образом

1

Поэтому я делаю гоночную игру в java

У меня 2 игрока

Игрок 1 использует клавишу со стрелкой вверх для перемещения и пробел для торможения. Игрок 2 использует клавишу "Вниз" для перемещения вправо.

Я хочу, чтобы фон прокручивался правильно, любая помощь? У меня есть этот код:

     import java.awt.*;
     import javax.swing.*;
     import javax.swing.Timer;
     import java.awt.event.*;
     import java.util.*;

     public class GLMBRace extends JFrame implements ActionListener
     {

    JLabel myBackground=new JLabel(new ImageIcon("GLMBRace\\background.png"));
    JLabel player=new JLabel(new ImageIcon("GLMBRace\\player_r.gif"));
    JLabel enemy=new JLabel(new ImageIcon("GLMBRace\\enemy_r.gif"));

    int bgx=0;//background x
    int x=0,y=0,speed,prevx; //player x,y,speed
    int ex=0,ey=0,espeed; //enemy
    int time=50;

    Timer timer=new Timer(time,this);

    public GLMBRace(){
    Container c=getContentPane();
    c.setLayout(null);
        player.setBounds(x,y,128,128);
        enemy.setBounds(ex,ey,96,96);
        myBackground.setBounds(bgx,0,10000,755);
    c.add(player);
    c.add(enemy);
    c.add(myBackground);
        setVisible(true);
        setSize(1366,768);

    addKeyListener(new KeyAdapter(){
        public void keyPressed(KeyEvent e){

            String key = e.getKeyText(e.getKeyCode());  
                if(key.equals("Space"))
                {
                    if(speed>0)
                    speed--;
                    timer.start();
                }
                if(key.equals("Up"))
                {
                    if(speed<20)
                    {
                    speed++;
                    ex-=speed;
                    }
                    timer.start();
                }
                if(key.equals("Down"))
                {
                    if(espeed<20)
                    {
                    espeed++;
                    x-=espeed;
                    }
                    timer.start();
                }
            }});//end keyevent

    }
    public void actionPerformed(ActionEvent e){
        if(e.getSource()==timer)
        {

            if(x>ex)
            {
            bgx-=speed;
            }
            if(ex>x)
            {
            bgx-=espeed;
            }
            player.setBounds(x,y,128,128);
            enemy.setBounds(ex,ey,96,96);
            myBackground.setBounds(bgx,0,10000,755);
        }
    }
    public static void main (String[] args) {
        GLMBRace s = new GLMBRace();
        s.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    }
}

Я действительно хочу иметь фоновый прокруток правильно вокруг спрайтов, скажем, если игрок 1 быстрее, фон сосредоточен на игроке 1. Но если игрок 2 быстрее, он будет центрироваться на игроке 2. Код работает только в том случае, если 1 спрайт но не будет, если 2 движется.

Это очень простой код, можете ли вы, ребята, научить меня, как его исправить? Я люблю тебя.

  • 0
    Что именно это "фон"? Это (должно быть) просто выделение для победившего игрока?
  • 0
    Нет, это изображение, которое является фоном игры, как гоночный трек. Это картина, все JLabels - картинки
Показать ещё 1 комментарий
Теги:
jlabel
sprite
imageicon

1 ответ

0

Если вы перемещаете свой фон в зависимости от положения одного из игроков, его позиция определяется их положением, поэтому нет необходимости иметь переменную "bgx", вы всегда можете считать эту позицию положением игрока.

Вы можете сделать это, создав простой способ:

public int backgroundPosition(){
    if (x > ex){
        return x;
    } else {
        return ex;
    }
}

И затем измените свою линию для печати фона:

myBackground.setBounds(-backgroundPosition(),0,10000,755);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню