我正在JavaFX中构建一个棋盘游戏类型的游戏。不同的GameObject具有不同的ObjectType。我现在正在存储一些静态图像,并在需要新的ImageView时引用它们。
public class GameObject extends ImageView {
private static final Image BG_IMG = new Image(RESPATH + "BG.png");
private static final Image NULL_IMG = new Image(RESPATH + "NULL.png");
private static final Image T2_IMG = new Image(RESPATH + "T2.png");
private static final Image T3_IMG = new Image(RESPATH + "T3.png");
private static final Image T4_IMG = new Image(RESPATH + "T4.png");
private static final Image T5_IMG = new Image(RESPATH + "T5.png");
private static final Image T6_IMG = new Image(RESPATH + "T6.png");
//ObjectType is an enum type
private final ObjectType OBJECT_ID;
private Image img;
public GameObject(ObjectType t) {
OBJECT_ID = t;
setImage();
setImage(img);
}
private void setImage() {
switch (OBJECT_ID) {
case T2: img = (T2_IMG);
break;
case T3: img = (T3_IMG);
break;
case T4: img = (T4_IMG);
break;
case T5: img = (T5_IMG);
break;
case T6: img = (T6_IMG);
break;
case BG: img = (BG_IMG);
break;
default: img = NULL_IMG;
break;
}
}
我想知道这是否是实现图像的好方法,因为我将为多个ImageView使用相同的图像。
我实现这个的另一种方式:
private void setImage() {
img = new Image(RESPATH + OBJECT_ID.name() + ".png")
}
如果我这样做,我就会摆脱静态图像。
答案 0 :(得分:1)
您的第一种方法占用了更多内存,因为您将所有图像保存在内存中,但它们可以快速检索。第二种方法是即时加载图像,因此可以节省内存,但不会在处理时间内为其付费。
这是标准的缓存权衡。你必须问自己图像的加载/需要频率,你需要多快发生这种情况,以及你可以节省多少内存。如果您可以节省内存,我会使用Map<ObjectType, Image>
,如果您使用switch
,则HashMap
比Table all_keycodes
keycode VARCHAR(50)
查找更清晰,更快(请参阅注释)。