(category) LIST of posts

Tutorials XML

Lynda.com introduktion til xml Se de gratis videoer på listen

random image med uiloader til xml
En simpel imageloader vel forklaret

En simpel xml-menuloader til knapper
En simpel menu får menupunkter med en xml-fil, der hentes fra en class på et movieclip
ria-coder.com/blog/creating-xml-based-menus-with-flash-cs4-and-flex

accordeon med xml fra thetechlab
accordeon med xml fra riacodes

Slideshow med Caurina tweener
thetechlabs.com: create-a-as3-slideshow-with-xml
Slideshow mwd Tweenmax
active.tutsplus.com: build-a-dynamic-flash-and-xml-slideshow-with-scripted-transitions

Slideshow mwd flash’s egen tweener
republicofcode: as3slideshow

videoplayer med xml playlist

podcast-player (ikke testet)

Preloader ekstern

Den nemmeste relaterede tutorial – er nok denneher:
monkeyflash.com/flash/creating_a_custom_preloader

var ldr:Loader = new Loader();
 
ldr.load(new URLRequest("content.swf"));
 
ldr.contentLoaderInfo.addEventListener(Event.OPEN, loadOpen);
ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
 
function loadOpen(e:Event):void {
    trace("Loading begun");
} 
 
function loadProgress(e:ProgressEvent):void {
    var percentLoaded:Number = e.bytesLoaded/e.bytesTotal;
    percentLoaded = Math.round(percentLoaded * 100);
    trace("Loading: "+percentLoaded+"%");
}
 
function loadComplete(e:Event):void {
    addChild(ldr);
    trace("Complete");
}

Preloader intern

Hvor preloader af eksterne filer håndteres med “contentLoaderInfo”, ligger den interne info om enhver flashfil i “loaderInfo”.
Forbered følgende:
Dynamiak tekstfelt: pct_txt
Animeret movieclip på 100 frames: frames100_mc

flashscope.com: the-most-creative-flash-preloaders-of-all-times

// placeres på en keyframe - før alle andre frames ..
// Husk at trykke CTRL+ENTER 2 gange for at teste preloader.
stop();
loaderInfo.addEventListener(ProgressEvent.PROGRESS, pHANDLER);
function pHANDLER(e:ProgressEvent):void {
	var pctLoaded:int = Math.round(e.bytesLoaded/e.bytesTotal * 100);
	pct_txt.text=pctLoaded.toString()+" %"; 
	frames100_mc.gotoAndStop(pctLoaded); 
}
loaderInfo.addEventListener(Event.COMPLETE, cHANDLER);
function cHANDLER(e:Event):void {
	gotoAndStop("scene1");
}

Timeline til navigation

Scenen (eller et movieclip) er vandret delt op i kapitler / sektioner / scenarier – som udgør stationerne i en navigation.
En sektion er en sekvens af en eller flere frames – der med fordel kan indledes med en label – og kan afsluttes med en play-back action (fx. stop(); eller gotoAndPlay(en_eller_anden_frame);).
Den første sektion er som regel den, filmen starter med.
Tidslinien er lodret delt op i lag efter keyframes funktionalitet og varighed (fx. actionscript, labels, og forskellige slags indhold).

Præsentation / site

Dette er en traditionel timeline-baseret strukturering af en præsentation.

minisite

Indholdet på scenens keyframes er samlet i overordnede movieclips.
Selve knapperne til brug for navigationen kunne ligge direkte på scenens frames eller være organiseret i overordnede movieclips som menuer.
På scenens Labels-lag: keyframes med labels, som indleder de forskellige sektioner.
På scenens Actions-lag: keyframes med actions (som regel stop(); ), som afslutter de forskellige sektioner.
På scenens første action-lag: knapfunktioner, fx.

stop();
home_but.buttonMode=true;
home_mc.addEventListener(MouseEvent.CLICK, gohome);
function gohome(e:MouseEvent) {
	gotoAndStop("home");
}

Se Det konkrete eksempel på Mini site

Varieret indhold

Nedenstående eksempler er sektionerede tidslinier på movieclips.
Navigationen er ikke nødvendigvis tydelig for brugeren, men bliver en metode til at gøre objekter komplekse, på en overskuelig måde. Play-back kommandoer som gotoAndPlay() giver udvikleren mulighed for at kunne variere movieclippets udseende eller ‘adfærd’.

nav2a

hund_mc.gotoAndPlay("sit");

Denne kodelinie kan optræde i forbindelse med forskellige events eller if-betingelser.
Metoden er praktisk og ligetil – og også god at falde tilbage på, hvis det er uoverskueligt at scripte sig til forskellige tilvalg, eller variationer.

nav2b

Følgende tidslinier er ikke opdelte i sektioner, der navigeres på deres frames med udregnede tal og ikke labels.

nav2d Denne tidslinie ville kunne bruges til et slideshow eller galleri, med et nyt billede på hver frame.
Kommandoen gotoAndSop(currenFrame+1); i en eventlistener kan bruges på en next-knap eller iværksættes af en timer.

nav2c Dette eksempel er bare en movieclip med en animeret tidslinie. Med kommandoen gotoAndStop(tal); hvor tallet er en udregning på baggrund af et imput, kan det visualisere en udvikling eller en gradvis forandring i en proces. Fx. i en preloader.

Drop_and_Catch classes

fruit class

