Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-07-2004, 15:34   #1 (permalink)
Angsthase
 
Benutzerbild von royal_flash
 
Registriert seit: Jun 2001
Ort: Kölle
Beiträge: 591
Talking Funktionen - grundlegende Fragen - vorsicht noob am Werk

Hallo Forum,

ich steige immer noch nicht ganz hinter die Geschichte mit den Funktionen.

Fallbeispiel:

Ich habe 10 MC's auf der Bühne. Diese sollen sich von links nach rechts bewegen. Jetzt würde ich einfach auf alle 10 fogendes Script hauen:
PHP-Code:
onClipEvent (load) {
    
ziel=XXX;
    
speed=XXX;
}
onClipEvent (enterFrame) {
    if (
_x<ziel) {
        
_x+=speed;
    }

...aber ich würde das ganze lieber zentral abhandeln. Also eine function definieren an die ich nur die Var's ziel & speed übergebe - und damit dann MC's bewegen ... ich bekomme es aber einfach nicht hin ... und das Hanbuch ist mir zu kompleziert formuliert ...

so help please
royal_flash ist offline   Mit Zitat antworten
Alt 18-07-2004, 15:53   #2 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
dafür eignen sich die movieclip prototype gut
PHP-Code:
MovieClip.prototype.move = function(endwertspeedbegin) {
    if (
this._x<=endwert) {
        
this._x += speed;
    } else {
        
this._x begin;
    }
};
onClipEvent (enterFrame){
    
//aufruf
    
meinmc.move(500,20,0)
    
    } 
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 18-07-2004, 15:57   #3 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
mit flash 5 ist das so ne sache da gefällt einem ja schon das eventmodell gar nimmer mehr

aber gut

functionen sind ansich die einfachste art zu programmieren und doch lernt man sie 1. spät und 2. durch das späte lernen fällt einem die denkeweise recht schwer.

das prinzip hinter einer function ist das sie aufgerufen wird und etwas spezielles tut.

1. sollte man überlegen was soll meine funktion tun und was wäre ein passender name
- in diesem fall einen Mc bewegen der name wäre also moveMc

2. überlegt man was brauche ich um einen Mc zu bewegen
einmal den MC, einmal die ziel xPos und einmal die ziel yPos und letztlich wie schnell soll der mc sich bewegen. also definieren wir die Parameter der funktion pMc, pTargetX, pTargetY, pSpeed

so das ganze könnte man nun wie folgt scripten




Bildaktion:
PHP-Code:
this.moveMc = function(pMcpTargetXpTargetYpSpeed) {
    
pMc._x += pSpeed;
    
pMc._y += pSpeed;
    if (
pMc._x>=pTargetXpMc._x pTargetX;
    if (
pMc._y>=pTargetYpMc._y pTargetY;
}; 
und der aufruf

Clipaktion:
PHP-Code:
onClipEvent (load) {
    
targetX=500;
    
targetY=this._y;
    
speed 10;
}
onClipEvent(enterFrame){
    
this._parent.moveMc(thistargetXtargetYspeed);

vielleicht hilft es dir
__________________
TVNEXT Solutions

Geändert von atothek (18-07-2004 um 16:00 Uhr)
atothek ist offline   Mit Zitat antworten
Alt 18-07-2004, 15:57   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 296
hi, man könnte es sicherlich auch prototypes lösen,
hier aber die Normalfunktionslösung.

PHP-Code:
//MC AS
onClipEvent (load) { 
    
ziel=XXX
    
speed=XXX

onClipEvent (enterFrame) { 
    
_root.move_MC(ziel,speed,_name);

}
//Frame Funktions AS, wenn mc's direkt auf root liegen und nicht in unter mc'S
move_MC=function(a,b,c){
if (
_root[c]._x<a) { 
       
_root[c]._x+=b
    } 

ich hoffe, dass es das war was Du meintest

Gruß Serge
Serge ist offline   Mit Zitat antworten
Alt 18-07-2004, 16:07   #5 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
ActionScript:
  1. // funktion schreiben, die alle Movieclips benutzen können...
  2. // prototype ist praktisch die dna, die informationen weitergibt an die kinder...
  3. // da sjeder mc ein 'kind' von der Klasse MovieClip ist, kann er nun die funktion rufen...
  4.  
  5.  
  6. MovieClip.prototype.bewegDich = function(ziel, speed){
  7.              // innerhalb einer prototyep-fkt ist 'this' der verweis auf den aufrufer...
  8.  
  9.             // hänge an den mc, der dir funktion ruft, den 'ziel'wert und den 'speed'wert.
  10.             this.ziel = ziel;
  11.             this.speed = speed;
  12.             this.onEnterFrame = function(){
  13.                   if (this._x < this.ziel) {
  14.                       this._x+= this.speed;
  15.                   }
  16.                   if(this._x >= this.ziel) {
  17.                      // wenn zielwert erreicht oder überschritten, dann lösche den enterframe
  18.                   if(this._x >= this.ziel) { delete this.onEnterFrame;}
  19.             }
  20. }

und damit alle die funktion aufrufen, macht man am einfachsten folgendes...
man nimmt jeden einzelnen mc und setzt ihn in ein array

ActionScript:
  1. mcArray =[mc1, mc2, mc3, mc4, mc5];

und nun kann man in einer schleife alle mc´s, die im array sind, auf einmal die funktion 'bewegDich' rufen lassen...

ActionScript:
  1. for(var i=0; i< mcArray.length; i++){
  2.        var mc = mcArray[i];
  3.        mc.bewegDich(400, 10);
  4. }

jetzt rufen alle mc´s, die im array abgelegt sind, die funktion 'bewegDich', die ja für alle mc´s zugänglich ist, da sie über die dna-kette(prototype) des mutterelementes, in dem fall MovieClip, vererbt wurde an die kinder....


verstanden?


bei fragen fragen...


greetz


kelor

Geändert von kelor (18-07-2004 um 16:10 Uhr)
kelor ist offline   Mit Zitat antworten
Alt 18-07-2004, 16:13   #6 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
@ kelor ist leider flash5 und net mx. hatte auch erst ne 6 syntax gemacht und dann oh nein. flash 5 ist ja bald schon nicht mehr wahr

ansonsten eine sehr schöne erklärung des prototypes kurz, prägnant, und das was es ist
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 18-07-2004, 16:13   #7 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
hi,

zur Erläuterung des MovieClip.prototype :
Das MovieClip ist eine Klasse die Methoden/Funktionen enthält. Jedes MovieClip,
dass du erstellst, ist eine Instanz/Kopie dieser Klasse und verfügt somit auch
über alle Methoden dieser Klasse wie z.B. "onEnterFrame" (es gibt noch mehr,
dass nur als beispiele).

Wie du auch weist, kannst du "onEnterFrame" von jedem MovieClip aufrufen.
Willst du nun eine neue Methode der Klasse "MovieClip" zufügen, benutzt du
"MovieClip.prototype.deineNeueFunction". du kannst auch jeder dieser selbst
erstellten Functions Parameter zuweisen wie "end, speed, begin" diese
können dann in der Function weiterverarbeitet werden.



Damit hast du nun jedem MC, das du erstellst deine neue Function zugefügt
PHP-Code:
MovieClip.prototype.move = function(endspeedbegin) { 
this.onEnterFrame = function(){
     if (
this._x<=end) { 
         
this._x += speed
     } else { 
         
delete this.onEnterFrame;
         
this._x begin
     }

}; 
hier wurde die Function "move" der MovieClip-Klasse angehängt. Diese Function kann man nun von jedem Mc aufrufen:
PHP-Code:
deinMc0.move(50020)
deinMc1.move(50020)
deinMc2.move(50020)
deinMc3.move(50020)
deinMc4.move(50020)
deinMc5.move(50020)
deinMc6.move(50020)
deinMc7.move(50020)
deinMc8.move(50020)
deinMc9.move(50020
verbindet man das nun mit einer Schleife kann man sich verdammt viel AS-Code sparen:
PHP-Code:
for(i=0;i<10;i++){
_root["deinMc"+i].move(50020)


hoffe, ich konnte dir damit etwas helfen



Edit:
ach ... verdammter Schice !!!
hab ja garnet gemerkt, dass des hier FLASH 5 ist !!!
und ich tipp mir den Wolf ... naja, was solls, hoffe es hilft trotzdem
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs

Geändert von :: RK :: (18-07-2004 um 16:17 Uhr)
:: RK :: ist offline   Mit Zitat antworten
Alt 18-07-2004, 16:21   #8 (permalink)
Angsthase
 
Benutzerbild von royal_flash
 
Registriert seit: Jun 2001
Ort: Kölle
Beiträge: 591
Uiii ... das ging schnell danke schonmal an alle ... werde mich da jetzt durchlesen

EDIT: so gelesen und verstanden ... vielen dank ... btw. glaube ich muss auch mit MX anfangen das sieht funky aus - leider muss ich fast immer mit Flash5 als vorgabe arbeiten

so long royal

Geändert von royal_flash (18-07-2004 um 16:31 Uhr)
royal_flash ist offline   Mit Zitat antworten
Alt 18-07-2004, 16:28   #9 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
aarrgghhh ::RK::

nimm das hier sofort zurück...

Zitat:
und verfügt somit auch
über alle Methoden dieser Klasse wie z.B. "onEnterFrame" (es gibt noch mehr,
dass nur als beispiele).




kein onEvent...ich betone KEIN onEvent ist ein bestandteil der klasse MovieClip, weder im prototype, noch im __proto__, noch sonst wo...

das kann ich - leider - nicht so stehen lassen...

Edit:
[Flash 5] - Funktionen - grundlegende Fragen - vorsicht noob am Werk


iiihhhh... seh ich eben erst...arrgghhh



greetz


kelor

Geändert von kelor (18-07-2004 um 16:31 Uhr)
kelor ist offline   Mit Zitat antworten
Alt 19-07-2004, 12:21   #10 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
hi kelor,

hää ??? ich kann aber "onEnterFrame" nur durch ein Mc aufrufen ... wieso sollte
es dann nicht zur dieser Klasse gehören ???

kannsch mich mal bidde aufklären ??? Wie isch des jetzt richtig ???
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: ist offline   Mit Zitat antworten
Alt 19-07-2004, 12:40   #11 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
na onEnterFrame ist eine Variable des jeweiligen mc´s der eine anonyme function zugewiesen wird. diese variable/function ist "reserviert" und wird beim eintreten des events "frame betreten" aufgerufen. die function ist aber nicht teil der klasse das kannst du folgendermaßen sehen

PHP-Code:
this.mc1 = new MovieClip();
this.mc1.onEnterFrame = function() {
    
trace("wird nicht aufgerufen!");
};
trace(typeof(this.mc1)); // object
// this.mc1.onEnterFrame(); // man kann es manuell aufrufen in diesem fall ist es ein einfacher functions aufruf

this.createEmptyMovieClip("mc2",1);
this.mc2.onEnterFrame = function() {
    
trace("wird  aufgerufen!");
};
trace(typeof(this.mc2)); // movieclip 
daran erkennst du das es nicht teil der klasse ist, da das erzeugte object nicht über diese methode verfügt. das erzeugte object ist auch kein movieClip sondern ein object.
__________________
TVNEXT Solutions

Geändert von atothek (19-07-2004 um 12:43 Uhr)
atothek ist offline   Mit Zitat antworten
Alt 19-07-2004, 13:06   #12 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
ergänzend zur erklärung von atothek...

keiner der sogenannten onEvents ist bestandteil der klasse...will heißen:

du findest nirgendwo in der vererbungskette einen dieser events...somit ist es auch keine methode der klasse...

weder im prototype, noch der klasse selbst, noch __proto__oder sonst wo sind diese events verankert...

der fehler wird immer wieder gemacht, dass man sagt, dass wären movieclip-methoden...
des stimmt einfach net...

standardmäßig kann ein onEnterFrame, wie der name schon sagt, nur auf eine zeitleiste angewandt werden [frames halt...*g*], die dann vom typ 'MovieClip' ist.
deshalb glaubt man irrtümlicherweise, dass das ein bestandteil von MovieClip wäre, ist aber net so...

so wie man denken könnte, das onPress oder onRelease ein bestandteil von button wäre...oder ist es doch eher eine frage eines Listeners, der die maus überwacht?
den onPress ist ja definitiv eine mausaktion und keine buttonaktion...

ebenso verhält es sich mit

_alpha, _visible, _x, _yscale etc...
das sind keine eigenschaften eines MovieClips...

eigentlich ist es eher so, dass das systemeigenschaften sind, die dann auf das objekt hin angewandt werden, also wird eher der movieclip als objekt an die systemeigenschaft screenX gereicht und nicht umgekehrt...

aber das führt zu weit weg...und hat eigentlich nix mehr mit dem thema zu tun...
btw... onEvents sind keine objektmethoden...


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 19-07-2004, 14:31   #13 (permalink)
Neuer User
 
Benutzerbild von :: RK ::
 
Registriert seit: Jan 2002
Ort: Umgebung Stuttgart
Beiträge: 5.412
ok, danke für die aufklärung
__________________
Das Glück im Leben hängt von den guten Gedanken ab, die man hat.

Easing_Equations / Flash Kontaktformular / FlashPlugin W3C konform / Nützliche Beiträge zu FAQs
:: RK :: ist offline   Mit Zitat antworten
Alt 19-07-2004, 16:17   #14 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Zitat:
Zitat von :: RK ::
ok, danke für die aufklärung
was auch immer das heissen mag
mfg .r
bokel ist offline   Mit Zitat antworten
Alt 19-07-2004, 16:58   #15 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
irgendwas konstruktives dazu von dir?


greetz

kelor
kelor 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 13:53 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele