刚刚制作了这个小应用程序并希望分享...
我从几个样本中获取代码并根据我的需要进行调整 你可以在这里得到消息来源:gitHub source
以下是几张截图...
如果您发现它有趣或有用或想要帮助改善它...随意做或说出来!
编辑:好的,似乎在某些图片上引入了很多延迟,我尝试实现时间轴,希望将一些处理推送到GPU ..(我相信它是如何工作的)..有谁能想到更好的方法来创建更新线程?
Timeline defaultTimeline = new Timeline();
defaultTimeline.getKeyFrames().addAll(new KeyFrame(new Duration(14 - (System.currentTimeMillis() % 14)), (ActionEvent t) -> {
Timeline everySecond = new Timeline();
everySecond.setCycleCount(Timeline.INDEFINITE);
everySecond.getKeyFrames().addAll(new KeyFrame(Duration.valueOf(14 + "ms"), (ActionEvent event) -> {
update();
}));
everySecond.play();
System.err.println("Playing");
}));
defaultTimeline.play();
和更新方法:
private void update() {
if(pixelSkipSlider.isValueChanging()){
if(meshView.getMesh() != null){
meshView.setMesh(MeshUtils.createHeightMap(meshImageView.getImage(), (int)pixelSkipSlider.getValue() , (float)maxHeightSlider.getValue(), (float)scaleSlider.getValue()));
}
}
if(maxHeightSlider.isValueChanging()){
if(meshView.getMesh() != null){
meshView.setMesh(MeshUtils.createHeightMap(meshImageView.getImage(), (int)pixelSkipSlider.getValue() , (float)maxHeightSlider.getValue(), (float)scaleSlider.getValue()));
}
}
if(scaleSlider.isValueChanging()){
if(meshView.getMesh() != null){
meshView.setMesh(MeshUtils.createHeightMap(meshImageView.getImage(), (int)pixelSkipSlider.getValue() , (float)maxHeightSlider.getValue(), (float)scaleSlider.getValue()));
}
}
}
答案 0 :(得分:1)
在被问到的时候,我不知道JavaFX属性的invalidated()方法, 覆盖此方法并使用它是我更新属性的首选方法。
通过这样做,平台可以正常运行,我的问题已经消失。