Archief - object uit array casten ?

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.

TooChé

Legacy Member
zal het zo overzichtelijk en duidelijk proberen uit te leggen.

ik wil het laten sneeuwen op mn flashsite. En dat wil ik doen door met een timer op het tickevent iedere keer een sneeuwvlok bij te maken en die naar beneden te laten dwarrelen. Dus in de timertick functie wordt iedere keer een sneeuwvlok aangemaakt en op de stage gezet (en in een array gestoken). Nadat dit gebeurd is, gaat die functie een andere functie aanroepen die de vlokken een positie lager zet. Hier wordt de array overlopen en voor iedere sneeuwvlok de positie aangepast.

Maaaar ... je kan wel inbeelden dat ik die sneeuwvlokken wil doen verdwijnen. Als ze dus aan een bepaalde positie komen (controleer op ze beneden de stage zijn) wil ik ze verwijderen van stage. Maar dit lukt me niet. Als ik

stage.removeChild(elementuitforlus) doe, dan wordt het element niet herkend als element die op de stage staat. Nochtans is het wel van het type sneeuwvlok (als ik een trace doe)

iemand een idee hoe ik dit kan aanpakken ?

Zero Grav

Legacy Member
Code:
package {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.utils.Timer;

	public class TestProject extends Sprite
	{
		private var maxSpeed:uint = 20;
		private var minSpeed:uint = 5;
		private var flakesArr:Array = new Array();
		
		public function TestProject():void {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			var timer:Timer = new Timer(200);
				timer.addEventListener(TimerEvent.TIMER, onTimerTick, false, 0, true);
				timer.start();
				
			stage.addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true);
		}
		
		private function onTimerTick(e:TimerEvent):void {
			var bal:MovieClip = new MovieClip();
				bal.graphics.beginFill(0x00FF00, 1);
				bal.graphics.drawCircle(0, 0, 10);
				bal.graphics.endFill();				

			bal.x = Math.random() * stage.stageWidth;
			bal.y = -bal.height/2;
			bal.speed = Math.random() * (maxSpeed - minSpeed) + minSpeed;
			
			addChild(bal);
			
			flakesArr.push(bal);
		}
		
		private function onEnterFrame(e:Event):void {
			for(var i:uint = 0; i < flakesArr.length - 1; i++) {
				if(this.contains(flakesArr[i])) {
					var flake:MovieClip = MovieClip(flakesArr[i]);
					if(flake.y <= stage.stageHeight) {
						flake.y += flake.speed;
					} else {
						this.removeChild(flake);
						flakesArr.splice(i, 1);
					}
				} else {
					trace("Het object werd niet gevonden");
				}
			}
		}
	}
}

Of met Syntax Highlighting: ActionScript pastebin - collaborative debugging tool
Niet echt goeie code, maar 't is ook maar een voorbeeld. Op zich zoudt ge gewoon een klasse Snowflake kunnen maken die van zichzelf de yPositie vergroot bij een enter frame en zichzelf ook verwijdert als em buiten stage is.

Ook is die Array voor niets nodig om eerlijk te zijn. Als ge werkt met een EventListener op het ENTER_FRAME event dan kunt ge uw displaylist overlopen en zo clearen.

Code:
		private function onEnterFrame(e:Event):void {
			for(var i:uint = 0; i < this.numChildren - 1; i++) {
				if(this.getChildAt(i) is MovieClip) {
					if(this.getChildAt(i).y <= stage.stageHeight) {
						this.getChildAt(i).y += 5;
					} else {
						this.removeChild(this.getChildAt(i));
					}
				}
			}
		}

Dan kunt ge deze code dus gebruiken en die array volledig overbodig maken. Nog beter zou zijn als ge in plaats van MovieClip een klasse aanmaakt van het type Snowflake of dergelijke. Ik heb nu MovieClip kunnen gebruiken omdat ik enkel en alleen die snowflakes op mijn stage had staan, dunno hoe het bij u zit.

TooChé

Legacy Member
you sir, are my hero :applause:


ik wou het dus veel te ingewikkeld maken :) anyway nu werkt het zoals het moet. Muchos gracias
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