我正在使用JavaFX制作TCG游戏。我创建protobuf文件来代表各种游戏状态。以下是我写的一些protobuf片段:
message Board {
repeated GameObject mainDeck = 1;
repeated GameObject hand = 2;
repeated GameObject graveyard = 3;
repeated GameObject exile = 4;
repeated Character character = 5;
}
message Character {
optional GameObject character = 1;
repeated GameObject item = 2;
optional Position position = 3 [default = STAND];
}
JavaFX正在使用" Observable"事情很重要。例如,我将此代码写入" bind"角色形象及其状态:
private final ObjectProperty<Character> character = new SimpleObjectProperty<>(this, "character", Character.getDefaultInstance());
private void initialize() {
// Other initialize code omitted
ImageView img = new ImageView();
StringBinding url = Bindings.select(character, "character", "imageUrl");
img.imgProperty.bind(() -> ImageCache.getImage(url.get()), url);
ObjectBinding<Position> p = Bindings.select(character, "position");
img.rotateProperty.bind(
Bindings.createDoubleBinding(() -> {
if (p.get() == null) {
return 0.0;
}
switch (p.get()) {
case REST:
return 90.0;
case REVERSE:
return 180.0;
default:
return 0.0;
}
}, p));
}
请注意,我在这里使用了不可变的protobuf对象。
然而,正如你所知,TCG的游戏状态是高度动态的,并且变化可能发生在整个块(一个角色已经死亡;角色和它拥有的所有物品将要坟墓)或小块(一些强大的)魔法使一个项目解体;该项目将流亡区域。)
使用不可变的protobuf对象,支持这种动态变得困难和/或效率低。
但是,要使用可变的protobuf对象(= builder),必须将每个字段包装为Observable,并且不应使用原始构建器。这不是不可能,但似乎太乏味了。
是否有一些库(或代码生成器?)可以使用JavaFX轻松使用protobuf?