PDA

Volledige versie bekijken : Structuur in een flash-app?


meagain
%Europe/Berlin %341 %2005, 08:12
Ben nu een tijdje bezig met flash, maar het is me nog helemaal niet duidelijk hoe je een flash-app gestructureerd opbouwt?!

In Delphi kan je werken met forms en units. Je kan aangeven welke unit andere units gebruikt ('uses'), etc... In Flash ben ik er nog niet achter hoe je een app overzichtelijk kan opbouwen.

Alle tips zijn welkom!!

Mvg,

Dauntless
%Europe/Berlin %414 %2005, 09:57
Wat kleine tips:

Geef duidelijke namen aan de movieclips in je library
Zet géén code OP buttons en movieclips, maar altijd op frames
Probeer zoveel mogelijk code op de hoofdtijdlijn te zetten
Geef duidelijke layer namen
't Is ook handig als je bv een layer met 'input textfields', 'dynamic textfields', 'buttons' en 'graphics' hebt. Als je dan 1 bepaald iets nodig hebt kan je gemakkelijk de andere layers verbergen.
Leer met AS 2.0 werken, aangezien die versie van AS véél gestructureerder is dan AS 1.0.
(Als je AS 2.0 leert ga je ook automatisch gestructureerder met AS 1.0 leren werken)

meagain
%Europe/Berlin %806 %2005, 19:21
@Dauntless

Al je tips pas ik reeds toe, maar ik heb niet de indruk dat ik overzichtelijk en/of gestructureerd werk. Wat als je meerdere screens, of laat het ons forms noemen, gebruikt? Elk screen wordt apart ontwikkeld/geschreven, maar hoe pas je dan achteraf het geheel naadloos in mekaar?

Roenes
%Europe/Berlin %823 %2005, 19:45
Volgens mij werk je het gestructureerds door met classes te werken. Hierdoor plaats je code die afhankelijk van elkaar is bij elkaar en vormt ieder stukje een eigen geheel. Op deze manier kun je ook zorgen dat er zo min mogelijk code in je fla staat.

In je fla maak je een aantal keyframes aan die ver uit elkaar liggen (bv om de 20 frames). Deze frames geef je een label en je plaatst er een stop. Bij ieder keyframe kun je een screen gaan ontwerpen. Je gebruikt uiteraard weer meerdere layers om dingen op te plaatsen. Ook maak je een aparte layer aan waarop je je scripts plaatst (keyframes komen overeen met de keyframes van je labels). Op die keyframes plaats je de noodzakelijke code die classes aanmaakt en methodes aanroept. Ook plaats je daar button callbacks als je die niet in je classes hebt zitten.

Je kunt tussen de frames op en neer springen met een simpele gotoAndStop("framelabel"); Zo kun je dus meerdere screens aanroepen terwijl je code gestructureerd bij elkaar staat en je fla er ook gestructureerd uit ziet.

Werken met scenes kan ook, mits je amper code gebruikt. Want code en scenes gaan niet goed samen. Gebruik je puur code om tussen je keyframes op en neer te springen, dan kun je evt overwegen om scenes te gebruiken. Toch raad ik de bovenstaande werkwijze aan ipv het werken met scenes. :)

BlijBlauw
%Europe/Berlin %826 %2005, 19:50
wat ik het duidelijkste vind, is voor wat jij forms noemt, gewoon apparte swf's te maken. Bij een site bouw je dus zeg maar elke pagina in een nieuw bestand. Je maakt van je index dan gewoon een verzamelpunt van al die pagina's door ze (als ze nodig zijn) op te roepen met loadMovie();

Roenes
%Europe/Berlin %827 %2005, 19:52
das idd ook nog een goede optie. Ligt een beetje aan je situatie of je alles in 1 bestand houd of steeds aparte swf's maakt :)

Folkert
%Europe/Berlin %550 %2005, 13:13
je kan gebruik maken van zogeheten design paterns om zelf structuur te geven aan je applicatie, je kan ook bestaande frameworks gebruiken die al voorzien zijn van structuur.
Bijvoorbeeld ARP (http://osflash.org/arp) waarin je ook werkt met de forms (of swfs of movieclips of whatever je wilt) in arp heb je 1 hoofdview meestal 'application' die op zijn beurt een controller erbij pakt, alle overige forms zijn child forms van application of childForms van 1 van de childForms.
In ieder geval kan het je de structuur bieden die je zoekt.

meagain
%Europe/Berlin %843 %2005, 20:14
Ga me wat verder verdiepen in ARP. Ook op www.flashextensions.com staan wat leerrijke videos.

Bedankt!!

meagain
%Europe/Berlin %828 %2005, 19:53
@Folkert

Ben bezig met ARP. Lukt vrij aardig, en ja, je had gelijk: Dit systeem dwingt je om vrij planmatig en gedisciplineerd te werk te gaan.

Zit effe vast: Een form stuurt een zoek-opdracht aan. Lukt deze opdracht, dan moet het result in een andere form worden weergegeven, zoniet wordt er een fout gegenereerd (en in de viewRef weergegeven).
Hoe moet dat nu: Waar kan de form die het resultaat moet weergeven dit result gaan 'ophalen', of hoe stuur ik dat mee ??

Met dank.

Folkert
%Europe/Berlin %506 %2005, 12:09
zet de ene form (de zoek) en de andere form (de weergave) in 1 clip (bv de childScreen) Je kan dan de childScreen de zoek event laten dispatchen en bij de callBack ofwel terug naar zoek sturen ofwel naar de weergave. de viewref word dan je childScreen en de childScreen heeft dan de listeners die de events opvangen vanuit de childScreen .zoekScreen Simpel voorbeeld (zonder testen neer gekalkt dus enkel ter voorbeeld)
import org.osflash.arp.ArpForm;
import mx.utils.Delegate;
class nl.rebels.flashbrain.view.childScreen extends ArpForm
{
//onStage
private var zoekScreen:ZoekScreen;
private var outputScreen:OutputScreen;

function childScreen() {}

//de callback vanuit de command
public function zoekResults( evtObj )
{
if(watJeWiltWaarIs)
{
zoekScreen.doeWatMoetGebeuren( evtObj );
}
else
{
outputScreen.watJeWilt ( evtObj );
}
}
//de 'port' method die de event vanuit hier dispatched
// waardoor je 'viewRef' deze class word en niet de zoekScreen
public function zoekRequest()
{
dispatchEvent({ type:"zoek" });
}
private function onLoad()
{
zoekScreen.addEventListener("zoek", Delegate.create(this, zoekRequest));
}
}

Pimm
%Europe/Berlin %517 %2005, 12:25
Ik vind dat het overzichtelijkste werkt als je alle AS op één frame zet, en voor zo veel mogelijk handelingen een function opbouwt. Maar goed, ik denk dat designers dit anders zien.

meagain
%Europe/Berlin %571 %2005, 13:42
//In FindRecordsCommand.as

public function onResultOperation (resultObj:ResultEvent):Void
{
viewRef.found(resultObj);
}

//In searchForm.as

function found( tResult ):Void
{
dispatchEvent( {type: "resultsFormSelect", tData: tResult})
}

//In Application.as

function resultsFormSelect( tResult )
{
resultsForm.show();
searchForm.hide();
resultsForm.populateGrid( tResult );
}

@Folkert

Weet niet of dit een aanvaardbare werkwijze is?

dispatchEvent( {type: "resultsFormSelect", tData: tResult})

Ik stuur dus het resultaat mee via de dispatchEvent.

Folkert, heb jij Skype ??

Met dank!