Java赛车游戏背景不正常

时间:2014-07-09 11:36:47

标签: java jlabel sprite imageicon

所以我在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正在移动则不会。

这是一个非常简单的代码,你们可以教我如何修复它吗?我爱你。

1 个答案:

答案 0 :(得分:0)

如果您根据其中一个玩家的位置移动背景,其位置由其位置决定,因此无需变量“bgx”,您可以随时根据玩家的位置计算此位置。

您可以通过创建这样的简单方法来实现:

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

然后将打印背景的行更改为:

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