´Problemen´ met AddChild

Status
Niet open voor verdere reacties.

KeZZaaaa

Gebruiker
Lid geworden
29 jun 2009
Berichten
19
Ik weet niet of het topic op de juiste plaatst staat, aangezien het niets met websites te maken heeft, maar aangezien het wel over Flash gaat, stel ik hier maar mijn vraag.

Als afsluitopdracht op school moeten we een Blackjack-spel maken. Die werkt nu bij mij (weliswaar niet helemaal automatisch), maar ik heb een klein probleem.

Ik heb 2 variabelen aangemaakt om een child toe te voegen (1 voor de speler en 1 voor de bank), maar aangezien ik ook een Reset-functie heb staan die variabelen buiten de functie van de speler en bank zelf, aangezien de Reset-functie ze anders niet herkent. Het probleem nu is dat als ik op de knop klik voor een extra kaart, de vorige child niet blijft staan en je dus steeds maar één kaart in beeld hebt staan. Ik heb het al aan mijn leraar gevraagd, maar die heeft geen flauw idee hoe het op te lossen valt (al moet ik er bij zeggen dat die nou niet bepaald veel verstand heeft van Actionscript 3.0).

Dit is het stuk code waar het om gaat (ik heb de rest even eruit gehaald, aangezien het berekenen van de punten en de score geen invloed hebben op de childs):

Code:
stop();

var willekeurig:Number;
var willekeurigBank:Number;
var mijnKaart:Kaart = new Kaart();
var mijnKaart2:Kaart = new Kaart();

achterkant_mc.addEventListener(MouseEvent.CLICK, spelerKaart);
achterkantbank_mc.addEventListener(MouseEvent.CLICK, bankKaart);
opnieuw_mc.addEventListener(MouseEvent.CLICK, opnieuw);

function spelerKaart(event:MouseEvent):void{
	
		willekeurig = 1+(Math.floor(Math.random()*52)+1);
		
		mijnKaart.gotoAndStop(willekeurig);

		mijnKaart.x = 50+(13*aantalKaartenSpeler1);
		mijnKaart.y = 110;

		addChild (mijnKaart);
		
		score_txt.text = String(scoremin) + "/" + String(scoremax);

}

function bankKaart(event:MouseEvent):void{
	
		willekeurigBank = 1+(Math.floor(Math.random()*52)+1);
			
		mijnKaart2.gotoAndStop(willekeurigBank);

		mijnKaart2.x = 350+(13*aantalKaartenBank);
		mijnKaart2.y = 110;

		addChild (mijnKaart2);
		
		scorebank_txt.text = String(scoreminBank) + "/" + String(scoremaxBank);
		
}


function opnieuw (event:MouseEvent):void{
	
		while(mijnKaart.numChildren>0)
		{
		mijnKaart.removeChildAt(mijnKaart.numChildren-1);
		}
		
		while(mijnKaart2.numChildren>0)
		{
		mijnKaart2.removeChildAt(mijnKaart2.numChildren-1);
		}

}
 
Hoi KeZZaaaa,
Ik ben geen scriptoloog, maar misschien is dit iets als principe:
[JS]var mijnOldKaart = mijnKaart;[/JS]
Met zo'n tussenstapje kan mijnOldKaart blijven staan, en kan je voor mijnKaart een nieuwe bewerking laten uitvoeren.

Met vriendelijke groet,
CSShunter
 
precies.

je maakt maar 1x een kaart aan (bij de initialisatie).
Je zou eigenlijk ín de function steeds een nieuwe kaart moeten maken..

Code:
var willekeurig:Number;
var willekeurigBank:Number;
var mijnKaart:Kaart;
var mijnKaart2:Kaart;

achterkant_mc.addEventListener(MouseEvent.CLICK, spelerKaart);
achterkantbank_mc.addEventListener(MouseEvent.CLICK, bankKaart);
opnieuw_mc.addEventListener(MouseEvent.CLICK, opnieuw);

function spelerKaart(event:MouseEvent):void{
		
		mijnKaart = new Kaart();
	
		willekeurig = 1+(Math.floor(Math.random()*52)+1);
		
		mijnKaart.gotoAndStop(willekeurig);

		mijnKaart.x = 50+(13*aantalKaartenSpeler1);
		mijnKaart.y = 110;

		addChild (mijnKaart);
		
		score_txt.text = String(scoremin) + "/" + String(scoremax);

}

kweet niet of t nu al werkt, misschien moet je m eerst addChild'en voordat je n gotoAndStop kunt doen.
 
Laatst bewerkt:
Met die tussenstap zoals csshunter zegt, krijg ik precies hetzelfde.

Wat d0m0 zegt, werkt helemaal niet. Dan laat ie ze gewoon staan.
 
mijnKaart staat wel goed ingesteld (export voor actionscript - linkage in library) in flash?
 
Ja. Hij plaatst hem ook gewoon zoals het moet. Hij haalt hem alleen niet weg, zodat ik niet nog een potje kan spelen.
 
Ja. Hij plaatst hem ook gewoon zoals het moet. Hij haalt hem alleen niet weg, zodat ik niet nog een potje kan spelen.

ok, je kunt children niet zo weghalen. je moet t bij de parent waar je m hebt geaddchild, de children weghalen, dus niet van mijnkaart...

Het beste kun je bij een nieuw spel een container maken voor je kaarten:
Code:
var container: MovieClip;
....
container = new MovieClip();
container.x = 50;
container.y = 110;
addChild(container);

tijdens het spelen:

Code:
mijnKaart.x = (13*aantalKaartenSpeler1);
mijnKaart.y = 0;

container.addChild(mijnKaart)

en bij opnieuw, container legen met
Code:
while (container.numChildren > 0)
{
container.removeChildAt (0);
}

let op: de x en y waarden worden nu relatief van containers x/y waarden! je plaatst ze dus ín een movieclip...
 
Nu werkt hij wel :) Dank je!

Er zit nog een klein foutje in, hij telt als het ware gewoon door. Dus als ik in het eerste potje 2 kaarten heb gelegd, legt hij in het tweede potje de eerste kaart op de derde plek zeg maar. Is dit nog makkelijk op te lossen?
 
Nu werkt hij wel :) Dank je!

Er zit nog een klein foutje in, hij telt als het ware gewoon door. Dus als ik in het eerste potje 2 kaarten heb gelegd, legt hij in het tweede potje de eerste kaart op de derde plek zeg maar. Is dit nog makkelijk op te lossen?

aan het begin van elk spel zet je:
Code:
aantalKaartenSpeler1 = 0
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan