A Flash Developer Resource Site

# Thread: Can anyone explain this _rotation limit?

1. ## Can anyone explain this _rotation limit?

Havent seen anything on this possible bug.. Has anyone else?

(Windows XP & Flash MX 2004 Pro)

Set up an MC, use a button on(click) to set the _rotation to 32768. 32768 is actually 8 degrees (360 goes into 32760 exactly 91 times) but it sets the rotation to around 350 or so.

Setting _rotation to 32767 or lower is fine, as well as incrementing _rotation to over 32767. Just when you directly set rotation to 32768 or over.

Thought this was interesting.. But nothing anyone cant work around.

-John

2. I believe there is a problem if you set rotation to >180 degrees
I think it goes backwards ??

If you say your rotation = 8 degrees then 360-8 is 352 which is very

3. While it makes sense for the movie to break because of that answer, flash is 'supposed' to be smart enough to convert any number to a degree from 0-360. Over 360 and it is smart enough to figure out what the user wants..

Not a problem, when I need to incorporate a rotation that may ascend or descend above 360 or below -360 I throw in a condition that resets my degrees once over 360 as this makes it easier for me. Still though, up over 32767 or as i've tested down below -32768 flash loses about 10 degrees. Any number in between though flash plots correctly.

Just thought it was an interesting 'bug' nonetheless.. : )

4. 32768 is 2^15; So, I guess Flash manipulate the _rotation by a memory of 16 bits storage. Maybe it is something like overflow error.

5. ah yes, the magic number, 32767, the highest value a signed 2byte integer can hold. if you increment that value the sign-bit is flipped and the value is interpreted as negative, thus 32767 + 1 = -32767

this would again mean a rotation of -32767 deg. and explains a rotation of -8 deg, or "about" 350 deg as you have experienced

the only thing that bugs me though, is that i think that flash uses a float value for the actual _rotation variable, but i guess thats just how the as-interpreter works, to deep into programming for me.

what you could try is casting that value into a float first, like
inst._rotation = 32768.0;
(does this work in flash anyway?)

greez
ubersquid

6. The observation is correct, but you can get around it using the % operator.
EG:
code:
```
stop();
function pointer(c:Number) {
var z:Number  = this.getNextHighestDepth();
var bob:MovieClip = this.createEmptyMovieClip("mc"+z, z);
bob.beginFill(c, 50);
bob.moveTo(0, 0);
bob.lineTo(-10, 10);
bob.lineTo(100, 0);
bob.lineTo(-10, -10);
bob.lineTo(0, 0);
bob.endFill();
return bob;
}
var raw_rotation:Number = 32500;
var reallySmallNumber:MovieClip = pointer(0xff00);
var bigNumber:MovieClip = pointer(0xff0000);
var smallNumber:MovieClip = pointer(255);
this.onEnterFrame = function() {
raw_rotation++;
var rsn:Number = raw_rotation-32760-32760-360;
var bn:Number = raw_rotation
var sn:Number = raw_rotation%360
reallySmallNumber._rotation = rsn;
bigNumber._rotation = bn;
smallNumber._rotation = sn;
var s = "Raw value: "+raw_rotation+"\n";
s += "\trsmall\tbig\tsmall\n";
s += "\t"+rsn+"\t"+bn+"\t"+sn+"\n";
s += "\t"+reallySmallNumber._rotation+"\t"+bigNumber._r  otation+"\t"+smallNumber._rotation+"\n";
trace(s);
};
```

(ps: Using .0 or .1 has no effect.)

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•

 » Home » Movies » Tutorials » Submissions » Board » Links » Reviews » Feedback » Gallery » Fonts » The Lounge » Sound Loops » Sound FX » About FK » Sitemap