PDA

Volledige versie bekijken : EventHandler op meerdere objecten


darkunreal
%Europe/Berlin %443 %2008, 11:39
Ben bezig met een weergave van een aantal personen in flash. Er zit een for loop in, die op dit moment 60 bolletjes tekent met daarin een mask van een bepaald persoon. Nu wil ik alleen dat als je met de muis over zo'n bol gaat, het bolletje groter word.

Ik heb geprobeerd m.b.v. een teller een event mee te geven. Dit werkt niet, omdat dan alleen het laatste object gepakt word.

Heb het internet rondgezocht met woorden als "AS3 Multiple Objects same Handler" hier heb ik alleen niks kunnen vinden.

Ik zal de code even erbij plaatsen


var xpos, ypos;
xpos = 15;
ypos = 15;
var mcholder:MovieClip = new MovieClip();
mcholder.graphics.drawRoundRect(0,0,491,430,0)
addChild(mcholder);
createBollen();
function createBollen():void
{
for (var i=0; i< 60 ; i++)
{

if (xpos>(mcholder.width - 10))
{
ypos=ypos+55;
xpos=15;
}
var mcbolholder:MovieClip = new MovieClip();
addChild(mcbolholder);
mcbolholder.x = xpos;
mcbolholder.y = ypos;
var loader:Loader = new Loader();
var url:URLRequest = new URLRequest("../images/mensen/image1.png");
loader.load(url);
mcbolholder.addChild(loader);
loader.cacheAsBitmap = true;
var masker:MovieClip = new MovieClip;
masker.graphics.beginFill(0xFF0000);
masker.graphics.drawCircle(75,75,75);
masker.graphics.lineStyle(10, 0xFFFFFF);
masker.graphics.endFill();
masker.cacheAsBitmap = true;
mcbolholder.addChild(masker);
loader.mask = masker;
mcbolholder.width = 32;
mcbolholder.height = 32;
mcbolholder.name = "bol"+[i];
getChildByName("bol"+[i]).addEventListener(MouseEvent.MOUSE_OVER, vergroten);
getChildByName("bol"+[i]).addEventListener(MouseEvent.MOUSE_OUT, verkleinen);
xpos = (xpos + mcbolholder.width + 10);
}
}

function vergroten(event:MouseEvent):void
{
this.width = this.height = 120;
}

function verkleinen(event:MouseEvent):void
{
this.width = this.height = 32;

}


In het ergste geval zou je een forloop over je function laten lopen, die elke keer een functie toekent aan een mcbolholder. Maar dat lijkt me behoorlijk cpu intensief..

Zit ik op de goeie weg? of moet ik een andere inslaan?

djoene_01
%Europe/Berlin %447 %2008, 11:43
probeer eens in uw functie vergroten en verkleinen te werken met

event.currentTarget ipv met this

voorbeeld: event.currentTarget.width = event.currentTarget.height = 120;

edit:
misschien moet de parameter .name er ook nog bij. test dit eens even uit

darkunreal
%Europe/Berlin %453 %2008, 11:52
thnx mate :)

heb het aangepast en werkte eigenlijk in 1x.. dit is echt wat ik zocht.. thnx

Dauntless
%Europe/Berlin %464 %2008, 12:09
mcbolholder.name = "bol"+[i];
getChildByName("bol"+[i]).addEventListener(MouseEvent.MOUSE_OVER, vergroten);
getChildByName("bol"+[i]).addEventListener(MouseEvent.MOUSE_OUT, verkleinen);
=>
mcbolholder.name = "bol"+i;
mcbolholder.addEventListener(MouseEvent.MOUSE_OVER , vergroten);
mcbolholder.addEventListener(MouseEvent.MOUSE_OUT, verkleinen);

tilpo
%Europe/Berlin %638 %2008, 16:19
Ik heb anders nog een idee: stop ze allemaal in een parent movieClip. en dan als de muis over die parent gaat dat hij berekent aan de positie van de muis welk bolletje er geselecteerd is, en hij dit dan vergroot. dit werkt echter alleen als ze allemaal in rijen naast elkaar zitten.

Anders kan je met een for loop misschien zoiets doen:

for (var i:int = 0; i < 60; i++) {
if (bol[i].hitTestPoint(mouseX, mouseY)){
bol[i].width = 100
bol[i].height = 100
currentSelection = i
selected = true
}
}
if (selected) {
if (!bol[currentSelection].hitTestPoint(mouseX, mouseY)) {
bol[currentSelection].width = 10
bol[currentSelection].height = 10
selected = false
}
}

zet dit in een ENTER_FRAME event en het zal werken

Ik weet alleen niet of hitTestPoint de ligste oplossing, want daar heb ik (nog) niet veel verstand van.

darkunreal
%Europe/Berlin %652 %2008, 16:39
Nou, om nog even terug te komen.. ik ben nu met xml bezig... (aan de hand van hoeveel vermeldingen er in het xml bestand staan, zoveel bolletjes worden ook gemaakt) alleen ik snap niet goed hoe ik dit moet gebruiken...

In het xml bestand staan dingen zoals ID, Voornaam, Achternaam, etc.. dit laad ik allemaal goed in flash.. maar ik weet niet hoe ik bijvoorbeeld.. als ik op het bolletje klik met id1, dat ook de naam van persoon met het id1 naar voren komt. (moet dynamisch blijven, want het worden wel heel wat mensen).

Alle internet tutors werken net weer anders, of die zijn lastig opgebouwd dat ik daar ook niet uit kom.. ik 'zie' de werking van XML niet goed denk ik

darkunreal
%Europe/Berlin %531 %2008, 13:45
Vandaag even opnieuw begonnnen met de code op te bouwen.. vanuit de FOR Loop waar het xml bestand word uitgelezen, worden nu wat functies gebruikt, die wat variable meenemen.. en nu heb ik de basis in principe af.. maar iig bedankt voor jullie reacties