Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-11-2005, 08:41   #1 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
Mathe - Gleichmäßig beschleunigte, Bewegung, 2 dimensional

Hi leute,

ich glaub ich hab n nassen keks im kopf. kann mir mal jemand auf die sprünge helfen? ik versuche die ganze zeit eine 2dimensionale!, gleichmäßig beschleunigte bewegung hinzubekommen. gleichmäßige beschleunigung, no problem, aber bei der 2. dimension hackt's im hirn. wenn man sich bitte mal jemand den anhang anschauen möchte, dort sieht man, das sich der mc ohne probleme zur x & y koordinate bewegt, nur leider nicht in abhängigkeit der größe von moveToX & moveToY. hier das script, aber ich glaube im anhang wird deutlicher was ich meine. (wenn nebenbei noch eine elegantere lösung als if / else für die negativen moveTo's rauskommt, wär das toll)
PHP-Code:
this.stop();
//  -----------------------------------------------------------------------------
var _r:MovieClip _level0;
var 
_t:MovieClip this;
var 
mLi:Object = new Object();
//  -----------------------------------------------------------------------------
_t.createEmptyMovieClip('line'_t.getNextHighestDepth());
//  -----------------------------------------------------------------------------
function info() {
    
txtX.text mcShow._x;
    
txtY.text mcShow._y;
    
_t.line.clear();
    
_t.line.lineStyle(10xcccccc100);
    
_t.line.moveTo(00);
    
_t.line.lineTo(mcShow._xmcShow._y);
}
function 
calc() {
    var 
0;
    var 
0.04;
    var 
moveToX:Number _t._xmouse;
    var 
moveToY:Number _t._ymouse;
    var 
checkSum1 Math.sqrt(Math.pow(moveToX2) + Math.pow(moveToX2));
    var 
setInterval(function () {
        
t++;
        var 
= (Math.pow(t2)) / 2;
        
mcShow._x += s;
        
mcShow._y += s;
        var 
checkSum2 Math.sqrt(Math.pow(mcShow._x2) + Math.pow(mcShow._y2));
        if (
checkSum2 >= checkSum1) {
            
clearInterval(i);
            
mcShow._x moveToX;
            
mcShow._y moveToY;
        }
        
info();
    }, 
12);
}
mLi.onMouseDown = function() {
    
mcShow._x 0;
    
mcShow._y 0;
    
calc();
};
//  #
Mouse.addListener(mLi); 
schonmal danke sagend,
shorty @ schämt sich der frage wegen ....


btw: pls. keine tipp's ala , nimm das animation package o.ö.
Angehängte Dateien
Dateityp: zip keksImKopf.zip (9,0 KB, 16x aufgerufen)
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.
shorty ist offline   Mit Zitat antworten
Alt 17-11-2005, 10:14   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Nimm doch am besten das Animation-Package

Nein im Ernst, die calc-Funktion ist ein ziemlicher wurscht.

Als allererstes solltest du dir überlegen, wo du die ganzen Variablen ablegst.
Es ist keineswegs selbstverständlich, dass du sie in der Funktion, welche über das Interval aufgerufen wird, verwendet werden können. Schon garnicht, dass du das Interval mit der Variable i wieder löschen kannst, i gibt es schließlich erst, wenn deine Funktion schon erstellt wurde.
Wenn du weißt, warum es funktioniert, dann solltest du dir bewusst machen, das so mit jedem Aufruf von calc die Variablen und die Funktion für immer im Speicher landen.

Was die Berechnung angeht:
PHP-Code:
var = (Math.pow(t2)) / 2;
mcShow._x += s;
mcShow._y += s
Das kann jawohl nicht sein, das du x und y auf die gleiche Weise manipulierst, da kann ja nur eine Bewegung auf einer der Quadrantenhalbierenden ergeben.

Am einfachsten dürfte es sein, indem du es mit Vektoren machst, am Anfang der Bewegung einmal die nötigen Daten berechnen:
PHP-Code:
way_x x1 x0;
way_y y1 y0;

