Hi Cho,

I assume in your example code below that TCellView was supposed to be
CustomSprite (i.e. the constructor).

This was mentioned recently so you could probably find some details in the
archives, though I'm not sure what to suggest you search for, so I'll repeat
what I learned as best as possible:

When you set the width and height of a sprite, Flash attempts to "scale" the
sprite to that width and height. So, it'll set the new width and height but
it will also adjust the scaleX and scaleY properties such that *if* your
sprite had content it would be scaled up to the new size (kinda what you
would expect if you resized a movie clip).

Of course, the big problem is that the documentation for width/height (or
DisplayObject) makes absolutely no mention of this, and it appears that the
behavior has simply been deduced through trial and error (Gordon or other
Adobe folks, I'd love to see some official confirmation on what's happening
-- and an update to the LiveDocs!).

What is happening in your case is the width and height of your new Sprite is
0 because it doesn't contain any vector art, etc. So, you set the width and
height manually and the Sprite attempts to adjust scaleX and scaleY to
compensate. Since the width and height are at zero, the scales become NaN
(division by zero), and thus are set to zero. Now, future drawing/sizing
gets "squished" by the fact that scale is set to zero.

To fix it, you can set your width and height *then* reset scaleX and scaleY
back to 1.0. That should do it.

Adobe? Undocumented!

Troy.


On 20 Mar 2007 05:43:55 -0700, celdi30 <[EMAIL PROTECTED]> wrote:


Hi all. (This is my first post in this group, so I'd like to give all of
you a greeting .)

As the title, I've met an odd problem with using Sprite class.
Because I'm a novice of Flex, my problem may be so trivial.
But Your helps would make me happy.

The simple version of my code is below.

public class CustomSprite extends Sprite
{
public function TCellView(w:Number, h:Number) {
this.width = w;
this.height = h;

draw();
}

private function draw():void {
this.graphics.clear();

this.graphics.lineStyle(2, 0x000000, 0.7);
this.graphics.drawRect(0, 0, this.width, this.height);
}
}

The problem is that the assignments to width and height in the
constructor of mine have no effect.
So in draw(), the rectangle to be drawn has size of zero. The width and
height are public properties of Sprite and are not read-only.
Then why does the code like 'this.width = w' have no effect? (In debug
mode of Flex Builder, the Variables view told me the values of
width/height of the Sprite object have not changed by the codes.)

After some investigation, I knew that the drawing on the graphics of
Sprite causes update of width/height.
That behavior is reasonable, I think. However, I wonder why a
direct-assignment to width or height is banned, and how.

Is there any mistake in my code? Or Do I misunderstand something?
Please, tell me what's going on behind the scene about Sprite.
Any replies of you would be grateful.

Thank you.
- Cho

Reply via email to