2011-10-07 124 views
0

在我的侧面卷轴中,我想要3个背景保持循环。每当你通过一个舞台时,它会调用nextStage()函数,将它发送到下一个背景。在类:我需要有一个背景数组?

package com.erikbalen.game.rpg; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 
public class World extends JPanel implements ActionListener{ 

/** 
* 
*/ 
private static final long serialVersionUID = 2834816426699432121L; 
Player p1; 
Image background; 
Timer time; 

public World() { 
    p1 = new Dps(); 
    addKeyListener(new AL()); 
    setFocusable(true); 
    ImageIcon icon = new ImageIcon("C:\\Program Files (x86)\\EriksRPG\\Images\\Backgrounds\\background.png"); 
    background = icon.getImage(); 
    time = new Timer(5, this); 
    time.start(); 
} 

public void actionPerformed(ActionEvent e) { 
    p1.move(); 
    repaint(); 
} 

public void paint(Graphics g) { 
    super.paint(g); 
    Graphics g2d = (Graphics2D) g; 

    g2d.drawImage(background, 0, 0, null); 
    g2d.drawImage(p1.getImage(), p1.getX(), p1.getY(), null); 

} 

private class AL extends KeyAdapter { 
    public void keyReleased(KeyEvent e) { 
     p1.keyReleased(e); 
    } 

    public void keyPressed(KeyEvent e) { 
     p1.keyPressed(e); 
    }  
    }  
} 

基本上我想知道我怎样才能使所谓的背景图像阵列,加载这三个文件,并进行)调用nextStage(方法loads background[stage] and if stage > 2 stage = 0

回答

1

一个可能的解决方案:

使“背景”在一个时间到背景[0],背景3个元素

Image[] background = new Image[3]; 

负载三个背景图像之一的阵列[1]和背景[2]。

推进时创建新的私有变量,或许所谓的阶段,增量:

private int stage = 0; 

public void nextStage() { stage++; } 

最后,在paint()方法,画出你想要的背景下,根据舞台的值:

g2d.drawImage(background[stage % 3], 0, 0, null); 
+0

非常感谢!我遇到了一点小问题,但是我修正了它,因为我让nextStage成为一种静态方法,所以我可以从播放器类中访问它。 –

+0

与问题无关,但您可以考虑给玩家一个存储游戏对象的成员变量(将其传递给构造函数)。你可能不会一次执行多个阶段,所以在这种情况下它并不重要,但总的来说,“使其变为静态以提高其可见性”的做法可能会导致您的问题(例如:if你给了玩家一个盾牌变量,并使它变成静态的,以便敌人可以访问它,然后再将它变成双人游戏,你会发现这两个玩家共享一个盾牌,而不是每个都有自己的!) – Ben

相关问题