Raumschiff flüssige rotation [Flash 10]
| 22.09.2010, 13:05 | | Beiträge: 44 Registriert: Jul 2009
| Raumschiff flüssige rotation ActionScript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import fl.motion.MotionEvent;
var lastShipFrame:int = 0;
ship_mc.gotoAndStop(0);
this.addEventListener(Event.ENTER_FRAME,renderFrame);
function renderFrame(evt:Event):void
{
var getAngle:Number = Math.atan2(stage.mouseY - ship_mc.y,stage.mouseX - ship_mc.x) * 180 / Math.PI;
var RoundAngle:int = Math.round(getAngle + 180);
shipRotation(RoundAngle);
}
function shipRotation(Angle:int):void
{
var Rotation:* = Angle % 360;
lastShipFrame = 32 / 360 * Rotation + 1;
ship_mc.gotoAndStop(lastShipFrame);
}
|
Hallo !
ich bau mir gerade ein spiel, aber jetzt weis ich nicht mehr so weiter .
Ich möchte das mein schiff , wenn es sich dreht , nicht direkt auf die positon ist.
Also wenn es z.b auf lastShipFrame = 14 ist und zu 32 muss, dass es von 14 auf 15 , 16 , 17 .... 32 bewegt und nicht direkt von 14 auf 32.
Ich möchte halt eine richtige rotation. ^^ danke
*edit
hab ein beispiel von TweenMax ! so sollte es mit der animation dann auch gehen.
TweenMax.to(mc, 1, {shortRotation:{rotation:270}});
aber leider habe ich keine ahnung wie ich da meine frams von shipRotation rein bekomme ! | Geändert von Executor am 22.09.10 um 13:15 Uhr
| |
|
| 22.09.2010, 13:17 | Re1 | Beiträge: 188 Registriert: May 2007
| den aktuelle frame kriegt man mit mc.currentFrame.
zum nächsten frame gelangst du mit mc.nextFrame()
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/MovieClip.html#nextFrame%28%29
jetzt könntest du eine enterFrameListener starten und vom currentFrame zum nextFrame springen, bis Ziel erreicht.
habs aber nicht ausprobiert...
das könnte auch helfen.
http://www.greensock.com/timelinelite/ | |
| 22.09.2010, 13:44 | Re2 | Beiträge: 44 Registriert: Jul 2009
Themenautor/in
| ja das ist gut und schön ^^ aber so hab ich jetzt ein neues problem :(
wenn ich z.b auf Frame 28 bin und zu 5 gehen will , soll er wissen wie rumm er sich drehen soll ! also den kürzere weg finden. | |
| | | nicht sichtbar bei eingeloggten Mitgliedern | 
|
| 22.09.2010, 13:59 | Re3 | Beiträge: 188 Registriert: May 2007
| du könntest die differenz bilden?
var start = 28
var end = 5
var max = 32
start -end = x
(max -start ) + end = y
if (x>y)
{
mc.nextFrame();
}
else
{
mc.prevFrame();
}
oder so ähnlich. | |
| 22.09.2010, 14:34 | Re4 | Beiträge: 44 Registriert: Jul 2009
Themenautor/in
| PHP:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
import fl.motion.MotionEvent;
import gs.*;
import gs.easing.*;
var lastShipFrame:int = 0;
ship_mc.gotoAndStop(0);
this.addEventListener(Event.ENTER_FRAME,renderFrame);
function renderFrame(evt:Event):void
{
var getAngle:Number = Math.atan2(stage.mouseY - ship_mc.y,stage.mouseX - ship_mc.x) * 180 / Math.PI;
var RoundAngle:int = Math.round(getAngle + 180);
shipRotation(RoundAngle);
}
function shipRotation(Angle:int):void
{
var Rotation:* = Angle % 360;
var teest:*=TweenMax.to(folger, 1, {shortRotation:{rotation:Rotation}});
var teste:* = teest.target["rotation"];
var RoundAngle:int = Math.round(teste +360);
Rotation = RoundAngle % 360;
lastShipFrame = 32 / 360 * Rotation + 1;
trace(lastShipFrame)
ship_mc.gotoAndStop(lastShipFrame);
}
|
danke hab es jetzt so hinbekommen ^^ hab mir einfach ein zweites mc genommen und das mit shortRotation rotiren lassen und mit den ergebnixx lass ich mir die frams berechnen. ;) | Geändert von Executor am 22.09.10 um 14:35 Uhr
| |
|
| | Themen Ähnliche Beiträge zum Thema | 26.02.2012 - PikAssO 05.09.2011 - drpelz 23.03.2010 - Doubelfla 16.09.2009 - matzelarts |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News 
Regeln & Bedingungen
|