如何防止Rect在减小宽度时从其位置移动

时间:2012-04-12 00:40:08

标签: actionscript-3 flash rect

当我想要做的只是减小宽度时,我似乎遇到矩形从指定位置移动的问题。我正在研究的游戏模拟带有保险丝的爆炸物。随着时钟倒计时,保险丝尺寸减小。我认为问题与本地坐标与全局坐标有关,但我不确定如何纠正问题。这是一些代码:

//fuse
_fuse = new Sprite();
_fuse.graphics.beginFill(0x000000);
_fuse.graphics.drawRect(630, 340, (_fuseCounter / _fuseWidth) * 120, 20);
_fuse.graphics.endFill();

这是我每帧减小宽度的地方:

//decrease fuse to give the player a visual of urgency.
_fuseCounter--;         
_fuse.width = (_fuseCounter/ _fuseWidth) * 120;

我的代码中没有任何地方保险丝的x位置发生变化。除了这个问题之外,rect的功能正是我想要的。任何有关此问题的帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

你的问题是你在630,340处绘制矩形,然后减小它周围的宽度。

想象这个

0                    100
-----------------------
|                     |
|          -----      |
|         |     |     |
|          -----      |
|                     |
|                     |
-----------------------

当您减小宽度时,您实际上是将外部动画片段的左边缘拉向右边缘,随时缩放嵌套内容。导致像这样的事情

0                  75  
-------------------
|                 |
|      ---        |
|     |   |       |  
|      ---        |
|                 |
|                 |
-------------------

所以为了解决这个问题,你可以筑巢。添加一个新的精灵到_fuse并缩放

var s:Sprite = new Sprite();
s.x =630;
s.y = 340
s.graphics.drawRect(0, 0, (_fuseCounter / _fuseWidth) * 120, 20);
fuse.addChild(s);

然后缩放s.width

如果你不想嵌套你也可以只做一个graphics.clear()并将rect重绘为新的,更小的宽度