Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-05-2006, 18:54   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Laufvariable zurücksetzen

Hallo,

ich habe ein etwas seltsames Problem, wie ich finde. Es sollte eigentlich nicht schwer zu lösen sein, aber ich komme einfach nicht auf eine Lösung.

Ich erstelle eine Linie dynamisch (lineTo) mit einer Laufvariable i - das ganze "onEnterFrame" und ausgelöst auf Tastendruck. Wenn einmal ausgelöst, bildet sich also die Linie und in dieser Zeit ist es nicht möglich, ein weiteres Mal zu drücken. Ist eine bestimmte Länge erreicht, stoppt das ganze und eine weitere Linie darf gezeichnet werden; dazu wird jedes Mal die Tiefe erhöht.
Soweit (fast) alles prima. ABER: Beim Starten der neuen Linie soll die Laufvariable i wieder bei Null anfangen. Das Problem: Wenn ich mache "if (Länge erreicht blabla) ... i = 0", bleibt i auf Null, denn das ganze liegt ja in "onEnterFrame".

Wie kann ich das umgehen?? Allmählich gehen mir die Ideen aus. Aber es war auch eher ein aussichtsloses Rumrätseln.

Danke schonmal für Anworten. Umso mehr, weil es ein langer Text ist - tut mir leid!

MfG
FireShark
FireShark ist offline   Mit Zitat antworten
Alt 10-05-2006, 19:48   #2 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
man mache:

Code:
var i:Number = 0;

_root.onEnterFrame = function() {
         
       trace(i);
		 
	 _root.i++;
         
        if (i > 10) {
              i=0;
        }
}
und ab 10 wird i tadellos wieder zurückgesetzt.

pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 10-05-2006, 22:40   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Ich bedanke mich schon mal.
Vielleicht habe ich das eigentliche Problem nicht genau genug geschildert. Es geht darum, dass nach besagter Bedingung (Länge erreicht) i auf Null gesetzt werden soll. Beim nächsten Tastendruck soll aber wieder hochgezählt werden.
Ich sehe nicht, wie das mit deinem Vorschlag funktionieren soll.

MfG
FireShark
FireShark ist offline   Mit Zitat antworten
Alt 11-05-2006, 00:12   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Ich habe das Gefühl, dass das Problem daran liegt, dass es sich immer um dieselbe Linie handelt, obwohl ich doch die Tiefe inkrementiere...?
Aber so etwas ist unzulässig: createEmptyMovieClip(_root["linie" + j], tiefe++);
Was tun?

Hier jetzt mal stark vereinfacht das Linienzeichnen:
ActionScript:
  1. i = 0; // Laufvariable
  2. tiefe = 0; // Tiefe der Linien
  3. dist = 0; // Um das Ergebnis zu erkennen (wenn es denn mal funktioniert), soll im Test jede neu ausgelöste Linie leicht versetzt anfangen.
  4. tastendruck_ok = 1; // Linie wird nach Tastendruck gezeichnet, wenn sie nicht schon am Zeichnen ist.
  5. function zeichnen() {
  6.     if (loszeichnen) {
  7.         if (!tastendruck_ok) i += 5;
  8.         createEmptyMovieClip("linie", tiefe++);
  9.         linie.lineStyle(1, 0x000000, 100);
  10.         linie.lineTo(i + dist, i);
  11.         if (linie._width > 400) tastendruck_ok = 1;
  12.     }
  13. }
  14. onEnterFrame = function() {
  15.     zeichnen();
  16.     if (Key.isDown(Key.SPACE) && tastendruck_ok) loszeichnen = 1, dist += 30, tastendruck_ok = 0, i = 0;
  17. }

Nochmal kurz die Problembeschreibung: Jeder Tastendruck soll das Zeichnen einer Linie auslösen. Während des Zeichnens darf ein Weiterdrücken aber nicht gehen. Wenn die Linie fertig ist, soll eine neue nach Tastendruck gezeichnet werden. Leider passieren jedoch seltsame Dinge, je nach dem, was ich versuche.

Vielen, vielen Dank schon mal, falls jemand etwas damit anfangen kann. Zur Not kann ich noch die .fla-anhängen.

