【发布时间】:2014-04-23 17:35:31
【问题描述】:
我最近通过wiki’s tutorial 尝试了 Java Monkey (3) 的多线程。因为我只是想测试一个原型 clinet,所以我制作了一个程序,它使用“Cubes”库 (hub.jmonkeyengine.org/wiki/doku.php/jme3:contributions:cubes) 创建了一些立方体,然后将其序列化为一些字节数据(这是服务器将对玩家附近的地图块执行的操作)。目的是模仿从服务器发送的块,这将发生在单独的线程中,如 wiki 上的网络教程中所述(hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:网络)。
每个块都有自己的节点来存储它,如果服务器发送了块的更新,或者如果玩家移动到新区域(这将导致块被替换),则块将被替换.代码是here。但问题是,我需要重新创建一个空块,然后才能读取字节,这需要收集应用程序设置。除此之外,我无法在单独的线程中修改游戏场景(该函数可以这样做)。下面的代码来自第 93+ 行。
//...
//(In Update Loop)
if (future.isDone()) {
//Binds the temporary data to the clone object
blockTerrainClone = (BlockTerrainControl) future.get();
future = null;
//...
Callable<BlockTerrainControl> serverInput = new Callable<BlockTerrainControl>() {
public BlockTerrainControl call() {
/*Creates a temporary data storage object, then assigns the data.
I can't mutate the current BlockTerrainControl which is being rendered,
as this is a seperate thread.*/
BlockTerrainControl data = new BlockTerrainControl(CubesTestAssets.getSettings(app), new Vector3f());
CubesSerializer.readFromBytes(data, serializedBlockTerrain);
//Returns the data
return data;
}
};
多线程 wiki 文章(靠近底部)确实部分介绍了如何修改场景和访问游戏状态,但没有详细说明。任何人都可以扩展该部分,并解释我如何能够在单独的线程中将块从服务器传输到客户端(或者在这种情况下,将数据从一个线程传输到另一个线程)?
如果我错过了问题中的任何内容,我很乐意补充!感谢阅读。
【问题讨论】:
标签: java multithreading jmonkeyengine