SitePoint Sponsor 

User Tag List
Results 1 to 2 of 2
Thread: Rotation problem  AS2.0

Jul 15, 2009, 17:28 #1
 Join Date
 Jul 2009
 Posts
 1
 Mentioned
 0 Post(s)
 Tagged
 0 Thread(s)
Rotation problem  AS2.0
I haven't coded in 2 years, been trying to solve this for almost 2 days now. I know there is an easy solution to this but I couldn't find it in a search:
I have a movieclip which moves in the direction its facing, and rotates left/right in order to face another movieclip. Occasionally the rotation will think that the longer direction is shorter, and viceversa.
If this has been asked a hundred times, just redirect me and delete the thread, but I couldn't find it.
( Flash CS3  ActionScript 2.0: )
Code:onClipEvent (load) { speed = 2; } onClipEvent (enterFrame) { target_angle = (Math.atan2(_root._ymousethis._y, _root._xmousethis._x)*180/Math.PI)90; if (this._rotation>target_angle) { this._rotation = 5; } else if (this._rotation<target_angle) { this._rotation += 5; } xspeed = Math.sin((this._rotation+180)*(Math.PI/180))*2; yspeed = Math.cos((this._rotation+180)*(Math.PI/180))*2*1; this._x += xspeed*speed; this._y += yspeed*speed; }

Sep 3, 2009, 18:48 #2
 Join Date
 Sep 2009
 Posts
 1
 Mentioned
 0 Post(s)
 Tagged
 0 Thread(s)
Hey StringTheory1, i was looking around and saw your post and decided to give it a try, it's actually a very simple fix, just replace your rotation portion with this:
Code Actionscript:/* All I did was make your code cleaner and easier to read, added the fix for that rotation problem, and changed the rotation of your movieclip on stage */ onClipEvent (load) { speed = 2; rotSpeed = 5; } onClipEvent (enterFrame) { target_angle = (Math.atan2(_root._ymousethis._y, _root._xmousethis._x)/(Math.PI/180))+180;//add 180 so we don't get negative numbers, ex. only #'s 0360 solvedRotation = this._rotation+180//make sure we dont get negatives with the rotation /* What the next block does is it finds the distance between solvedRotation and target_angle and will either + or  based on which is under 180, so you dont have the weird make a full 360 to get to a spot that was 3 degrees away */ if(target_anglesolvedRotation<180){ this._rotation+=rotSpeed; }else if(target_anglesolvedRotation>180){ this._rotation=rotSpeed; }else{ if (solvedRotation>target_angle+3) { this._rotation = rotSpeed; } /* We subtract and add a little bit to target_angle so the movieclip won't "shake" remove the changes and you'll see what i mean */ if (solvedRotation<target_angle3) { this._rotation += rotSpeed; } } xspeed = Math.cos(Math.PI/180 * this._rotation)*speed yspeed = Math.sin(Math.PI/180 * this._rotation)*speed this._x += xspeed this._y += yspeed } /* That's it! email me if you need help [email]andy@crockettfarms.com[/email] */
Bookmarks