-
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
-
Living Proof
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
near your 350ish degrees...
If someone tells you it can't be done,
it's probally because they don't know how.
-
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.. : )
-
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.
-
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
-
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.)
Last edited by AlsoGaiusCoffey; 02-23-2005 at 05:30 AM.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|