Volledige versie bekijken : as class beginners probleempje
laris
%Europe/Berlin %550 %2006, 13:13
Voor het toevoegen van een movieclip op een bepaalde x en y coordinaat heb ik volgende classe geschreven
class hotspot{
private var owner:MovieClip
function hotspot(madeBy,xpos,ypos){
owner = madeBy
owner.attachMovie("hotspot_id","hotspot",0)
owner.hotspot._x = xpos
owner.hotspot._y = ypos
}
}
op de eerste frame van men stage staat volgende code
heteplek1 = new hotspot(this,100,100);
heteplek2 = new hotspot(this,300,300);
Het probleem is dat alleen heteplek1 wordt aangemaakt, hoe los ik dit op?
Jordy
%Europe/Berlin %557 %2006, 13:22
Ze hebben allebei de zelfde depth :)
maak er dit van:
class hotspot{
private var depth:Number = 0;
private var owner:MovieClip
function hotspot(madeBy,xpos,ypos){
++depth;
owner = madeBy
owner.attachMovie("hotspot_id","hotspot",depth)
owner.hotspot._x = xpos
owner.hotspot._y = ypos
}
}
laris
%Europe/Berlin %560 %2006, 13:27
nog steeds zelfde probleem, het zijn maar kleine movieclipjes en ze staan niet over elkaar, dus dezelfde depth is toch geen probleem?
laris
%Europe/Berlin %563 %2006, 13:31
Kan het dat ik een class maar 1 keer aan een swf kan toekennen ofzo?
ik zou gewoon via actionscript (en liefst via een klasse) movieclips op verschillende (niet random) plaatsen willen toevoegen. En daarna per movieclip een onRelease kunnen opvangen.
Jordy
%Europe/Berlin %563 %2006, 13:31
elke depth kan maar 1 mc of button bevatten :)
ik zal even verder zoeken naar je script voor de oplossing :)
laris
%Europe/Berlin %567 %2006, 13:37
elke depth kan maar 1 mc of button bevatten :)
Klopt idd ;) , net getest, dan zit ik met een ander probleem :S
matzo
%Europe/Berlin %570 %2006, 13:42
ze hebben ook dezelfde instancenaam, en ik denk dat daar het probleem ligt
class hotspot{
private var depth:Number = 0;
private var owner:MovieClip
function hotspot(madeBy,xpos,ypos){
++depth;
owner = madeBy
owner.attachMovie("hotspot_id","hotspot"+depth,depth)
owner.hotspot._x = xpos
owner.hotspot._y = ypos
return owner.hotspot;
}
}
}
maar met je code nu maak je volgens mij steeds opnieuw een instance van de class en een nieuwe movie, ik denk dat dit qua code beter is
class hotspot{
private var depth:Number = 0;
private var owner:MovieClip
function hotspot(){//constructor, je maakt dus slechts een instance van de class
}
function makeHotSpot(madeBy:MovieClip, xpos:Number, ypos:Number){/*je maakt een
nieuwe hotspot, en niet ook nog eens een nieuwe instance van de class.*/
++depth;
owner = madeBy
owner.attachMovie("hotspot_id","hotspot"+depth,depth)
owner.hotspot._x = xpos
owner.hotspot._y = ypos
return owner.hotspot;/*je returned de movieclip, zodat je bij hs= hotspot.makeHotspot; de movieclip._x kunt aanspreken als 'hs._x'*/
}
}
Jordy
%Europe/Berlin %572 %2006, 13:44
ja idd matzo
laris
%Europe/Berlin %575 %2006, 13:48
Misschien geef ik ze best een diepte mee
AS class ziet er nu als volgt uit
class hotspot {
private var owner:MovieClip;
function hotspot(madeBy, depth,xpos, ypos) {
owner = madeBy;
owner.attachMovie("hotspot_id", "hotspot"+depth+"_mc", depth);
owner.hotspot._x = xpos;
owner.hotspot._y = ypos;
}
}
Maar hoe spreek ik nu de ._x en de ._y aan?
matzo
%Europe/Berlin %577 %2006, 13:52
zie de edit van mijn post. Je returned de movieclip dus als je in je hoofdmovie dit doet
var _hotspot = new hotspot();
hotspot1 =_hotspot(this, 100, 100);
hotspot2 =_hotspot(this, 300, 300);
je deze _x in de hoofdmovie kunt aanspreken door
hotspot2._x;/*en de ._y door */
hotspot2._y;/*idem voor hotspot1*/
laris
%Europe/Berlin %578 %2006, 13:53
Hoe maak je dan op ja stage een hotspot aan precies (sorry, ben nog maar net bezig met classes)
En de ._x en ._y worden nu toch niet aangeroepen aangezien die movieclips nu
hotspot0, hotspot1 enz verder heten?
EDIT: een hotspot aanmaken is nu gelukt met
heteplek = new hotspot()
heteplek.makeHotSpot(this,100,100)
Maar de positie blijft nog steeds 0,0
EDIT2: K, heb je edit hierboven gelezen, denk dat het nu wel zal lukken, effe proberen
matzo
%Europe/Berlin %584 %2006, 14:02
Je hebt natuurlijk gelijk. Maak er dit van:
class hotspot{
private var depth:Number = 0;
private var owner:MovieClip
function hotspot(){//constructor, je maakt dus slechts een instance van de class
}
function makeHotSpot(madeBy:MovieClip, xpos:Number, ypos:Number){/*je maakt een
nieuwe hotspot, en niet ook nog eens een nieuwe instance van de class.*/
++depth;
owner = madeBy
var tijdelijk:MovieClip = owner.attachMovie("hotspot_id","t"+depth,depth)/*even 't+depth als naam gegeven, omdat je anders mogelijkerwijs met 2 'madeBy.hotspot1; komt te zitten. de kans dat je een rootvariable 't' noemt is klein*/
tijdelijk._x = xpos
tijdelijk._y = ypos
return tijdelijk;/*je returned de movieclip, zodat je bij hs= hotspot.makeHotspot; de movieclip._x kunt aanspreken als 'hs._x'*/
}
}
laris
%Europe/Berlin %589 %2006, 14:08
Mooi, mooi het werkt :P
Kunnen julie nog even controleren of dit netjes actionscript is :#
class hotspot {
private var depth:Number = 0;
private var owner:MovieClip;
function hotspot() {
//constructor, je maakt dus slechts een instance van de class
}
function makeHotSpot(madeBy:MovieClip, xpos:Number, ypos:Number) {
/*je maakt een
nieuwe hotspot, en niet ook nog eens een nieuwe instance van de class.*/
++depth;
owner = madeBy;
var tijdelijk:MovieClip = owner.attachMovie("hotspot_id", "t"+depth, depth);
/*even 't+depth als naam gegeven, omdat je anders mogelijkerwijs met 2 'madeBy.hotspot1; komt te zitten. de kans dat je een rootvariable 't' noemt is klein*/
tijdelijk._x = xpos;
tijdelijk._y = ypos;
return tijdelijk;
/*je returned de movieclip, zodat je bij hs= hotspot.makeHotspot; de movieclip._x kunt aanspreken als 'hs._x'*/
}
}
var hotspot = new hotspot();
hotspot1 =hotspot.makeHotSpot(this, 100, 100);
hotspot2 =hotspot.makeHotSpot(this, 300, 300);
Alvast bedankt!
(allebei reputatie++)
Jordy
%Europe/Berlin %595 %2006, 14:17
class hotspot {
private var depth:Number = 0;
private var owner:MovieClip;
private var tijdelijk:MovieClip;
function hotspot() {
//constructor, je maakt dus slechts een instance van de class
}
function makeHotSpot(madeBy:MovieClip, xpos:Number, ypos:Number) {
/*je maakt een
nieuwe hotspot, en niet ook nog eens een nieuwe instance van de class.*/
++depth;
owner = madeBy;
tijdelijk = owner.attachMovie("hotspot_id", "t"+depth, depth);
/*even 't+depth als naam gegeven, omdat je anders mogelijkerwijs met 2 'madeBy.hotspot1; komt te zitten. de kans dat je een rootvariable 't' noemt is klein*/
tijdelijk._x = xpos;
tijdelijk._y = ypos;
return tijdelijk;
/*je returned de movieclip, zodat je bij hs= hotspot.makeHotspot; de movieclip._x kunt aanspreken als 'hs._x'*/
}
}
het is netter om al je variabele al vooraf te defineren ipv in de constructor :)
matzo
%Europe/Berlin %603 %2006, 14:29
Buiten wat Jordy heeft gezegd,(wat overigens mijn fout is :# , of ik heb het in ieder geval ook zo gedaan)zie ik enkel in mijn ogen nette AS. En ook even over die fout, ik heb eigenlijk de var pas in de functie gedefinieerd omdat de var zoals de naam zegt tijdelijk is. Ik dacht van:'als ik de var hier definieer dan verwijdert AS de var na het doorlopen van de functie.' Maar miss. is het inderdaad beter hem toch buiten de functie te definieren, omdat anders AS ook wel steeds de var moet aanmaken.
laris
%Europe/Berlin %607 %2006, 14:35
@ Matzo
Ik vind het trouwens wel sjiek dat je als 14 jarige al aardig met actionscript kan werken :)
Jordy
%Europe/Berlin %614 %2006, 14:44
Wat vind je dan van fatty owl (http://www.flashfocus.nl/forum/member.php?u=3982) ;)
matzo
%Europe/Berlin %634 %2006, 15:13
Ja idd. als je dit al sjiek vind zou je zeker fatty owl eens moeten zien. Een jaar jonger, in 2005 begonnen, dus op z'n minst een half jaar later dan ik, en nu al(het mag gezegd worden)vreselijk goed.
Ik heb ook het gevoel dat FO meer wiskunde kent dan ik hoewel hij een jaar lager zit. Dus ik ga me effe liggen schamen. ;)
Nee grapje, hij kent er volgens mij ook gewoon meer van maar dat is nou niet direct iets waarvoor je je zou moeten schamen, hij is gewoon goed.
Dauntless
%Europe/Berlin %648 %2006, 15:34
Houdt het on topic hé mensen ;).
(Btw, FO's moeder is wiskunde leerkracht... :p)
het is netter om al je variabele al vooraf te defineren ipv in de constructor:)
Dat geldt wel alleen wanneer je de variabele in meerdere methodes van je classe nodig hebt. Als je een tijdelijke variabele gebruikt is het zeker niet duidelijker om hem aan het begin van je classe te declareren. Ik heb het niet helemaal gevolgd, maar aan het begin van je classe een variabele met de naam 'tijdelijk' declareren, is meestal niet gezond ;).
Daarnaast nog een paar tips:
Laat je classes beginnen met een Hoofdletter. Dat is een 'best practice' en wordt bv ook door MacroMedia (adobe :( :p) zelf gebruikt. Bv Array, MovieClip, LoadVars, XMLSocket, etc :).
Gebruik public en private bij het declareren van je methods.
Gebruik return types (bv bij makeHotSpot is he :MovieClip)
//constructor, je maakt dus slechts een instance van de class
Beetje vreemde commentaar zin... ?
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.