【发布时间】: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