Volledige versie bekijken : var declareren of niet?
W0utR
%Europe/Berlin %588 %2008, 15:07
Ik was wat bezig met het uittesten van classes toen ik iets raar (of misschien niet) opmerkte.
Ik heb de volgende classe geschereven:
package {
import flash.display.MovieClip;
public class Test extends MovieClip {
public var rofl:Number = 10;
public function Test() {
increase(50);
}
public function increase(howMany) {
rofl += howMany;
trace(rofl);
}
}
}
Maar hoe komt het nu dat ik de variabele "howMany" niet hoef te declareren?
nrocco
%Europe/Berlin %607 %2008, 15:35
volgens mij worden variabelen die je tussen ( en ) van je functie declaratie zet automatisch gedeclareerd. Je hoeft (eigenlijk MOET je) ze alleen wel een type mee geven, in dit geval :Number.
public function increase(howMany:Number) {
rofl += howMany;
trace(rofl);
}
W0utR
%Europe/Berlin %612 %2008, 15:42
bedankt voor de info.
Ik heb nog een klein vraagje, stel ik wil vanaf de tijdlijn die functie aanroepen (niet dat het veel nut heeft, maar gewoon om te testen)
kan ik dan gewoon zoiets doen:
var blabla:Number = 10;
blabla.increase(10);
public function increase(howMany:Number) {
this += howMany;
trace(rofl);
}
nrocco
%Europe/Berlin %617 %2008, 15:49
Je hebt een class gemaakt die 1 functionaliteit bevat.
Om hier gebruik van te maken moet je een instantie maken van de door jou gemaakte class.
Dat doe je zo, in jou geval in de timeline:
import Test;
var instanceVanTest:Test = new Test();op het moment dat je deze code uitvoert is de rofl variabele welke in de instanceVanTest zit al 60. Op het moment dat je namelijk new Test() doet wordt er een instance gemaakt van de class (welke jij hebt geschreven) en de constructor daarvan aangeroepen. en aangezien je in de constructor de functie increase() aanroept... 60, dus ;)
nu kan je zeggen:
instanceVanTest.increase(20); // nu is je rofl var in de instance van je class 80
trace(instanceVanTest.rofl);
er omslachtig uit maar dat komt omdat je Class niet goed is opgezet, maar dat maakt niet uit... het is je eerste class en het gaat om het idee, right :)
ik ga er overigens vanuit dat de Class die je hebt gemaakt in je eerste post in een externe file staat genaamd Test.as (let op hoofdletter)
en dat deze file in dezelfde map staat als je .fla
W0utR
%Europe/Berlin %623 %2008, 15:57
Aha, nu begin ik het te snappen.
Ik moest ook blijkbaar bij Document Class die class wegdoen anders kreeg ik een error.
En als ik dan nu een variabele van de timelime will optellen moet ik eigenlijk gewoon zo doen:
public function increase(howMany:Number, timelineVar:Number) {
edit:
zo dus
public function increase(howMany:Number, wat:Number) {
rofl = (wat + howMany);
trace(rofl);
return rofl;
}
nrocco
%Europe/Berlin %628 %2008, 16:05
dus die variable vanuit je timeline moet ook opgeteld worden op de rofl var? bedoel je dat?
Zo ja,
dan wordt je functie in je class:
public function increase(howMany:Number, timeLineVar:Number) {
rofl += howMany + timeLineVar;
trace(rofl);
} werk dat?
W0utR
%Europe/Berlin %630 %2008, 16:07
Jep, dat werkt perfect.
Bedankt voor de hulp.
Dit was bij deze dus mijn eerst werkende classe
package {
public class Test {
public var rofl:Number = 10;
public function increase(howMany:Number, wat:Number) {
rofl += wat + howMany;
trace(rofl);
return rofl;
}
}
}
er omslachtig uit maar dat komt omdat je Class niet goed is opgezet, maar dat maakt niet uit... het is je eerste class en het gaat om het idee, right
wat bedoelde je hiermee? Ben ik nog fout bezig of zit het nu goed?
Mr. Black
%Europe/Berlin %645 %2008, 16:30
Ben ik nog fout bezig of zit het nu goed?
Nu (bijna) goed, maar het nut van de class is er nog niet echt. 'Maar het is om te oefenen!' - dan kan je toch ook iets nuttigers maken? :)
Geef altijd alle functies (behalve de constructor) een return type mee. Als een functie niets returnt dan kies je void.
package
{
public class Test
{
public var rofl:Number;
public function Test()
{
rofl = 10;
}
public function increase( howMany:Number, wat:Number ):Number
{
rofl += wat + howMany;
trace(rofl);
return rofl;
}
}
}
Verder is het netter om variabelen te declareren buiten de constructor, maar waardes te geven ín de constructor.
Succes nog. :)
nrocco
%Europe/Berlin %647 %2008, 16:33
wat bedoelde je hiermee? Ben ik nog fout bezig of zit het nu goed?
We hebben het over twee verschillende dingen:
# als we het hebben over de syntax in AS3, een Class opzetten en deze werkend implementeren...: dan ben je goed bezig.
# als we het hebben over de vraag: zou je voor deze functionaliteit een class bouwen? dan zou ik zeggen; nee.
Maar aangezien je dit topic startte met de vraag omtrent punt 1... ;)
W0utR
%Europe/Berlin %667 %2008, 17:00
het was gewoon om voor de eerste keer een class werkend te krijgen, en ik had niet direct een idee voor iets speciaal.
Bedankt voor alle hulp
Maar ff over het nut van zo'n classe, stel ik maak via AS verschillende vormen aan voor de muis, waarvan ik weet dat ik ze in elk van mijn project ga gebruiken.
Daarvoor kan ik dan een bepaalde classe schrijven?
Maar als ik code maar in 1 project ga gebruiken heeft het geen nut om daarvoor een classe te schrijven?
Mr. Black
%Europe/Berlin %714 %2008, 18:08
Maar als ik code maar in 1 project ga gebruiken heeft het geen nut om daarvoor een classe te schrijven?
Het heeft zeker wel nut. Als jij alles op de MainTimeLine gaat gooien (qua script) word je er zelf niet meer wijs uit na een tijdje. Te veel zoeken.
Als je echter alles in classes verdeelt is het een stuk overzichtelijker en makkelijker! Je hoeft bepaalde dingen niet meerdere keren te schrijven en alles is terug te vinden. Dit is vooral handig met debuggen. Met één script moet je nog zoeken waar de oorzaak ligt - met meerdere classes is dit veel en veel simpeler. :)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.