从文本文件加载图像和数据并附加到它(Java)

时间:2016-12-08 07:15:14

标签: java file-io textbox textfield bufferedimage

我创建了一个平台游戏,其中每种类型的游戏对象都分配给特定的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;
}

感谢任何想法或建议!

1 个答案:

答案 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