我创建了一个平台游戏,其中每种类型的游戏对象都分配给特定的rgb值,因此我可以通过在绘画中绘制并加载图像来创建关卡。现在我已经加载了前两个级别,我可以通过文本字段输入获得第3级的路径并加载自定义的第3级。每个级别都需要一个指向级别的png图像的路径,以及进入下一级别所需的硬币数量。我希望从一个文本文件中加载每个级别,其中每行可能具有级别编号,图像路径和硬币数。我可以对其进行自定义,以便用户只需在我的自定义菜单中通过3个文本字段添加这些参数即可添加或更改关卡。这样我的设计师也可以帮助创建关卡,并且从文本文件中读取,我认为从长远来看,当有20多个关卡时,代码将会少得多。有关如何加载和附加到此文件的任何想法?这就是我现在正在做的事情:
public static BufferedImageLoader loader = new BufferedImageLoader();
public Handler(Camera cam){
this.cam = cam;
level1 = loader.loadImage("/level1.png");
level2 = loader.loadImage("/level2.png");
}
public void changeLevel(){
clearLevel();
cam.setX(0);
Player.coinCount = 0;
if(Game.LEVEL == 1){
Player.maxCoins = 4;
LoadImageLevel(level1);
}
if(Game.LEVEL == 2){
LoadImageLevel(level2);
Player.maxCoins = 11;
}
if(Game.LEVEL == 3){
System.out.println(Data.levelPath);
try{
level3 = loader.loadImage(Data.levelPath);
LoadImageLevel(level3);
} catch (Exception e) {
e.printStackTrace();
System.out.println("error loading custom level");
}
}
}
public Menu(Game game, Handler handler){
this.handler = handler;
pathField = new JTextField(10);
levelField = new JTextField(10);
coinField = new JTextField(10);
if(Game.gameState == STATE.Menu){
int selection = JOptionPane.showConfirmDialog(
null, getPanel(), "Input Form : "
, JOptionPane.OK_CANCEL_OPTION
, JOptionPane.PLAIN_MESSAGE);
if(selection == JOptionPane.OK_OPTION) {
Data.levelPath = pathField.getText();
Data.level = levelField.getText();
Data.coinAmount = Double.valueOf(coinField.getText());
System.out.println(Data.levelPath + Data.level + Data.coinAmount);
}
}
private JPanel getPanel(){
JPanel basePanel = new JPanel();
basePanel.setOpaque(true);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new GridLayout(3, 2, 5, 5));
centerPanel.setBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5));
centerPanel.setOpaque(true);
JLabel mLabel1 = new JLabel("Enter path: (e.g., /level1.png) ");
JLabel mLabel2 = new JLabel("Enter which level to load the image in: ");
JLabel mLabel3 = new JLabel("Enter the amount of coins you must collect");
centerPanel.add(mLabel1);
centerPanel.add(pathField);
centerPanel.add(mLabel2);
centerPanel.add(levelField);
centerPanel.add(mLabel3);
centerPanel.add(coinField);
basePanel.add(centerPanel);
return basePanel;
}
感谢任何想法或建议!
答案 0 :(得分:0)
实际上只是....
给定 input.getText()的值为1#path#20
,它有级别编号,图像路径和硬币数分隔#
令牌。
public static String [] separateFields(String input, String separator){
String[] separatedValues = input.split("#");
return separatedValues;
}
调用函数,定义参数。
// input is textfield.getText() , and the value of input is 1#path#20
String [] result= separateFields(input, "#");
然后你得到
int level = Integer.parseInt(result[0]); // level
String aPath = result[1]; // path
int numCoins = Integer.parseInt(result[2]); // number of coins