【问题标题】:scaling in sprite that preserves central point of it's visible part缩放精灵以保留其可见部分的中心点
【发布时间】:2012-10-15 20:03:47
【问题描述】:

我有一个正在缩放的​​精灵(画布)。画布有一个面具。问题是简单的缩放(scaleX=newScale; scaleY=newScale;)占据了蒙版下方蒙版下方的画布部分。所以我需要在缩放后移动画布,使蒙版下的画布点保持在同一个地方。我正在尝试执行以下操作:

var deltaScale = newScale / scale;
//w and h are width and height of mask
canvas.scaleX = newScale;
canvas.scaleY = newScale;
canvas.x += (canvas.x + w/2) - (canvas.x + w/2) / deltaScale;
canvas.y += (canvas.y + h/2) - (canvas.y + h/2) / deltaScale;

在那个中心点之后不要停留在同一个地方。有人可以提示我在缩放后应该如何移动画布吗?

PS: 如果有帮助的话,画布的宽度和高度非常大(大约 25000)。

UPD: 带有遮罩的画布被添加到 Sprite 上,遮罩与父精灵的大小相同,canvas.xcanvas.y 为负数。

【问题讨论】:

  • 相对于注册点,Sprite 的视觉左上角在哪里?
  • @AmyBlankenship,不确定我是否理解您的问题。 canvas.xcanvas.y 都是否定的。
  • 我认为你想多了。尝试类似 canvas.x = w/2 -canvas.width/2 的东西。您可能需要在开始时记录一个偏移量,因为 canvas.x、y 不在掩码 0、0 处,并对其进行缩放并根据需要添加/减去它。
  • @AmyBlankenship,嗯,...谢谢你的话“我认为你想多了”,解决方案应该比问题中提出的更简单。

标签: actionscript-3 flash geometry


【解决方案1】:

我之前做类似事情的方式是将画布精灵放在另一个精灵中,例如。缩放,其注册点位于屏幕中心(或任何需要的地方)。然后,您可以在缩放精灵内部移动画布(在我的情况下,它是可拖动的)并缩放外部精灵,以便放大中心。 我发现缩放和定位不同的精灵比进行偏移要容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多