actionscript-3 - AS3向 Sprite 添加子元素会影响 Sprite 尺寸......很奇怪

标签 actionscript-3 flash flash-cs5

我在 flash 中有一个扩展 Sprite 的“InvZone”类。这个想法是,这个类将创建一个 Sprite 子元素数组,计算并向它们分配 x、y、宽度和高度属性,然后按行添加子元素(在参数中指定多少行和子元素)。

Sprite (invZone) 及其子级 (invWindow) 均位于 Flash 库中。它们添加了符号来提供背景并确保它们的初始起始尺寸不为 0。

我的问题是 - 添加子项的行为似乎丢弃了 InvZone 实例的高度和宽度值。我希望如果子项(行和列总计)以某种方式超过 InvZone 的初始尺寸,但我的代码应该阻止这种情况(除非我在某些问题上是代码盲)。

这是类代码:

package pnc.gui {

import flash.display.Sprite;
import pnc.gui.InvWindow;

public class InvZone extends Sprite {

    public const PADDING_X:int = 5
    public const PADDING_Y:int = 5  
    public var invWindowArray = new Array();
    public var invArray = new Array();
    private var windows:int;
    private var rows:int;

    public function InvZone(inputX:int, inputY:int, inputHeight:int, inputWidth:int, inputWindows:int, inputRows:int) {
        //normally these would set by args, but today we'll set them by hand
        height = 100;
        width = 600;
        x=0;
        y=0;
        windows = 16
        rows = 3

        init()  
    }

    private function init() {
        var windowsPerRow:int = Math.ceil(windows/rows);
        var rowHeight:Number = (height - (2*PADDING_Y))/rows;
        var columnFullWidth:Number = (width - (2*PADDING_X))/windowsPerRow


        for (var i = 0; i<windows; i++) {
            var currentRow:int = Math.floor(i/windowsPerRow)
            var invWindow:InvWindow = new InvWindow();
            invWindowArray.push(invWindow);

            invWindowArray[i].x = (columnFullWidth * (i%windowsPerRow)) + PADDING_X;
            //trace("X:"+invWindowArray[i].x)

            invWindowArray[i].y = (rowHeight * currentRow) + PADDING_Y;
            //trace("Y:"+invWindowArray[i].y)

            invWindowArray[i].height = rowHeight - PADDING_Y;
            //trace("HEIGHT:"+invWindowArray[i].height)

            invWindowArray[i].width = columnFullWidth - PADDING_X;
            //trace("WIDTH:"+invWindowArray[i].width)

            trace(" ContainingSpriteHeight: " + height + " rowHeight: " + rowHeight + " currentRow: " + currentRow);
            if (invWindowArray[i]) {
                addChild(invWindowArray[i]);
            }
        }
    }       
}   
}

这是跟踪:

 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 0
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 0
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 0
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 0
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 0
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 0
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 1
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 1
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 1
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 1
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 1
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 1
 ContainingSpriteHeight: 100 rowHeight: 30 currentRow: 2
 ContainingSpriteHeight: 128.55 rowHeight: 30 currentRow: 2
 ContainingSpriteHeight: 128.55 rowHeight: 30 currentRow: 2
 ContainingSpriteHeight: 128.55 rowHeight: 30 currentRow: 2

所以最后一行在某种程度上插入了包含的 Sprite - 但我不知道这是如何发生的。高度并不是唯一受影响的值 - 包含的宽度可以用不同的变量来消除。发生这种情况时,所有 InvWindow Sprite 都会一致地更改大小,但库中的原始背景符号不会更改。我尝试过转移声明并添加 ADDED_TO_STAGE 监听器,但没有任何变化。有人可以用线索棒打我吗?

更新:澄清一下:我认为 child 的边缘不应该超出包含 Sprite 的边界 - 所以据我所知它根本不应该扩展。 Sanchez 已经解决了这个问题,但是包含 InvZone 的 InvZone 扩展和拉伸(stretch) InvWindows 的原因是什么?

使用解决方案更新2:根据下面桑切斯的建议采取行动,看看可能会缩放的内容 - 我意识到添加到库中的 invZone 中以赋予其尺寸的背景 Sprite 以意想不到的方式缩放,打破界限。通过在代码中而不是在库中添加背景 Sprite ,为其提供 h & w 类的参数并让它定义 invZone 的尺寸,问题就消失了。

最佳答案

如果我理解的话,您希望 InvZone 返回您设置的高度和宽度,而不是根据内容计算?

在这种情况下,您可以重写宽度和高度的 getter 以返回您的值。

替换:

height = 100;
width = 600;

与:

_h = 100;
_w = 600;

并添加:

private var _w;
private var _h;


override public function get height():Number 
{
   return _h;
}

override public function set height(value:Number):void 
{
   super.height = value;
}

override public function get width():Number 
{
   return _w;
}

override public function set width(value:Number):void 
{
   super.width = value;
}

关于actionscript-3 - AS3向 Sprite 添加子元素会影响 Sprite 尺寸......很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979249/

相关文章:

actionscript-3 - 使用 SQLite 开发 AIR 应用程序的最佳实践

android - android 中的 Flash(不是 webview 中的)

flash - Adobe Stratus 如何工作?

iphone - iPad 上的 Flash cs5 动画

actionscript-3 - 将 MX 库包含到 Flash CS5 项目中

flash - 麦克风检测 Actionscript 3

java - Java正则表达式与ECMA-262(AS、JS)的区别

css - sifr 不替换字体

iphone - cs5.5 : Can't install ipa on ios version prior to 4. 3.1 问题

regex - Flex 3 正则表达式问题