way_abs Math.sqrt(way_x way_x way_y way_y);

unit_x way_x way_abs;
unit_y way_y way_abs
Und dann in der Bewegung unit_x und unit_y mit s multiplizieren, um die neue Position relativ zum Startpunkt zu erhalten.
(nicht zur aktuellen Position dazu addieren, das dürfte eine noch andere Bewegungsart ergeben)
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 17-11-2005, 10:33   #3 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
hallo janosch
Zitat:
Als allererstes solltest du dir überlegen, wo du die ganzen Variablen ablegst.
Es ist keineswegs selbstverständlich, dass du sie in der Funktion, welche über das Interval aufgerufen wird, verwendet werden können.
einspruch euer ehren. es ist genau anders rum. das interval liegt innerhalb der funktion, die funktion ruft das interval auf. mit i wird das interval initialisiert, und da i per var i = ... innerhalb der function deklariert wird sollte es doch keine probleme geben (ich schäm mich so)
Zitat:
Wenn du weißt, warum es funktioniert, dann solltest du dir bewusst machen, das so mit jedem Aufruf von calc die Variablen und die Funktion für immer im Speicher landen.
wenn dem so ist (ich vertrau dir da blind), landen dort genau 4 var's, welche bei erneutem aufruf der funktion überschrieben werden, ich denk das ist im rahmen des erträglichen
Zitat:
Das kann jawohl nicht sein, das du x und y auf die gleiche Weise manipulierst, da kann ja nur eine Bewegung auf einer der Quadrantenhalbierenden ergeben.
hatte ich auch nicht vor, da ich genau an der stelle abgebrochen und diesen thread gepostet habe.
PHP-Code:
way_x x1 x0;
way_y y1 y0;

way_abs Math.sqrt(way_x way_x way_y way_y);

unit_x way_x way_abs;
unit_y way_y way_abs
das werd ich doch gleich mal probieren ...

btw: way_x * way_x + way_y * way_y ? weil math mehr resourcen in anspruch nimmt?
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (17-11-2005 um 10:35 Uhr)
shorty ist offline   Mit Zitat antworten
Alt 17-11-2005, 10:56   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
x * x weil es mir einfacher erscheint, aber ich glaube das nimmt sich nichts.

Es landen nicht nur die 4 Variablen, sondern auch die Funktion im Speicher. Und zwar jedesmal eine neue.

Bevor i einen Wert bekommen kann, muss dieser erstmal festehen, und der steht dann fest, wenn setInterval ausgeführt wurde. Und setInterval wurde dann ausgeführt, wenn die Funktion erzeugt, und das Interval irgendwo in den Innereien von Flash registriert wurde.

Egal wie man es dreht und wendet, dieses Verhalten wird öfters mal genutzt, bei Delegates, und meist bei onLoad-Events, aber sauber ist es nicht. Praktischer Bug oder Feature?

Zitat:
Zitat von Macromedia LiveDocs
If you declare variables inside a function, the variables are local. They are defined for the function and expire at the end of the function call. More specifically, a variable defined using var is local to the code block containing it. Code blocks are demarcated by curly braces ({}).
Und davon sollte man im normalen Gebrauch auch ausgehen.

Also speichere den Kram lieber in deiner Timeline zwischen, kannst ihn ja in ein Objekt stecken, noch besser OOP mit ner Klasse Movement oder so, die dann die Daten enthält.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 17-11-2005, 11:09   #5 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
Zitat:
Also speichere den Kram lieber in deiner Timeline zwischen, kannst ihn ja in ein Objekt stecken, noch besser OOP mit ner Klasse Movement oder so, die dann die Daten enthält.
du triffst den nagel auf den kopf. die berechnung für single x & single y steht dort schon, mir fehlte zum volkommenen glück halt die lösung für x + y. das mit dem interval werd ich mir mal zur brust nehmen...

Ähmmm janosch, nochwas: Danke!


shorty
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (17-11-2005 um 11:10 Uhr)
shorty ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele