当前位置: 首页 > 知识库问答 >
问题:

使用 JavaFX 在 HBox 中的组中旋转图像或形状

汪和悌
2023-03-14

我想旋转组中的图像,并将该组放入HBox中,而没有明显的“弹跳”效果。上图是一个使用JavaFX形状代替图像的例子,但最终结果是一样的。顶部的HBox包含一个旋转矩形,它看起来很好。底部的HBox在同一组中包含一个矩形和一个圆形,但是旋转矩形会导致“弹跳”副作用。为什么会弹跳?以下是我的代码:

public class RotateImage extends Application {

    @Override
    public void start( Stage primaryStage ) {
        Pane root = new Pane();
        HBox hbox = new HBox();
        hbox.setLayoutX( 10 );
        hbox.setLayoutY( 10 );
        Rectangle square = new Rectangle( 50, 50, Color.RED );
        hbox.getChildren().add( square );
        RotateTransition rt = new RotateTransition( Duration.millis( 1000 ), square );
        rt.setByAngle( 360 );
        rt.setCycleCount( Animation.INDEFINITE );
        rt.setInterpolator( Interpolator.LINEAR );
        rt.play();

        HBox hbox2 = new HBox();
        hbox2.setLayoutX( 10 );
        hbox2.setLayoutY( 100 );
        Rectangle square2 = new Rectangle( 50, 50, Color.RED );
        Circle circle2 = new Circle( 25, 25, 12.5, Color.BLUE );
        Group group = new Group( square2, circle2 );
        hbox2.getChildren().add( group );
        RotateTransition rt2 = new RotateTransition( Duration.millis( 1000 ), square2 );
        rt2.setByAngle( 360 );
        rt2.setCycleCount( Animation.INDEFINITE );
        rt2.setInterpolator( Interpolator.LINEAR );
        rt2.play();

        root.getChildren().addAll( hbox, hbox2 );
        Scene scene = new Scene( root, 100, 200, Color.BLACK );
        primaryStage.setScene( scene );
        primaryStage.setTitle( "Rotate Transition example" );
        primaryStage.show();
    }

    public static void main( String[] args ) {
        launch( args );
    }
}

共有1个答案

严曜文
2023-03-14

如果需要平滑旋转,请将旋转应用于组,而不是其子项之一。
替换
RotateTransition rt2 = new RotateTransition( Duration.millis( 1000 ), square2 );

具有
旋转转换rt2=新的旋转转换(持续时间.毫秒(1000),组)

如果必须在组中旋转子项,则可以向组中添加一个大的“占位符”形状。形状(以下示例中的圆)的作用是使组足够大,以便正方形旋转不会更改组边界:

import javafx.animation.*;
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
import javafx.util.Duration;

public class RotateImage extends Application {

    @Override
    public void start( Stage primaryStage ) {

        //big circle to keep group bounds big enough for the square to rotate inside
        Circle dummyCircle = new Circle(25,25,100, Color.BLACK );
        Rectangle square2 = new Rectangle( 50, 50, Color.RED );
        Circle circle2 = new Circle( 25, 25, 12.5, Color.BLUE );
        Group group = new Group(dummyCircle,square2, circle2 );

        RotateTransition rt2 = new RotateTransition( Duration.millis( 1000 ), square2 );
        rt2.setByAngle( 360 );
        rt2.setCycleCount( Animation.INDEFINITE );
        rt2.setInterpolator( Interpolator.LINEAR );
        rt2.play();

        Scene scene = new Scene(new HBox(group), 200, 200, Color.BLACK );
        primaryStage.setScene( scene );
        primaryStage.show();
    }

    public static void main( String[] args ) {
        launch( args );
    }
}

 类似资料:
  • 在Javafx中旋转图像? 我正在写 但是图像不会相对于图像的中心旋转。

  • 我正在为一款名为Counter-Strike:Global Avolution的游戏创建一个模拟程序,我一直在考虑如何在HBox中对某些图像进行动画化。游戏中有武器箱,里面装着各种不同稀有度的皮肤。点击“打开”按钮后,可能赢得的项目将开始在HBox中滚动。把它想象成命运之轮,它开始得很快,然后逐渐变慢,直到它停止在一个名字上,但在这种情况下,代替名字的是项目,而不是一个“轮子”,我有一个水平的HB

  • 在pygame中,我对我的程序中的所有矩形使用。我希望能够将这些矩形旋转到任何角度。我已经看到了以下旋转IMAGES的代码,但我的问题是RECTANGLES。 但是我正在使用矩形,我没有可以旋转的图像或“表面”。当我尝试旋转矩形时 这就给出了 我的问题是,如何在pygame中旋转a并显示矩形<code>(x,y,w,h),而不是图像。 这是“潜在重复”的链接帖子不是重复的。一个答案解释了旋转矩形的

  • 在我的应用程序中,图像是从相机捕获的,然后显示在 我已经成功地完成了此方法,但是当我的图像显示在中时,图像显示在旋转后 我想旋转图像,然后在中显示 当我单击前摄像头上的图像时,在下面代码的帮助下,图像显示正确 但当我从后摄像头点击时,图像将显示在前摄像头的对面。还有一件事,当我从不同角度单击“来自摄影机的图像”时,图像将以不同角度显示在中。

  • 此外,我已经把我的矩形在锚窗,如果这是重要的知道。

  • 我试着绕着它的中心旋转一个矩形。使用GraphicsContext ie gc将旋转绘制到画布上。这是我的绘图代码。 这会将矩形移动到其中心,然后围绕其左上角点旋转矩形。我试着把两边的长度和宽度减半,但那只会让它飞得到处都是。我数学不好也许这里有更好的人能告诉我我做错了什么。 如果需要的话,我还存储了矩形的所有四个点(角)。 谢了乔