Java 转换转换在按键上无法正常工作

Java 转换转换在按键上无法正常工作,java,javafx,Java,Javafx,我试图用平移变换使球上下弹跳。我首先试着让球在开始下移之前向上移动。我用来向上移动它的代码是这样的 public void moveUp(Circle player){ TranslateTransition goUp = new TranslateTransition(Duration.millis(500),player); goUp.setByY(-20); goUp.play(); } 我在每个按键上更新球(球员)的值,如下所示(p.s球员属于圆圈类型) sce

我试图用平移变换使球上下弹跳。我首先试着让球在开始下移之前向上移动。我用来向上移动它的代码是这样的

public void moveUp(Circle player){
    TranslateTransition goUp = new TranslateTransition(Duration.millis(500),player);
    goUp.setByY(-20);
    goUp.play();
}
我在每个按键上更新球(球员)的值,如下所示(p.s球员属于圆圈类型)

scene.setOnKeyPressed(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent KeyEvent){
if(keyEvent.getCode()==KeyCode.SPACE){
移动(玩家);
player.setCenterY(player.getCenterY-20);
}
}
});

唯一的问题是球的移动量与我正在更新的量不一样。以几个值为例(注意球员的原始中心是400300),我得到了280作为球员中心的更新值,但屏幕上的球中心在260左右,这是远远的。如何修复此问题,使播放器的中心移动量与其在屏幕上的移动量相同?

这是因为
(播放器)除了@James_D提到的
中心
属性外,还有一个
translateY
属性。
translateY
是所有节点的公共属性。无论何时应用
TranslateTransition
,节点(在本例中为播放器)的坐标都不会更改。相反,它的“本地来源”发生了变化

Circle player = new Circle(10);
TranslateTransition goUp = new TranslateTransition(Duration.millis(500),player);
goUp.setByY(-20);
goUp.play();
当执行此代码时,播放机的原点向上移动20像素,并且
centerY
属性保持不变。如果坐标最初是(400300),则它们保持不变,但现在参照新的本地原点。
此修改坐标轴本身的过程对于所有变换都是通用的。

平移变换是沿x轴或y轴移动节点坐标空间原点的变换

请注意,与所有变换一样,矩形的x、y、width和height变量(相对于局部坐标空间保持)没有改变,而是变换改变了矩形的整个坐标空间

如果要更改
centerY
属性而不是
translateY
属性,可以使用
Timeline
类而不是
TranslateTransition

请..您将
centerY
translateY
分别减少20和20,因此总体效果是将圆向上移动40。
Circle player = new Circle(10);
TranslateTransition goUp = new TranslateTransition(Duration.millis(500),player);
goUp.setByY(-20);
goUp.play();