PDA

Volledige versie bekijken : Movieclip veranderen op klik en score toevoegen


wigchert
%Europe/Berlin %568 %2009, 14:38
hey ben ik weer ;)

Ik ben nu al een stuk verder in de voortgang van mijn spel met dank aan de tijdbalk die ik dankzij flashfocus werkend heb gekregen.

maar nu zit ik met 2 nieuwe dingen waar ik niet uit kom :S

zal het nog een keer uitleggen waarvoor het is, wij moeten een spel aan de hand van AS3 maken voor een ziekenhuis, als "serious game" (spel om mensen iets te leren)

in ons spel zijn er een paar kamers waar je in kan en in die kamers liggen voorwerpen (allemaal verschillende movieclips) die je kan "besmetten" door ze vast te pakken.

http://img17.imageshack.us/img17/2825/bedoeling.jpg

hier ze je de winkel, in het rek zie je een paar voorwerpen die clickable zijn

het gaat om die voorwerpen. Wat we nodig hebben is dat als je ze aanklikt, worden de voorwerpen anders (met groene vlekken besmeurd als het waren) en dat moet voor de rest van het spel zo blijven en ook niet meer aanklikbaar. kan dat dmv de movieclip veranderen in een andere?

daarnaast moet als je op een bepaald voorwerp heb geklikt en het "besmet" wordt, de score omhoog gaan (te zien in de balk recht boven in de screenshot van eerder). De bedoeling hiermee is dat als je erop klikt de score omhoog gaat met 5 tot 20 (verschilt per voorwerp) en dat die word afgebeeld op de balk recht boven (kan visueel veranderen naar hetzelfde als de tijdbalk als dat makkelijker is, dus hoeft niet persee met de blokjes). het lijkt me logisch dat de volle balk het maximaal aantal "slachtoffers" is en dat is 120.

het zou ook mooi zijn dat de score word aangegeven op het einde van het spel. bijvoorbeeld:
"Aantal slachoffers: 180"

ik heb al op google en op deze forum gezocht enzo maar niet in geslaagd iets te vinden wat hier op lijkt of kan helpen.

ik weet dat ik veel vraag maar niet te veel hoop ik :S ik kijk uit naar een antwoord!

WickedMind
%Europe/Berlin %698 %2009, 17:45
movieClip.score = 10;
movieClip.addEventListener(MouseEvent.CLICK, besmetObject);

function besmetObject(e:MouseEvent):void
{
e.currentTarget.removeEventListener(MouseEvent.CLI CK, besmetObject);
totaleScore += e.currentTarget.score;
}



Is een basis waarmee je aan de slag kan.

wigchert
%Europe/Berlin %967 %2009, 00:12
thx, ik ga kijken of ik er wat mee kan en of ik er uit kom :P het is allemaal nieuw voor me.

*edit* hmm ik snap het 2e deel van die code niet helemaal:

e.currentTarget.removeEventListener(MouseEvent.CLI CK, besmetObject);
totaleScore += e.currentTarget.score;

WickedMind
%Europe/Berlin %342 %2009, 09:12
Door de bovenste regel zorg je dat er niet nog een keer op dat object geklikt wordt.
Door de onderste regel tel je bij een variabele 'totaleScore' de score op van het object waar je op geklikt hebt.

wigchert
%Europe/Berlin %417 %2009, 11:01
thx, de bovenste regel kom ik wel uit maar de onderste geeft een error (logisch denk ik) want ik weet niet wat ik met die "TotaleScore" aan moet (daar geeft hij een error)

1120: Access of undefined property totaleScore.

en hoe kan ik er voor zorgen dat hij niet alleen onklikbaar word maar ook van uiterlijk veranderd (misschien aan de hand van een nieuwe movieclip?)

WickedMind
%Europe/Berlin %435 %2009, 11:27
Maak ergens een variabele totaleScore aan.
var totaleScore:Number = 0;

Je maakt meerdere frames in je movieclip waar je op klikt.
Frame 1 (met stop actie) is je normale status.
Frame 2 is als je er op geklikt hebt.
In je besmetObject - functie zet je dan dit erbij:

gotoAndStop(2);

wigchert
%Europe/Berlin %532 %2009, 13:46
het lijkt nu te werken maar ik krijg het nu niet voor elkaar om de huidige score te laten zien in een balk (word groter naarmate de score stijgt), ik ben wel een beetje met de code voor een timer balk die ik al heb aan het rotzooien geweest maar zonder succes :S

WickedMind
%Europe/Berlin %572 %2009, 14:43
Maak een movieclip die de hele score balk vult en noem deze 'scoreBalk' en zorg dat je registratiepunt links staat.

Maak een variabele aan 'maxScore' die je maximale score aangeeft (dus alle scores van alle objecten bij elkaar op geteld).

je functie besmetObject ziet er dan zo uit:

function besmetObject(e:MouseEvent):void
{
e.currentTarget.removeEventListener(MouseEvent.CLI CK, besmetObject);
totaleScore += e.currentTarget.score;
scoreBalk.scaleX = totaleScore/maxScore;
e.currentTarget.gotoAndStop(2);
}

wigchert
%Europe/Berlin %690 %2009, 17:34
hmm ik heb de afgelopen dagen wat dingen geprobeerd om dit werkend te krijgen maar nig steeds niet gelukt :S ik denkd at het komt omdat ik de codes op de verkeerde plekken heb gezet, de balk op een appart layer staan en de code ook weer op een appart layer speciaal alleen voor de code en die is alleen de eerste frame van heel het gebeuren (zo heb ik het ook met de timer).

volgens mij mist er ook een deel van de code want waar staat het eigenlijk dat hij bij 0 width begint en eindigt bij de maximalen width?