【问题标题】:Confusion over manual/automatic sizing of Flash Sprite Objects对手动/自动调整 Flash Sprite 对象大小的困惑
【发布时间】:2011-01-10 11:34:50
【问题描述】:

如果我有一个自定义类继承 Sprite 并且它绘制了一些简单的对象,那么这对于 Sprite.widthSprite.height 属性是如何工作的?似乎我可以绘制(例如)任何大小的矩形,大于 Sprite 大小。 同样,如果我设置宽度/高度属性,已经绘制的内容会发生什么?

作为一个用例,我可能有一个画成一组线条的火柴人,我想设置这个人的高度并将渲染缩放到这个。

是否自动计算宽度/高度有任何问题,还是我误解了这些属性的实际含义

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    widthheight 作为吸气剂更有意义。他们获取剪辑的内部内容,将其乘以 scaleX/scaleY 并返回。

    剪辑的缩放在内部存储为矩阵,您可以使用scaleX / scaleY 属性(以及xyrotation)访问矩阵的各个元素。

    您也可以设置 widthheight 并且有一些在幕后运行的稍微笨拙的代码使其工作。基本上,您设置的任何宽度都会立即变成scaleX 值。例如,如果您有一个 100x100 的影片剪辑,并调用 width = 200,Flash 会将其转换为 scaleX = 2

    如果在其动画过程中,影片剪辑增长到 120x100,那么它将以 240 的宽度出现在舞台上。

    换句话说,您设置的宽度和高度将用作缩放因子。它与剪辑内容无关。

    为了获得最大的可预测性,请始终设置为 scaleX / scaleY 值。

    【讨论】:

    • 但是您如何设置(或 Flash 如何知道)应用缩放的 默认 大小?假设一个简单的类子类Sprite 并在 (20,20) 和 (80,20) 处仅绘制 2 个圆,半径均为 20?
    • scaleX 和 scaleY 是这里的主人,它们默认为 1。宽度和高度会自动调整到任何内容。 (抱歉,我不确定我理解您所说的“应用缩放的默认大小”是什么意思)。
    • 默认情况下,我的意思是“如果我不进行任何更改,将报告什么宽度/高度?”我想你回答了这个......它们是根据内容自动计算的?所以在我上面的例子中,宽度 = 100 高度 = 40?
    • 是的。您可能只想在空白 fla 中玩一些时间线代码,看看当您弄乱不同的属性时不同的 sprite 会发生什么。当你在那里旋转时会变得很奇怪:D
    【解决方案2】:

    我觉得你有点困惑。当您更改宽度、高度、scaleX 或 scaleY 时,在 Sprite 中绘制的任何内容也会调整大小。

    DisplayObjectContainers的嵌套有一个重要的概念:

    假设您有一个 parent Sprite,其中包含 child Sprite,该 Sprite 有一个 100 像素高和宽的火柴人。 parentchildwidthheight 均为 100(而 scaleXscaleY 为 1)。现在如果你把 parentwidth 设置为 50 px,舞台上的绘图会在视觉上变形,看起来像 50 px 宽,width parent 的 em> 将为 50 px,但嵌套 childwidth 仍为 100 px。同样,parentscaleX 将为 0.5,而 childscaleX 将保持 1。有意义吗?

    【讨论】:

    • 那么这是否意味着我在绘制火柴人的线条时不能使用height * 0.5,这是否会导致一些循环计算,因为height 会在绘制后重新计算?
    • 假设您有myCanvas:Sprite 并使用draw() 函数来绘制火柴人。然后设置myCanvas.height = myCanvas.height*0.5(等于myCanvas.scaleY = 0.5)。火柴人的点不会受到影响,(100,100) 点仍将位于 (100,100) 坐标上,改变的是其父容器中的 myCanvas 大小。所以,你的火柴人的分数不会重新计算,你已经改变了convas。
    • @John: 是的,没错,如果你尝试使用剪辑的height 来绘制它,它会不断变化,但是经典的解决方案是按照设定的大小绘制线条并根据需要缩放包含的剪辑。
    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多