Archief - FLASH: removeChild

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

sgtsylvester

Legacy Member
hallo,

ik zet met een for-lus 10 aanwijzers op m'n stage

Code:
function voegAanwijzersToe(){	

	for (var i:Number=0;i<=10;i++){ 	
	var aanwijzer:Aanwijzer = new Aanwijzer(600,-20);
	addChild(aanwijzer);	
	aanwijzer.x = (Math.random()*stage.width);	
	aanwijzer.addEventListener(MouseEvent.MOUSE_DOWN,onClick);
	aanwijzer.name = String(i);
	}	
	
}

als er op eentje geklikt wordt moeten ze allemaal terug verwijderd worden:

Code:
function onClick(e:MouseEvent):void{
	
	for(var i:Number=0;i<=10;i++){
			removeChild(e.target.name = i);
		}	
}

of is het eerder iets in de vorm van "removeChild(aanwijzer.name("1"))" ofzo ?

Ik weet niet echt wat die e.target.name juist wil verwijderen...
In ieder geval het wil niet lukken.

mvg.

azerty_2006

Legacy Member
Ben zelf nog niet lang bezig met AS dus ben dit niet zeker, maar is addChild geen method ipv functie ofzo ? :unsure:

Gerritn

Legacy Member
removeChild(getChildByName(i.toString());

Hoe je aan die e.target.name = i komt is me totaal niet duidelijk, maar dat zal lang niet werken.

sgtsylvester

Legacy Member
en als ik de movieclip op de stage wil vinden...

ik dacht aan:

Code:
private var stageRef:Stage;

stageRef = this.stage;

stageRef.removeChild(getChildByName(foto1));

maar werkt blijkbaar niet.

(in de klasse die gekoppeld is aan mijn fla)

sgtsylvester

Legacy Member
volledige code:

Code:
package{
	import flash.display.Sprite;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.events.Event;
	import fl.transitions.Tween;
	import fl.transitions.easing.*;
	import flash.display.Stage;

	
	
	public class Gallery extends flash.display.Sprite{	
	
		private var fotoXMLLoader:URLLoader;
		private var fotos:Array;
		private var xfotos:Number;
		private var aantalfotos:Number;
		private var RechtsLinks:String;
		private var Rechts:Number;
		private var Links:Number;
		private var stageRef:Stage;
				
		public function Gallery():void{
			stageRef = this.stage;
			xfotos = 0;
			aantalfotos = 0;
			Rechts = 1;
			Links = 1;
			RechtsLinks = "";			
			loadGamesXML();					
		}
		
		private function loadGamesXML():void{
			fotoXMLLoader = new URLLoader();
			fotoXMLLoader.addEventListener(Event.COMPLETE,fotoXMLLoadHandler);
			fotoXMLLoader.load(new URLRequest("fotos.xml"));			
		}
		
		private function fotoXMLLoadHandler(e:Event):void{
			fotosXML = XML(e.target.data);
			fotos = new Array();
			for each (var fotosXML:XML in fotosXML..foto){
				
				var foto:Foto = new Foto();
				foto.naam = fotosXML.naam;
				foto.tekst = fotosXML.tekst;				
				fotos.push(foto);
				
				createFoto(foto);
			}
		}
		
		private function createFoto(foto:Foto) {
			var fotocomplete:FotoComplete = new FotoComplete(foto);
			
				if(aantalfotos == 0){
					fotocomplete.y = stage.stageHeight/2-(100);
					fotocomplete.x = stage.stageWidth /2-(100);
					xfotos = fotocomplete.x				
					RechtsLinks = "Links"
					aantalfotos +=1 ; 
					fotocomplete.name = "foto" + String(aantalfotos);
					stageRef.addChild(fotocomplete);
				}
				else{
				if(RechtsLinks == "Links"){					
					fotocomplete.y = stage.stageHeight/2-(100);
					fotocomplete.x = xfotos - (220*Links);
					Links +=1;
					aantalfotos +=1;
					fotocomplete.name = "foto" + String(aantalfotos);
					stageRef.addChild(fotocomplete);										
				}
				
				if(RechtsLinks == "Rechts"){
					fotocomplete.y = stage.stageHeight/2-(100);
					fotocomplete.x = xfotos + (220*Rechts);					
					Rechts +=1;
					aantalfotos +=1;
					fotocomplete.name = "foto" + String(aantalfotos);
					stageRef.addChild(fotocomplete);
				}	
				}//else
				if(RechtsLinks == "Links"){
					RechtsLinks = "Rechts";
				}else{
					RechtsLinks = "Links";
				}
				
				loadBackground();
			
		}
		
		private function loadBackground():void{
				var boven:GalleryBoven = new GalleryBoven();				
				boven.height = 0;
				stageRef.addChild(boven);
				boven.y = -275;				
				var bovenTween:Tween = new Tween(boven,"height",Strong.easeOut,0,550,0.5,true);				
				
				var onder:GalleryOnder = new GalleryOnder();				
				stageRef.addChild(onder);
				onder.y = 275;
				var onderTween:Tween = new Tween(onder,"height",Strong.easeOut,0,550,0.5,true);		
				
				masks();
			}
			
		private function masks():void{								
				//stageRef.removeChild(getChildByName(boven));
		}
		
	}
}

blaZe

Legacy Member
dan zou ik het eenvoudiger doen,

maak gewoon een lege container aan waar je telkens

container.addChild(aanwijzer) doet in de loop.
en nadien remove je gewoon die container.

ander moet je weer loopen...

sgtsylvester

Legacy Member
Goed idee :)

Maar ik ben ook bezig met een gallery. Foto's worden gelezen uit een xml. Die foto's worden één voor één op de stage geplaatst als een fotoComplete object dus de foto zit in een movieclip van de klasse fotoComplete. In deze klasse zou ik enkele functies willen stoppen om tweens uit te voeren op de movieclips.

Dus moet ik vanuit de Gallery.as (de algemene as file) deze movieclips en hun functies kunnen aanroepen die op de stage geplaatst werden. (zie voorgaande code).

Ik dacht dat ik het juist deed door een var StageRef:Stage aan te maken en deze gelijk te stellen aan this.stage. Alles dat toegevoegd wordt aan de stage : StageRef.addchild(...) te doen maar om deze dan terug te vinden met StageRef.getChildByName(...) of ze proberen te verwijderen door bv. StageRef.removeChild(getChildByName(foto1)) dat lukt niet echt.

Voor alle duidelijkheid mijn eerste post gaat over een andere fla dan mijn 2 laatste posts. (Project waarvoor ik 4 fla's gebruik).

Dus vermoedelijk moet ik hier ook werken met een container waar alle foto's inzitten ?

mvg.

Gerritn

Legacy Member
Je moet zowiezo je structuur behouden bij het aanspreken van objecten, als een object dus in een container zit, en deze container zet je op de stage, dan moet vanuit je Gallery.as (wat je document class is, neem ik aan?), container.removeChild(getChildByName('x')) gebruiken, volgens je gebruikte structuur.

sgtsylvester

Legacy Member
merci voor de antwoorden het is inmiddels gelukt om een object aan te spreken.

hoe los ik het volgende op ?

stageRef.getChildByName('foto1').TweenRechts();


EDIT:

var NaamMC:Object;
NaamMC = stageRef.getChildByName('foto1')
NaamMC.TweenRechts();

opgelost :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan