| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Dec 2011
Beiträge: 9
|
Hallo Zusammen Ich lerne mich gerade in AS3 und Document Class ein und hab dazu ein paar Grundsatzfragen. Sinn der Document Class ist es ja, kein AS Code mehr in der Zeitleiste zu verfrachten sondern alles im externen .AS file zu definieren und per AddChild zur DisplayList hinzu zu fügen bzw. dann auf die Bühne zu platzieren. Ich hab das bisher auch so verstanden dass man benötigte Buttons, Bilder etc. entweder A) direkt in AS schreiben und platzieren kann oder B) die MovieClips einfach erstellt, mit Instanznamen versieht und dann über eine externe AS Klasse steuern kann. Mal bis dahin, sehe ich das richtig? Nun zu meiner eigentlichen Frage. Ich baue ein kleines Projekt mit Intro-Movie und verschiedenen Bühnen. die verschiedenen Bühnen sind jeweils auf Keyframes verteilt (siehe Screenshot). Dazu soll es natürlich Buttons geben, welche auf den entsprechenden Bühnen platziert werden - quasi Weiter und Zurück-Buttons womit der Benutzer dann zur nächsten bzw. vorherigen Bühne springen kann. Früher wurde das simpel mit on release gotoandplay("city") zum Beispiel gelöst. Weitere Frage ist auch was ich denn mit den ganzen Stop() - Play() Controls etc. mache. Früher hat man einfach bis zum Frame X abgespielt, dann war dort ein stop(). Ja klar, ich kann in der Document-Class im Konstruktor ein Stop machen, aber dann stoppt er einfach auf Frame 1. Wenn ich dann zu einem anderen Frame springe, soll dort ja auch wieder gestoppt werden etc. Also ich brauch sowas wie onEnterFrame und das gibts ja auch nicht mehr wie es mal war. ![]() Wie löse ich das jetzt aber mit einer Dokumenten Klasse und AS3? Mir ist klar, dass die Buttons EventListener erhalten, aber wie platziere ich je nach Keyframe die einzelnen Elemente? Ich stelle es mir unglaublich kompliziert vor da 30-40 Elemente (das wird jede Bühne schon in etwa haben) alles per AS zu platzieren und dann noch das entsprechende Keyframe abzufragen. Wie sollte man so etwas angehen? Ich habe in div. Foren auch gelesen dass es bei einer Document Class gar keine Zeitleiste mehr geben soll, also alles in Frame 1 passiert. Wie ich das dann mit addChild realisieren soll, da verliere ich jetzt völlig den Faden :-) Also wie soll man das am besten machen und wo kommt welcher AS3 Code hin? Klasse in AS und Instanzierung doch noch in das entsprechende Keyframe? Oder doch lieber bei den entspr. Keyframes alles ganz normal platzieren und einfach mit EventListenern arbeiten? Ich hab irgendwie ein komplettes Durcheinander mit neu und alt und was kommt jetzt wohin :-) Ich hab mir auch schon Tutorials wie das da Übersicht Kursthemen - Einführung in die objektorientierte Programmierung (OOP) in ActionScript im Detail reingezogen, aber auch hier wirds mal so mal so gemacht und ich weiss nicht, was für mein Projekt der richtige Ansatz wäre. Danke für jeden Tipp oder weiterführenden Link zum Thema! Grüsse Hagi |
| | |
| | #2 (permalink) |
| + Zimt & Zucker Registriert seit: Mar 2006 Ort: hinterm Mond gleich links
Beiträge: 2.040
|
Du solltest die Zeitleiste nciht für die Steuerung des Programmablaufes nutzen, da dies Aufgabe der Dokumentklasse ist. Beide Köche zusammen verderben hier den Brei. Deine Hauptzeitleiste besitzt ein Bild. Du erstellst für jeden Zustand deiner Anwendung ein Objekt und fügst diese dann zur Anzeige hinzu bzw. entfernst sie wieder. Um von deiner Introanimation zu erfahren, wann sie zu ende ist, nutzt du entweder addFrameScript oder setzt "per Hand" auf das letzte Bild ein dispatch(...) um ein Event zu feuern, auf das du dann in der Dokumentklasse hörst.
__________________ anbei Grüße vom milchreis: Viva la [Silb] "Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!" [Von null auf Flash in einem Klick.] <<< klick |
| | |
| | #3 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
wenn du scipte in die mc's also deren zeitleisten schreibst und an den scripten arbeitest (ergänzen/ ändern) dann musst du bei jedem testen die komplette fla compilieren, da ja grafik und programm direkt verbunden ist. bei wirklich grossen projekten kann das schon mal was dauern. und da man beim entwickeln ständig mal testen will hält das ganz schön auf. da haben wir schonmal ein kriterium: bei kleine projekten ist es eigentlich egal wie du es machst. bei grösseren projekten (und dann aus gewohnheit und aus prinziep doch bei allen) wird grafik und script streng getrennt. in der fla nur noch ganz elementare scripte (z.b. rollover verhalten von buttons), das als swc vorkompiliert (z.b. ordner /assets/xxx.fla und /libs/xxx.swc). OOP: wird grafik benötigt, dann instanziert (erzeugt) eine entsprechende klasse ein mc und stellt es auf die bühne. so ein mc kann einen kompletten dialog mit buttons usw. beinhalten (/view/dialog). die grundfunktionen wie rollover sind ja schon vorhanden. die individuellen funktion der buttons usw. wird mit der view klasse initialisiert (buttons sind controller). also du musst nicht komplett auf frames verzichten, sondern nur sinnvoll aufteilen. alles sollte in sich möglichst autark funktionieren, damit eine änderung keinen einfluss auf irgend eine andere stelle hat. wenn du z.b. ein mc mit zusammengehörigen bildern und mit animation hast, dann schreibe dafür eine klasse (/view/panel) diese klasse instanziert das mc, stellt es auf die bühne und startet z.b. die animationen. also es macht alles, was dieses und nur dieses panel zu tun hat. du könntest in der hauptzeitleiste frame 1 einen ladebalken anzeigen, frame 2 ein menü, frame 3 eine info, frame 4 ... das macht man halt nicht mehr! das rein per programm: ist dein programm beim laden, dann setze per programm den ladebalken auf die bühne. status menüanzeigen, dann halt per programm die bühne lehrräumen und nur das menü anzeigen usw. wenn sich am grundsätzlichen ablauf deines programm's etwas ändert müsstest du frames einfügen, alles testen .. das ist aufwendig und fehleranfällig. wenn du hingegen per programm einen neuen status definierst, das geht einfach und sollte die anderen statuszustände nicht beeinflussen. in der dokumentenklasse bräuchte nur eine routine liegen, die bei einem statuswechsel zwei dinge aufruft: zerstöhren des aktuellen status und herstellen des neuen status. wer dabei was zu machen hat steht in den jeweiligen klassen. ich hoffe, man kann wenigstens einen teil meines textes verstehen :-)
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (25-01-2012 um 23:46 Uhr) |
| | |
| | #4 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Es gibt übrigens mehr als nur die eine DokumentKlasse. Über die Bibliothek (Rechtsklick > Eigenschaften > Erweitert > Klassenname) kannst Du jedes Symbol mit einer entsprechenden Klasse verknüpfen.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (25-01-2012 um 23:06 Uhr) |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Dec 2011
Beiträge: 9
|
Vielen Dank für die Antworten! Das bringt mich schonmal weiter :-) Ok dann ist mir schonmal klar, dass wenn eine docClass verwendet wird, die hauptzeitleiste nur 1 bild enthält. In den MCs sollen dann nur elementare scripts verwendet werden welche design betreffen, aber keine programmlogik. Korrekt? @Milchreis: verstehe ich es richtig, für jeden zustand (in meinem falle intro, city, openair etc) am besten einen MC zu erstellen, dort die elemente zu organisieren (sprich animation im hintergrund, interaktive flächen für video-popups etc) zu integrieren und dann diese per addchild/removechild auf die bühne zu platzieren (also per skript)? Ich hatte vor, das ende des introvideos über cuepoints abzufragen. So wie ich dich verstehe würde ich ein MC mit dem eingebetteten video erstellen und dann dort auf dem letzten frame ein dispatch() setzen. Spricht etwas gegen CuePoints bzw. was haltet ihr für sinnvoller? Wichtig ist, das ganze gibt eine air-app ohne streaming, also lokales abspielen. Performance ist eher ein Thema weil das Ding auch auf etwas älteren schulrechnern vernünftig laufen soll. @hgseib vielen dank, ich glaube ich habe das meiste kapiert, du scheinst auch einem strikten MVC Prinzip zu folgen. Das versuche ich auch weitestgehend :-) ich denke aber dass für meine Projektgrösse der aufwand alles im code zu generieren und zu organisieren sehr aufwändig wird. In flash könnte ich diese ja einfach in einen mc organisieren und positionieren. @Martin thx, das wusste ich bereits. So werden dann aber die mcs in flash gemacht, und nicht per as generiert? Richtig? Ich kann einfach Den mc durch sie klasse steuern, aber kann ich auch mehrere mcs in derselben klasse steuern/verknüpfen? Danke und Gruss Hagi |
| | |
| | #6 (permalink) | |||||
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ja, wenn Du diese als Basisiklasse angibst.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! | |||||
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Dec 2011
Beiträge: 9
|
na ok. vielen dank. ich hab mal versucht das als prototyp aufzubauen (main timeline hab ich noch nicht aufgeräumt). Nun ich hab ein paar klassen und ne docclass. hab jetzt begonnen die LitIntroMovie Klasse zu bauen damit das Video ausgegebn wird. Aber da tut sich überhaupt nichts, auch keine Fehlermeldungen. o.O Hab das ganze Zeug mal online gestellt, kann mir jemand nen Tipp geben? Ich definiere in der Movie-Klasse alles und versuche es in der DocClass zu platzieren und abzuspielen. Das wär schon so richtig oder?! http://www.aqualax.ch/litteringbox.zip Thx und Grüsse Hagi |
| | |
| | #8 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Die ZIP scheint kaputt zu sein...
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Dec 2011
Beiträge: 9
|
Für alle Leser die sich mit ähnlichen Anfängerfragen beschäftigen wie ich: Hier ein sehr gutes Tutorial dazu welches schön erklärt, weshalb die Hauptzeitleiste nicht für Programmablauf benutzt werden soll: MovieClips as screens - Creating an Intro screen | The Flash Connection |
| | |
| | #11 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Ich hab's mir gerade mal angesehen und mehrere Fehler gefunden:
Generell würde ich Dir empfehlen Sprites statt MovieClips zu verwenden. MovieClips benötigt man wirklich nur dann, wenn sie auch Zeitleistenanimationen enthalten. Außerdem sind sie dynamisch und verhindern so sinnvolle Fehlermeldungen.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #12 (permalink) |
| Neuer User Registriert seit: Dec 2011
Beiträge: 9
|
Vielen Dank! Ich habe die Zeilen jetzt angepasst, aber leider erscheint (diesmal wirklich ohne Fehlermeldung) gar nichts auf der Bühne. Muss ich addChild in der Dokumentklasse ausgeben oder in der LitIntroMovie-Klasse? Und wie kann ich das gescheit debuggen, wenn ich es nicht schaffe das Teil erstmal auszugeben? :-) Meine Klassen sehen jetzt so aus: Code: // LitIntroMovie.as
///////////////////
package {
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Video;
public class LitIntroMovie extends Sprite {
var connection:NetConnection;
var stream:NetStream;
var video:Video;
var src:String;
public function LitIntroMovie() {
this.src = "./content/tests/hancock.flv";
//src = "./content/tests/GOPR0057.MP4";
trace("LitIntroMovie initialized");
connection = new NetConnection();
connection.connect(null); // no streaming server used
stream = new NetStream(connection);
stream.client = this;
stream.bufferTime = 1;
stream.receiveAudio(true);
stream.receiveVideo(true);
stream.client={onMetaData:function(obj:Object):void{}}
video = new Video(440, 330);
video.attachNetStream(stream);
stream.play(src);
addChild(video);
}
}
}
// LitteringBox.as
//////////////
package {
// include base libraries
import flash.desktop.NativeApplication;
import flash.display.MovieClip;
import flash.display.NativeWindow;
import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindowType;
import flash.display.NativeWindowDisplayState;
import flash.display.NativeWindowSystemChrome;
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.StageDisplayState;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.events.Event;
import flash.events.MouseEvent;
// include LitteringBox libraries
import LitButton;
import LitFrame;
import LitTutorialMovie;
import LitIntroMovie;
// import flv encoder
// import lib.FlvEncoder
// debug classes
//import debug.showDisplayList;
public class LitteringBox extends MovieClip {
// constructor
public function LitteringBox():void {
// stop on frame 1
stop();
// initialize main window controls
initWindowControls();
// show debug console
//var show_me:showDisplayList = new showDisplayList(this);
// create intro-movie and place on stage
var intromovie:LitIntroMovie = new LitIntroMovie();
//intromovie.x = 300;
//intromovie.y = 300;
//addChild(intromovie);
//trace(intromovie.src);
//intromovie.stream.play("./content/tests/hancock.flv");
}
// initialize main controls
public function initWindowControls():void {
close_btn.addEventListener(MouseEvent.CLICK, closeWindow);
minimize_btn.addEventListener(MouseEvent.CLICK, minimizeWindow);
fullscreen_btn.addEventListener(MouseEvent.CLICK, goFullscreenMode);
max_btn.addEventListener(MouseEvent.MOUSE_DOWN, maximizeWindow);
//move window when dragging bg
//bg_mc.addEventListener(MouseEvent.MOUSE_DOWN, moveWindow);
}
// close window
public function closeWindow(evt:Event):void {
stage.nativeWindow.close();
}
// minimize window
public function minimizeWindow(evt:Event):void {
stage.nativeWindow.minimize();
}
// maximize window
public function maximizeWindow(e:Event):void {
if(stage.nativeWindow.displayState != NativeWindowDisplayState.MAXIMIZED) {
stage.nativeWindow.maximize();
max_btn.gotoAndPlay(2);
}
else {
stage.nativeWindow.restore();
max_btn.gotoAndPlay(1);
}
}
// move window
public function moveWindow(e:Event):void {
stage.nativeWindow.startMove();
}
// fullscreen mode
public function goFullscreenMode(e:MouseEvent):void {
if( stage.displayState == StageDisplayState.NORMAL ) {
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
//fullscreenButton.label = "Exit Fullscreen";
} else {
stage.displayState = StageDisplayState.NORMAL;
//fullscreenButton.label = "Go Fullscreen";
}
}
}
} |
| | |
| | #13 (permalink) | ||
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Zitat:
Zitat:
ActionScript:
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (28-01-2012 um 13:01 Uhr) | ||
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| document class - 2 stück importieren | canon | ActionScript 3 | 15 | 02-02-2011 15:57 |
| preloader hakt sich irgendwie mit document class | Meai1 | ActionScript 3 | 7 | 10-08-2009 09:37 |
| document class wird einfach nicht geladen?! | der Dan | ActionScript 3 | 2 | 21-05-2008 02:11 |
| ApplicationDomain und eine Document Class | Deluxe | ActionScript 3 | 1 | 11-09-2007 16:42 |
| document class | Elfriederich | ActionScript 3 | 5 | 14-08-2006 08:53 |