我有这个项目,我必须实现一个游戏。游戏是Yahtzee,掷骰子后我需要改变图片。因此,当我调用该函数并得到一个函数时,骰子图像应更改为另存为diceFace1(f.e.)的另一个。这是预加载的图像之一
<ImageView fx:id="dice1" fitHeight="66.0" fitWidth="75.0" nodeOrientation="INHERIT" pickOnBounds="true" preserveRatio="true">
<HBox.margin>
<Insets left="10.0" right="30.0" top="20.0" />
</HBox.margin>
<image>
<Image url="@../Dices/beforeRollDice.png" fx:id="dice1img"/>
</image>
</ImageView>
这是该函数的蓝图:
public void rollDice() {
Dice Dice = new Dice();
int diceVal = Dice.roll();
File imgPath = new File("@../Dices/Side1.jpeg");
System.out.println(diceVal);
switch (diceVal) {
case 1:
dice1.setImage(new Image(imgPath.toURI().toString()));
break;
case 2:
//dice1.setImage(new Image(imgPath.toURI().toString()));
break;
case 3:
//dice1.setImage(new Image(imgPath.toURI().toString()));
break;
case 4:
//dice1.setImage(new Image(imgPath.toURI().toString()));
break;
case 5:
//dice1.setImage(new Image(imgPath.toURI().toString()));
break;
case 6:
//dice1.setImage(new Image(imgPath.toURI().toString()));
break;
}
}
}
问题是当我调用该函数时,新的图像将不会出现,而旧的图像将变为空白。
以下是mre,演示从不同文件夹加载图像:
import java.io.File;
import java.net.URL;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;
public class ImagesFromFile extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
primaryStage.setTitle("Load Images From File");
primaryStage.setScene(new Scene(new ImagePanel()));
primaryStage.show();
}
public static void main(final String[] args) {
launch(args);
}
}
/**
<pre>
Folders structure:
-Project
| - src
| | - package
| | | - ImagePanel.java
| | | - red_dot.png
| |
| | - resources
| | - blue_dot.png
|
| - black_dot.png
</pre>
*/
class ImagePanel extends TilePane{
public ImagePanel() {
try{
//not embedded resource. doesn't work when packaged in jar
File file = new File("black_dot.png");
Image imageFromProjectFolder = new Image(file.toURI().toString());
ImageView view1 = new ImageView(imageFromProjectFolder);
URL url = getClass().getResource("red_dot.png");
Image imageFromSourceFolder = new Image(url.openStream());
ImageView view2 = new ImageView(imageFromSourceFolder); //or new ImageView("/package/red_dot.png");
url = getClass().getResource("/resources/blue_dot.png");
Image imageFromReourceFolder = new Image(url.openStream());
ImageView view3 = new ImageView(imageFromReourceFolder); //or new ImageView("/resources/blue_dot.png");
getChildren().addAll(view1, view2, view3);
} catch (Exception ex) {ex.printStackTrace();}
}
}