java - switch 语句,一次只使用一种情况
问题描述
我试图根据按下的键向左或向右平移一个正方形“p”5 个单位。问题是,当按下“右”或“左”时,它会朝那个方向平移 5 个单位,但是当我再次按下时,我无法移动,我必须再次按下“左”才能再次向右移动,所以我永远无法到达任何地方。有人知道为什么吗?
Task PlyThread=new Task() {
@Override
protected Object call() throws Exception {
myScene.setOnKeyPressed(event -> {
switch (event.getCode()){
//case UP: p.setTranslateY(((p.getY())-5)) ; break;
case LEFT: p.setTranslateX(((p.getX())-5)) ; break;
case RIGHT: p.setTranslateX(((p.getX())+5)) ;break;
}
});
return null;
}
};new Thread(PlyThread).start();
解决方案
好的,我假设“矩形”是javafx.scene.shape.Rectangle
. 在这种情况下setTranslateX()
,只修改变换矩阵,不改变矩形坐标 X。属性 X 的值保持不变,下一次调用与setTranslateX(getX()+5)
之前的工作完全相同。
您需要使用翻译或坐标,即使用 setTranslateX()
/getTranslateX()
或setX()
/ getX()
。
除了在屏幕上移动矩形之外,这两种选择可能会产生其他后果,但我没有使用 JavaFX 的经验,所以很遗憾我无法详细说明。
推荐阅读
- c# - ListView 大小在将项目拖动到其边界时发生变化
- c# - ASP.NET MVC - 在匿名 Ajax 请求上刷新 Auth Cookie
- javascript - 如何导入外部 JavaScript 库
- angular - RxJS 分区。错误 - 类型中缺少以下属性
- python - tkinter.Menu tearoffcommand 怎么办?
- javascript - 我的代码只能在 $(document).ajaxComplete(function ()
- swift - 列表被 VStack 压缩
- excel - VBA:通过比较其他列的值直到列表结束的范围循环条件
- angular - Angular 的 Gitlab 管道 CI/CD .gitlab-ci.yml
- swift - 如何在 Swift Combine 中的数组 CurrentValueSubject 的各个元素上应用 .filter 运算符?