如何在canvas中处理多个元素

时间:2012-03-08 16:14:02

标签: java swing canvas

我正在用java创建一个UI应用程序,我试图绘制一些图形来表示窗口中的指南针。我在画布上使用鼠标拖动事件处理旋转,但问题是画布中的所有内容都在旋转。我想知道我是否可以单独处理我在画布上绘制的每个元素,因此只有我的箭头会移动而不是整个画布。

由于

1 个答案:

答案 0 :(得分:2)

据推测,你有一个绘制循环,吸引了很多东西。背景,指南针,指南针的箭头。也许其他一些事情。

当您使用画布绘制时,您会向上下文发出命令,这些命令类似于使用绘画加载画笔。

如果你想画一条红线然后画一条蓝线,你会画一些红色的油漆,画一条线,然后清理你的画笔并拿起一些蓝色的油漆并画上那条线。

画布上下文完全相同。你想要做的是在普通的画布上下文中绘制一堆东西。然后,您希望使用ctx.save()保存上下文并进行轮换。

当您翻译或旋转或者甚至只是在上下文中设置填充时,您并没有改变已经完成的事情,您只是说“在此之后的所有内容中,应用这些操作。”

然后你画指南针箭头/针。

然后拨打ctx.restore()并继续您的快乐方式。这将阻止旋转发生在箭头后面绘制的事物上。

上下文的保存和恢复功能会跟踪旧状态,这样您就不会在旋转上下文的针后绘制所有内容。这有点像洗画笔,只是更好,因为你可以记住它曾经是蓝色的,而不是每次都要清洗它。

顺便说一下,如果你想将画布上下文完全重置为默认状态(黑色画笔,默认转换,没有阴影等),你可以简单地执行canvas.width = canvas.width,它会给出上下文完全重置。