Я использую TranslateTransition
для перемещения ImageView
из центра в центр окна сцены. В этом и заключается проблема: анимация прыгает. Движение ImageView
не является гладким и линейным. Я попытался включить свойства -Dcom.sun.scenario.animation.vsync=true, -Dcom.sun.scenario.animation.adaptivepulse=true
, но безуспешно. Думая, что проблемы могут быть вызваны мощностью компьютера, я запускаю приложение более мощным и разным ПК (I7 с 16 ГБ оперативной памяти), но без успеха анимация негладкая. Я читал, что таймер JavaFX автоматически вычисляет импульс в соответствии с экраном hz. Так вы можете помочь мне разобраться, почему анимация негладкая?Не плавный перевод
MVCE:
import java.io.File;
import javafx.animation.Animation;
import javafx.animation.Interpolator;
import javafx.animation.PauseTransition;
import javafx.animation.SequentialTransition;
import javafx.animation.TranslateTransition;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import javafx.util.Duration;
public class MCVE extends Application
{
private Stage stage;
private String title = null;
public static void main(String[] args)
{
Application.launch(MCVE.class, new java.lang.String[] { "--filename=./template.fxml" });
}
public MCVE()
{
}
@Override
public void start(Stage primaryStage) throws Exception
{
stage = primaryStage;
final Parameters params = getParameters();
// load fxml
final AnchorPane page = (AnchorPane) FXMLLoader.load(new File(params.getNamed().get("filename")).toURI().toURL());
Scene scene = new Scene(page);
// setup stage
stage.setScene(scene);
stage.setMinWidth(page.getPrefWidth());
stage.setMinHeight(page.getPrefHeight());
stage.setWidth(page.getPrefWidth());
stage.setHeight(page.getPrefHeight());
stage.setTitle(title);
// setup full screen mode
EventHandler<MouseEvent> mouseHandler = new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent mouseEvent)
{
if (mouseEvent.getClickCount() >= 2)
{
stage.setFullScreen(!stage.isFullScreen());
}
}
};
scene.setOnMouseClicked(mouseHandler);
// setup scene
setupScene();
// open the stage
stage.show();
}
/**
* @param nodeName
* @return
*/
private Node getNode(String nodeName)
{
return stage.getScene().lookup("#" + nodeName.toLowerCase());
}
/**
*
*/
private void setupScene()
{
String userdir = System.getProperty("user.dir");
// slide node
final Node node = getNode("image");
long inTime = 5000;
long pauseTime = 3000;
long outTime = 5000;
TranslateTransition in = new TranslateTransition(Duration.millis(inTime));
in.setFromX(-1280);
in.setToX(node.translateXProperty().getValue());
in.setInterpolator(Interpolator.EASE_IN);
PauseTransition pause = new PauseTransition(Duration.millis(pauseTime));
TranslateTransition out = new TranslateTransition(Duration.millis(outTime));
out.setFromX(node.translateXProperty().getValue());
out.setInterpolator(Interpolator.EASE_OUT);
out.setToX(1280 + node.getBoundsInLocal().getWidth());
final SequentialTransition timeline = new SequentialTransition(node, in, pause, out);
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
}
}
Here загрузить необходимые ресурсы. Сохраните их в рабочей папке.
Это дамп с = -Dprism.verbose верно
Prism pipeline init order: d3d sw
Using platform text rasterizer
Using native-based Pisces rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.d3d.D3DPipeline
Loading D3D native library ...succeeded.
D3DPipelineManager: Created D3D9Ex device
Direct3D initialization succeeded
(X) Got class = class com.sun.prism.d3d.D3DPipeline
Initialized prism pipeline: com.sun.prism.d3d.D3DPipeline
OS Information:
Windows 7 build 7601
D3D Driver Information:
ATI Mobility Radeon HD 4650
\\.\DISPLAY1
Maximum supported texture size: 8192
Maximum texture size clamped to 4096
Driver atiumd64.dll, version 8.14.10.678
Pixel Shader version 3.0
Device : ven_1002, dev_9480, subsys_02051025
Max Multisamples supported: 4
Cheers, Фабио
Можете ли вы создать [MCVE] (http://stackoverflow.com/help/mcve), который демонстрирует проблему? –
@James_D над кодом, который я использую для создания узла временной шкалы. –
Создайте MCVE –