我想在用户点击鼠标按钮时将Graphics对象移向光标,但我不知道如何...
我有光标和Graphic对象的位置,但是没有关于我如何改变其X和Y以从开始位置到新点(用户点击的位置)进行“平滑”移动的线索......
答案 0 :(得分:0)
Swing timing framework可以帮助你完成大部分繁重的工作。
答案 1 :(得分:0)
一般方法:
让模型支持您的图形,并将模型中每个项目的坐标存储在模型上。
在同一个线程中更新x和y非常重要,而不是独立的线程。这听起来很酷,但它失败了,因为线程调度程序有时会滞后一个线程,你可以在一个维度上获得2或3个更新而在另一个维度上没有相应的更新,这将导致对象在一行中移动不光滑。在大多数情况下,您应该在同一个线程中对模型(对于此动作和任何其他动作)进行所有更新。
请注意您的x&你的模型中的y可能需要浮动或加倍,因为你不想松散像素的分数,特别是如果运动要慢。以剩余距离表示等式避免了必须计算轨迹的角度并使用正弦/余弦函数来执行更新。但是,在某些情况下,您可能会发现更容易计算该角度并使用正弦/余弦代替,如果您想要一个不易变换的复杂运动以剩余距离表示。做什么使您的代码清晰,如果需要,稍后进行优化。
每秒24次更新是电影摄像机的标准帧速率,并且该数字是与人眼flicker fusion相关的最小值,如果您更新速度慢于人们将运动视为生涩。为了获得最大的平滑度,您需要每秒超过60次,但这可能只是视频游戏所必需的,并且会产生更大的性能成本。选择您认为满意的最低更新率。
在更新线程上有一个标志也是一个好主意,当有更新的东西时,它会打开和关闭它,因此当没有任何动画时它不会无缘无故地请求重新绘制。请确保该标志用volatile关键字标记,因为它将由其他线程更新。如果您一次有多个动画,则可以根据列表中动画对象的存在来打开和关闭线程(在完成后删除它们)