package {
	import flash.display.MovieClip;
	import flash.events.*;
	public class fruit extends MovieClip {
		var ySpeed;
		var points;
		public function fruit() {
		}
		function INIT() {
			position();
			addEventListener(Event.ENTER_FRAME, update);
		}
		function update(e:Event) {
			y+=ySpeed;
			if (y>stage.stageHeight) {
				position();
			}
		}
		function position() {
			y=0;
			x=Math.random()*stage.stageWidth-width;
			ySpeed=(Math.random()*10)+2;
		}
		function EXIT() {
			removeEventListener(Event.ENTER_FRAME, update);
		}
	}
}

basket class

package {
	import flash.display.MovieClip;
	import flash.events.*;
	public class basket extends MovieClip {
		public function basket() {
			INIT();
		}
		function INIT() {
			addEventListener(Event.ENTER_FRAME, update);
		}
		function update(e:Event) {
			x=stage.mouseX;
			y=stage.stageHeight-height;
		}
		function EXIT() {
			removeEventListener(Event.ENTER_FRAME, update);
		}
	}
}

doc class

package {
	import flash.display.MovieClip;
	import flash.events.*;
	import flash.ui.Mouse;
	public class doc extends MovieClip {
		var hart=new fruit  ;
		var knife=new fruit  ;
		var ourBasket=new basket  ;
		var score:int=0;
		public function doc() {
			stop();
			INIT();
			buttonMode=true;
		}
		function INIT() {		
			score=0;
			Mouse.hide();
			addChild(hart);
			hart.gotoAndStop("hart");
			hart.points=10;
			hart.INIT();
			addChild(knife);
			knife.gotoAndStop("knife");
			knife.points=-10;
			knife.INIT();
			addChild(ourBasket);
			ourBasket.INIT();
			addEventListener(Event.ENTER_FRAME, update);
		}
		function update(e:Event) {
			testCollision(hart);
			testCollision(knife);
		}
		function testCollision(someFruitName) {
			if (someFruitName.hitTestObject(ourBasket)) {
				score+= someFruitName.points;
				someFruitName.position();
				result();
			}
		}
		function result() {
			trace("Du har " + score + " points");
			if (score>20) {
				EXIT();
				gotoAndStop("win");
			}
			if (score<-20) {
				EXIT();
				gotoAndStop("lose");
			}
		}
		function EXIT() {
			Mouse.show();
			removeEventListener(Event.ENTER_FRAME, update);
			removeChild(hart);
			hart.EXIT();
			removeChild(knife);
			knife.EXIT();
			removeChild(ourBasket);
			ourBasket.EXIT();
		}
		function goGame(e:MouseEvent) {
			gotoAndStop("game");
			INIT();
		}/**/
	}
}

Bat_Ball classes

bat class

package {
	import flash.display.MovieClip;
	import flash.events.*;
	public class bat extends MovieClip {
		public function bat() {
			//INIT();
		}
		function INIT() {
			addEventListener(Event.ENTER_FRAME, update);
		}
		function update(e:Event) {
			y= stage.stageHeight-(height/2);
			x= stage.mouseX;
		}
		function EXIT() {
			removeEventListener(Event.ENTER_FRAME, update);
		}
	}
}

ball class

package {
	import flash.display.MovieClip;
	import flash.events.*;
	public class ball extends MovieClip {
		var xSpeed=10;
		var ySpeed=10;
		var margin=width/2;
		public function ball() {
			//INIT();
		}
		function INIT() {
			y=0+margin;
			addEventListener(Event.ENTER_FRAME, update);
		}
		function update(e:Event) {
			if (x<0+margin) {
				x=0+margin;
				xBounce();
			}
			if (x>stage.stageWidth-margin) {
				x=stage.stageWidth-margin;
				xBounce();
			}
			if (y<0+margin) {
				y=0+margin;
				yBounce();
			}
			if (y>=stage.stageHeight) {
				y=0+margin;
			}
			x+=xSpeed;
			y+=ySpeed;
		}
		function xBounce() {
			xSpeed=xSpeed*-1;
			gotoAndPlay("pong");
		}
		function yBounce() {
			ySpeed=ySpeed*-1;
			gotoAndPlay("pong");
		}
		function EXIT() {
			removeEventListener(Event.ENTER_FRAME, update);
		}
	}
}

doc class

package {
	import flash.display.MovieClip;
	import flash.events.*;
	import flash.text.*;
	public class doc extends MovieClip {
		var ourBat = new bat();
		var ourBall = new ball();
		var score:int;
		var points:int=1;
		var scoreMIN:int=-2;
		var scoreMAX:int=2;
		public function doc() {
			stop();
			//INIT();
			back_but.addEventListener(MouseEvent.CLICK, goGame);
		}
		function INIT() {
			score=0;
			score_txt.text=score+" points yet";
			addChild(ourBat);
			ourBat.INIT();
			addChild(ourBall);
			ourBall.INIT();
			addEventListener(Event.ENTER_FRAME, update);
		}
		function update(e:Event) {
			if (ourBall.hitTestObject(ourBat)) {
				ourBall.yBounce();
				score+=points;
			}
			if (ourBall.y>stage.stageHeight) {
				score-=points;
			}
			result();
		}
		function result() {
			//trace("Du har " + score + " points");
			score_txt.text="points: "+score+" out of "+scoreMAX ;
			if (score==scoreMAX) {
				EXIT();
				gotoAndStop("win");
			}
			if (score==scoreMIN) {
				EXIT();
				gotoAndStop("lose");
			}
		}
		function EXIT() {
			removeEventListener(Event.ENTER_FRAME, update);
			removeChild(ourBat);
			ourBat.EXIT();
			removeChild(ourBall);
			ourBall.EXIT();
		}
		function goGame(e:MouseEvent) {
			gotoAndStop("game");
			INIT();
		}/**/
	}
}