MfG
FireShark
FireShark ist offline   Mit Zitat antworten
Alt 11-05-2006, 01:53   #5 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Aber wenn Du "i" nicht erhöhst zeichnest Du doch immer auf der selben linie?
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 11-05-2006, 09:41   #6 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Hier mal ein kleiner Ansatz, des Teil zeichnet solange Horizontale Linien, im abstand von 5 Pixel über die ganze Bühne, solange man den "Backspace" dückt, und des uintere der Bühnenende nicht erreicht worden ist!
PHP-Code:
var y0;
var 
dist Stage.width;
var 
tiefe 1;
var 
keyHit true;
function 
line() 
{
    
0;
    
tiefe++;
    
keyHit false;
    
this.createEmptyMovieClip("linie"+tiefetiefe);
    
this["linie"+tiefe]._y y;
    
this["linie"+tiefe]._x 0;
    
this["linie"+tiefe].lineStyle(10x000000100);
    
this["linie"+tiefe].onEnterFrame = function() 
    {
        
this.lineTo(this._x+dthis_y);
        
+= 5;
        if (
this._x+d>=dist
        {
            
+= 5;
            
keyHit true;
            
delete this.onEnterFrame;
        }
    };
}
var 
keytester = new Object();
keytester.onKeyDown = function() 
{
    if ((
Key.getCode() == Key.SPACE) && keyHit && y<=stage.height
    {
        
line();
    }
};
Key.addListener(keytester); 
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 11-05-2006, 15:16   #7 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Hey, besten Dank für die viele Mühe!! Das funktioniert!!!
Also war ich offensichtlich sehr kurz davor. Mit Deinem ersten Beitrag hast Du recht - das war falsch. Es war auch nur eine Anmerkung am Rande, eher eine Idee, von der ich mir nicht viel erhofft hatte, allein schon, weil ich dachte, dass das hier: createBlabla(blabla, tiefe++) eigentlich ausreichen müsste, damit ich eben nicht immer dieselbe Linie zeichne. Ob das überhaupt das einzige Problem war, weiß ich nicht. Ich werde das ganze jetzt noch einmal genau untersuchen bzw. vergleichen. Aber ich sagte ja - es hat immer fast funktioniert.

Vielen Dank noch einmal!!!

MfG
FireShark

P.S.: Du hast aber hier auch einen Fehler: Z. 16: "this.lineTo(this._x+d, this_y);".
FireShark ist offline   Mit Zitat antworten
Alt 11-05-2006, 16:14   #8 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Zitat:
Zitat von FireShark
P.S.: Du hast aber hier auch einen Fehler: Z. 16: "this.lineTo(this._x+d, this_y);".
Warum soll da ein Fehler sein
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 11-05-2006, 19:44   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Da fehlt ein Punkt: "this._y" muss es heißen.

Ich habe leider mittlerweile neue Probleme, die wahrscheinlich wieder keine sind. Meine Linie soll sich gleichzeitig auch in die andere Richtung ausbreiten.
Code:
this.lineTo(bla + i, bla);
this.lineTo(bla - i, bla);
geht nicht wirklich gut, denn beide Linien "überlagern" sich dabei. Mache ich aber das ganze direkt zwei mal, kriege ich das nicht gleichzeitig unter einen Hut - erstens, weil komischerweise immer nur ein "onEnterFrame" auf einmal funktioniert (obwohl die zweite Linie einen anderen Namen hat - ich verstehe das nicht) und zweitens, weil die weiteren Algorithmen mit dieser Linie dadurch nur komplizierter werden - sie nehmen dann auch beide Bezug aufeinander etc.

Ich warte nur darauf, dass irgendjemand antwortet, "Dann lass es doch gleich, wenn Du nur Probleme hast."... Mal abwarten.
Jede Hilfe willkommen!!

MfG
FireShark
FireShark ist offline   Mit Zitat antworten
Alt 12-05-2006, 00:08   #10 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Wennst entgegengesetzt eine linie zeichnen möchtest, muß einen zweiten mc dazu bemühen, des lineTo zeichnet immer vom registrierungspunkt des mcs aus!!
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 12-05-2006, 01:13   #11 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
So in der richtung bekommste gegenläufige linien, geht wahrscheinlich eleganter aber ein biusschen soll ja noch zum basteln bleiben!
PHP-Code:
var 0;
var 
0;
var 
550;
var 
tiefe1 1;
var 
tiefe2=2;
var 
keyHit true;
function 
line() 
{
    
tiefe1 += 2;
    
tiefe2 += 2;
    
trace("tiefe1 " +tiefe1);
    
trace("tiefe2 " tiefe2);
    
keyHit false;
    
this.createEmptyMovieClip("linie"+tiefe1tiefe1);
    
this.createEmptyMovieClip("linie"+tiefe2tiefe2);
    
this["linie"+tiefe1]._y y;
    
this["linie"+tiefe1]._x 0;
    
this["linie"+tiefe2]._y y+5;
    
this["linie"+tiefe2]._x 545;
    
this["linie"+tiefe1].lineStyle(10x000000100);
    
this["linie"+tiefe2].lineStyle(10x000000100);
    
this["linie"+tiefe1].onEnterFrame = function() 
    {
        
this.lineTo(this._x+d0);
        
this._parent["linie"+tiefe2].lineTo(b-this._parent["linie"+tiefe2]._x0);
        
+= 5;
        
-= 5;
        if (
this._x+d>=555
        {
            
0;
            
550;
            
+= 10;
            
keyHit true;
            
delete this.onEnterFrame;
        }
    };
}
var 
keytester = new Object();
keytester.onKeyDown = function() {
    if ((
Key.getCode() == Key.SPACE) && keyHit && y<=550) {
        
line();
    }
};
Key.addListener(keytester); 
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 13-05-2006, 16:45   #12 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Hallo,

die Antwort kommt leider etwas spät, sorry.
Abgesehen davon, dass ich beide Lininen vom selben Ort gestartet haben wollte, muss ich sagen: ES KLAPPT!!

Es sieht jetzt so aus:
PHP-Code:
this.lineTo(xfest iyfest);
this._parent["linie" u].lineTo(xfest iyfest); 
und eben nicht:
PHP-Code:
this.lineTo(xfest iyfest);
this.lineTo(xfest iyfest); 
.

Man merkt immer wieder, der Teufel steckt im Detail. Aber eine Frage habe ich noch: Beide Linien haben ja verschiedene Tiefen. Wenn ich aber zwei komplett unterschiedliche Linien mache, beispielsweise "linie_links" und "linie_rechts", klappt es nicht mehr. Wieso (nur interessehalber)?


Besten Dank noch mal!!!
MfG
FireShark
FireShark 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:20 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele