获取旋转转换JavaFX后的坐标
我正在写一个类似命运之轮的游戏,轮子实际上是一个JavaFXImageView,位于窗口的最右边。该车轮由15个部件组成(每个部件为24度) 基本上,在旋转平移完成后,我想要得到坐标,或者像ImageView这样的东西的边界框,以便计算该坐标、图像中心和针之间的角度。从这个角度,我可以确定返回的分数 然而,我对如何做到这一点感到困惑。我尝试过使用边界框,但它无法解决问题 其代码如下所示:获取旋转转换JavaFX后的坐标,javafx,coordinate-systems,rotateanimation,Javafx,Coordinate Systems,Rotateanimation,我正在写一个类似命运之轮的游戏,轮子实际上是一个JavaFXImageView,位于窗口的最右边。该车轮由15个部件组成(每个部件为24度) 基本上,在旋转平移完成后,我想要得到坐标,或者像ImageView这样的东西的边界框,以便计算该坐标、图像中心和针之间的角度。从这个角度,我可以确定返回的分数 然而,我对如何做到这一点感到困惑。我尝试过使用边界框,但它无法解决问题 其代码如下所示: public class FXMLRoundSceneController { @FXML
public class FXMLRoundSceneController {
@FXML
private AnchorPane backgroundAnchorPane;
@FXML
private ImageView wheel;
/* Wheel background Image*/
private Image img = new Image(getClass().getResource("/resources/WOF.png").toExternalForm());
@FXML
public void initialize() {
wheel.setImage(img);
}
@FXML
private void rotateWheel(MouseEvent mv) {
rotate(1355,5); // Just an example, the rotate angle should be randomly calculated on each MouseClicked event.
}
public void rotate(double angle, double duration) {
RotateTransition rt = new RotateTransition();
rt.setNode(wheel);
rt.setByAngle(angle);
rt.setDuration(Duration.seconds(duration));
rt.setCycleCount(1);
rt.setAutoReverse(false);
rt.setInterpolator(Interpolator.EASE_OUT);
rt.play();
rt.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent ae) {
wheelBoundingBox();
}
});
}
public void wheelBoundingBox() {
double MX = wheel.getBoundsInParent().getMaxX();
double MY = wheel.getBoundsInParent().getMaxY();
double mX = wheel.getBoundsInParent().getMinX();
double mY = wheel.getBoundsInParent().getMinY();
double width = MX - mX;
double height = MY - mY;
Rectangle bb = new Rectangle(mX, mY, Color.TRANSPARENT);
bb.setWidth(width);
bb.setHeight(height);
bb.setStroke(Color.WHITE);
bb.setStrokeWidth(1);
backgroundAnchorPane.getChildren().add(bb);
}
}
公共类FXMLRoundSceneController{
@FXML
私人安可芬背景安可芬;
@FXML
私家影像观察轮;
/*车轮背景图像*/
私有图像img=新图像(getClass().getResource(“/resources/WOF.png”).toExternalForm());
@FXML
公共无效初始化(){
车轮设置图像(img);
}
@FXML
专用空心旋转轮(MouseEvent mv){
rotate(1355,5);//举个例子,旋转角度应该在每个鼠标点击事件上随机计算。
}
公共空心旋转(双角度、双持续时间){
RotateTransition rt=新的RotateTransition();
rt.setNode(车轮);
rt.Yangle(角度);
rt.setDuration(持续时间.秒(持续时间));
rt.setCycleCount(1);
rt.setAutoReverse(假);
rt.setInterpolator(Interpolator.EASE_OUT);
rt.play();
rt.setOnFinished(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent ae){
wheelBoundingBox();
}
});
}
public void wheelbundingbox(){
double MX=wheel.getBoundsInParent().getMaxX();
double MY=wheel.getBoundsInParent().getMaxY();
double mX=wheel.getBoundsInParent().getMinX();
double mY=wheel.getBoundsInParent().getMinY();
双倍宽度=MX-MX;
双倍高度=我的-我的;
矩形bb=新矩形(mX,mY,Color.TRANSPARENT);
bb.设置宽度(宽度);
bb.设置高度(高度);
bb.设定行程(颜色:白色);
bb.设定行程宽度(1);
背景Ancorpane.getChildren().add(bb);
}
}
有谁能告诉我一种确定坐标的正确方法或类似的方法来帮助您确定分数。publicstaticvoidmain(String[]args){
public static void main(String[] args) {
String[] prizes = new String[] {"100","200","300","400","500","600"};
int slotSize = 360 / prizes.length;
int angle = 359;
for (int i = 0; i < 3600; i++) // 10 spins
{
angle++;
if (angle>359) {
angle = 0;
}
// based on the current angle, determine the entry:
int entry = angle / slotSize;
System.out.println("angle "+angle+" entry "+entry+" prize "+prizes[entry]);
}
}
字符串[]奖品=新字符串[]{“100”、“200”、“300”、“400”、“500”、“600”};
int slotSize=360/s.length;
内倾角=359;
对于(int i=0;i<3600;i++)//10次旋转
{
angle++;
如果(角度>359){
角度=0;
}
//根据当前角度,确定条目:
int entry=角度/槽大小;
System.out.println(“角度”+角度+“输入”+输入+“奖励”+奖励[输入]);
}
}
你不能用wheel.getRotate()
?我的代码是否帮助您?这是你想要的吗?@James_D因为旋转变换不是从0开始的,所以我认为我不能使用这个简单的解决方案来计算。假设你没有添加动画以外的旋转,getRotate()
将为你提供从原始开始位置开始的总旋转。除非我遗漏了什么,(getRotate()%360)/24
应该提供轮子偏移的段数。这就是我编写的代码。只需将我的“角度”替换为getRotate