所以我在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)
如果您根据其中一个玩家的位置移动背景,其位置由其位置决定,因此无需变量“bgx”,您可以随时根据玩家的位置计算此位置。
您可以通过创建这样的简单方法来实现:
public int backgroundPosition(){
if (x > ex){
return x;
} else {
return ex;
}
}
然后将打印背景的行更改为:
myBackground.setBounds(-backgroundPosition(),0,10000,755);