JavaFX:我应该使用具有多个ImageView的静态图像

时间:2017-07-31 11:01:57

标签: java javafx static imageview

我正在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")
}

如果我这样做,我就会摆脱静态图像。

1 个答案:

答案 0 :(得分:1)

您的第一种方法占用了更多内存,因为您将所有图像保存在内存中,但它们可以快速检索。第二种方法是即时加载图像,因此可以节省内存,但不会在处理时间内为其付费。

这是标准的缓存权衡。你必须问自己图像的加载/需要频率,你需要多快发生这种情况,以及你可以节省多少内存。如果您可以节省内存,我会使用Map<ObjectType, Image>,如果您使用switch,则HashMapTable all_keycodes keycode VARCHAR(50) 查找更清晰,更快(请参阅注释)。