Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-06-2005, 15:08   #1 (permalink)
...
 
Benutzerbild von nonverbla
 
Registriert seit: May 2003
Ort: berlin
Beiträge: 414
AS wiederholt sich und bremst!

Hallo, ich habe schon seit längerem ein Problem:
Ich habe mehrere ganz einfache tweens gemacht, nach folgendem schema:


ActionScript:
  1. onClipEvent(load){
  2.     targetx = 120;
  3.     speed = 10;
  4. }
  5. onClipEvent(enterFrame){
  6.         _x += (targetx - _x)/speed;
  7. }

Dieses Script liegt auf dem zu tweenenden MC und wiederholt sich natürlich immer wieder ('enterFrame') und bremst den Computer runter.

gibts eine Möglichkeit, die onEnterFrame- Aktion zu beenden, wenn der gewünschte x-Wert erreicht ist?

Hilfe wäre nett,
gruß rasso
nonverbla ist offline   Mit Zitat antworten
Alt 12-06-2005, 15:16   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hallo!
onClipEvent(enterFrame) kann man nicht löschen. Deswegen legt man den auch besser per AS drauf. Das Ganze sieht dann so aus:
ActionScript:
  1. this.DeinMC.targetx = 120;
  2. this.DeinMC.speed = 10;
  3. this.DeinMC.onEnterFrame = function() {
  4.     this._x += (this.targetx-this._x)/this.speed;
  5.     Math.round(this._x) == Math.round(this.targetx)? (delete this.onEnterFrame, trace("deleted")): 0
  6. };
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 12-06-2005, 15:21   #3 (permalink)
...
 
Benutzerbild von nonverbla
 
Registriert seit: May 2003
Ort: berlin
Beiträge: 414
Danke für deine schnelle Antwort!

Das leuchtet mir einigermassen ein, nur: wo schreibe ich dann dieses AS rein? In die Zeitleiste, in der der MC, den ich tweenen will, liegt oder auf einen anderen, leeren MC?
nonverbla ist offline   Mit Zitat antworten
Alt 12-06-2005, 15:23   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
...einfach in die Zeitleiste. Der MC braucht dann den Instanznamen "DeinMC" bzw. kannst/musst du das dann bei mehreren MCs anpassen.
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 12-06-2005, 15:25   #5 (permalink)
...
 
Benutzerbild von nonverbla
 
Registriert seit: May 2003
Ort: berlin
Beiträge: 414
Lightbulb

Viielen Dank, ich probiers mal

bis bald
nonverbla ist offline   Mit Zitat antworten
Alt 12-06-2005, 15:40   #6 (permalink)
...
 
Benutzerbild von nonverbla
 
Registriert seit: May 2003
Ort: berlin
Beiträge: 414
Hallo,
es funktioniert! Ich versuche jetzt aber, eine Variable Namens 'counter' in der Haupzeitleist abzufragen und erst zu tweenen, wenn diese true ist:
ActionScript:
  1. this.haken.targetx = 120;
  2. this.haken.speed = 10;
  3. this.haken.onEnterFrame = function() {
  4.         if(this._root.counter_metzger == 7){
  5.             this._x += (this.targetx-this._x)/this.speed;
  6.             Math.round(this._x) == Math.round(this.targetx)? (delete this.onEnterFrame, trace("deleted")): 0
  7.         }
  8. }

Irgendwie funktioniert das nicht. Hoffentlich findest du den Fehler
nonverbla ist offline   Mit Zitat antworten
Alt 12-06-2005, 15:47   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Das sollte aber klappen. Beispiel:
ActionScript:
  1. this.haken.targetx = 120;
  2. this.haken.speed = 10;
  3. this.haken.onEnterFrame = function() {
  4.     if (_root.counter_metzger >= 7) {
  5.         this._x += (this.targetx-this._x)/this.speed;
  6.         Math.round(this._x) == Math.round(this.targetx) ? (delete this.onEnterFrame, trace("deleted")) : 0;
  7.     }
  8. };
  9. _root.counter_metzger = 0;
  10. this.onEnterFrame = function () {
  11.     _root.counter_metzger += 0.5;
  12.     trace(_root.counter_metzger);
  13. };
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 12-06-2005, 15:58   #8 (permalink)
...
 
Benutzerbild von nonverbla
 
Registriert seit: May 2003
Ort: berlin
Beiträge: 414
Thumbs up

Oh mann, ich depp!
Ich hatte die counter_metzger nicht richtig angesteuert! vielen Dank, es klappt!

Noch eine kleine Bitte: könntest du diese sehr elegante (für mich aber leider nicht vollkommen verständliche) Ein-Zeilen-If-Schleife nochmal als normale if- Schleife posten?

z.B. das :0 vestehe ich nicht, und ich will noch andere tolle sachen machen lassen, wenn der x-wert erreicht wird.
nonverbla ist offline   Mit Zitat antworten
Alt 12-06-2005, 16:02   #9 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Das hinter dem ":" ist quasi ein else. Die "0" sagt nur sowas wie "mach halt nix".
ActionScript:
  1. if(Math.round(this._x) == Math.round(this.targetx))
  2. {delete this.onEnterFrame;
  3. trace("deleted");
  4. }
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 12-06-2005, 16:03   #10 (permalink)
...
 
Benutzerbild von nonverbla
 
Registriert seit: May 2003
Ort: berlin
Beiträge: 414
Sehr charmant formuliert!
Danke und schönen Tag noch!
rasso
nonverbla ist offline   Mit Zitat antworten
Alt 12-06-2005, 17:43   #11 (permalink)
...
 
Benutzerbild von nonverbla
 
Registriert seit: May 2003
Ort: berlin
Beiträge: 414
Hallo, jetzt ist schon wieder ein neues problem aufgetaucht. Wenn ich zwei verschiedene Funktionen auf einen MC legen will, die durch verschiedene Ereignisse gestartet werden sollen und beide sich selbst deleten können, was muss ich dann anders machen?
ActionScript:
  1. this.metzger.onEnterFrame = function () {
  2.         if(this._root.anfang == true){
  3.             this.speed = 12;
  4.             this.targety = 105;
  5.             this._y += (this.targety - this._y)/this.speed;
  6.             if(Math.round(this._y) == Math.round(this.targety)){
  7.                 this._y = 105;
  8.                 delete this.onEnterFrame;
  9.                 trace("metzgerFertig_A");
  10.             }
  11.         }
  12. }
  13. this.metzger.onEnterFrame = function (){
  14.             if(this._root.counter_metzger == 7){
  15.                 this.targetx = -520;
  16.                 this._x += (this.targetx - this._x)/this.speed;
  17.                 if (this._x <= -500){
  18.                     delete this.onEnterFrame;
  19.                     this._parent.gotoAndStop("laster");
  20.                     trace("metzgerFertig_B");
  21.                 }
  22.         }
  23. }
Wenn ich den Funktionen verschiedene Namen gebe, bekomme ich fehlermeldungen, dass dies nicht zulässig ist. Ich verstehe dass nicht...
hast du eine Idee?

Geändert von nonverbla (12-06-2005 um 17:45 Uhr)
nonverbla 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 15:21 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele