【问题标题】:Java Racing Game background not moving properlyJava 赛车游戏背景无法正常移动
【发布时间】:2014-07-09 11:36:47
【问题描述】:

所以我正在用java制作赛车游戏

我有两个玩家

玩家 1 使用向上箭头键移动和空间制动。 玩家 2 使用 Down 键向右移动。

我想让背景正确滚动,有什么帮助吗?我有这个代码:

     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 个正在移动,则不会。

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

【问题讨论】:

  • 那个“背景”到底是什么?它(应该)只是为获胜玩家突出显示?
  • 不,它是游戏的背景图像,就像赛道一样。这是一张图片,所有的JLabel都是图片
  • 啊,你有 10000px 宽的图片,你在前进时会“移动”回来,对吧?

标签: java jlabel sprite imageicon


【解决方案1】:

如果您根据玩家的位置移动背景,则其位置由他们的位置决定,因此不需要变量“bgx”,您始终可以通过玩家的位置来计算该位置。

您可以通过创建这样的简单方法来做到这一点:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多