目前我有一个简单的动画,其中一辆汽车(JPanel)接近一个交叉路口,等待交通信号灯变绿并继续直行。然而,我现在要进入下一步,我希望汽车在平滑的曲线中向右转90度,转向垂直道路。我粗略地描绘了它的外观和曲线代表了我想要汽车转向的方式:
我不太清楚如何做到这一点。我想我需要代表某种贝塞尔曲线?还是矩阵变换来旋转汽车?
有人可以提供有关在Swing中执行此操作的最佳方法的建议。
答案 0 :(得分:3)
如果您不熟悉Java中的图形,我建议this tutorial。如果我要对你正在做的事情进行编码,我会看到两个选项。
首先也是最简单的,您可以将车型设计为“首先直行,然后沿着我正在转弯的角落中心的圆圈边缘转90º,然后再直行”。最简单的方法是定义一个JPanel
来绘制你的Image
(是的,一个JPanel;如果你不绘制他们的背景,你可以将JPanels叠加在一起 - 而且他们将以正确的顺序绘制;使背景JPanel
不透明以便在绘制下一帧之前清除它,并给它一个AffineTransform
,使图像显示在您想要的位置。您需要调整变换中的增量,以使速度看起来不变;试验和错误,或一些几何形状(半径R的90°意味着R*pi/2.0
沿曲线路径的总行程),将帮助你。
困难的方法是将汽车的路线视为任意Shape(例如,您可以使用贝塞尔曲线定义),从中提取扁平PathIterator
,以等间距前进沿着该迭代器跳跃,并从曲线上的位置和任何给定点的航向计算所需的旋转(您可以通过获取2个连续样本来估计航向,并根据这些样本对齐汽车)。这比使用上述方法更难,但允许您的汽车遵循任意复杂的路径。