Поэтому я делаю гоночную игру в 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 движется.
Это очень простой код, можете ли вы, ребята, научить меня, как его исправить? Я люблю тебя.
Если вы перемещаете свой фон в зависимости от положения одного из игроков, его позиция определяется их положением, поэтому нет необходимости иметь переменную "bgx", вы всегда можете считать эту позицию положением игрока.
Вы можете сделать это, создав простой способ:
public int backgroundPosition(){
if (x > ex){
return x;
} else {
return ex;
}
}
И затем измените свою линию для печати фона:
myBackground.setBounds(-backgroundPosition(),0,10000,755);