(index) LIST of posts

Index på Monline

Aflevering i Fronter

Titel: ditnavn_ditefternavn-monlineindex
URL: http://ditbrugernavn.monline.dk

Forsiden på Monline

En forside kaldet index.html + mapper og filer udarbejdes anden dag og uploades fra rodmappen på C-drevet – til rodmappen på Monline-adressen med et FTP-program.
Denne index-fil suppleres dagligt med links til nye opgaveløsninger og opdateres i løbet af ugen.

1uge-lil
ftp-adresse = monline.dk
brugernavn bliver udleveret
password bliver udleveret

Når forbindelsen til monline er oprettet med FTP, trækkes lokale filer og mapper direkte ud i samme mapper på monline serveren. Strukturen “derude” skal afspejle strukturen “derhjemme”.

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();
		}/**/
	}
}

Personligt flashspil e08

Deadline Søndag 26-10-2008 – 23:59

Aflevering:

Der skal i Fronter uploades en zip- eller rar-fil,  indeholdende en fla-fil og mindst en as-fil. (En flash-fil, og en document class som minimum – gerne flere classes)

Altså: Et personligt udviklet spil – som fungerer.
Spillet og koden skal afspejle hvad du har studeret dig til og lært.
Det må gerne være inspireret af de gennemgåede (eller andre) eksempler, hvis kodningen tager modet fra dig.

Koden skal kommenteres. (/* kommentarer og personlige forklaringer*/) Har du fundet en allerede kommenteret udgave, skal den suppleres med DINE forklaringer så vi kan aflæse DIN forståelse.
- ikke en direkte oversættelse til dansk men en løbende forklaring på hvorfor og hvordan det bliver brugt..

Spillet skal indeholde:

  • en Splash side. (indgang med knap til selve spilscenariet)
  • en document class-script og gerne andre classes med relevante og forklarende personlige kommentarer.
  • et vind-scenarie
  • et tab-scenarie

Inspiration:

  • Se opgaveformuleringen for hele workshop2

God fornøjelse -
hilsen Kamilla og Brennan

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();
		}/**/
	}
}

Load presentation

Tilgængelige variabler defineret øverst.
I en class, skal de stå i class definitionen, før constructer’en (hoved-functionen).

var film1:URLRequest = new URLRequest("undermappenavn/anim_playback.swf");
var film2:URLRequest = new URLRequest("undermappenavn/bat_ball_2a.swf");
var film3:URLRequest = new URLRequest("undermappenavn/fruit_extra_new_b.swf");

I en class, vil denne typisk stå i constructor’en:

var ldr:Loader = new Loader();

I nedenstående script loades og vises hver film i hver sin knap-funktion:

film1_but.addEventListener(MouseEvent.MOUSE_DOWN,film1_Handler);
function film1_Handler(e:MouseEvent):void {
    SoundMixer.stopAll();
    ldr.load(film1);
    box_mc.addChild(ldr);
    stage.frameRate=12;
}
film2_but.addEventListener(MouseEvent.MOUSE_DOWN,film2_Handler);
function film2_Handler(e:MouseEvent):void {
    SoundMixer.stopAll();
    ldr.load(film2);
    box_mc.addChild(ldr);
    stage.frameRate=32;
}
film3_but.addEventListener(MouseEvent.MOUSE_DOWN,film3_Handler);
function film3_Handler(e:MouseEvent):void {
    SoundMixer.stopAll();
    ldr.load(film3);
    box_mc.addChild(ldr);
    stage.frameRate=32;
}

Nedenstående knap-funktioner tømmer loaderen, ændrer boksens egenskaber, og til sidst ‘taler’ direkte til den loadede swf’s egen tidslinie :

unload_but.addEventListener(MouseEvent.MOUSE_DOWN,unload_Handler);
function unload_Handler(e:MouseEvent):void {
    SoundMixer.stopAll();
    ldr.unload();
    stage.frameRate=12;
}
distort_but.addEventListener(MouseEvent.MOUSE_DOWN,distort_Handler);
function distort_Handler(e:MouseEvent):void {
    box_mc.scaleX = box_mc.scaleY = .6;
    box_mc.rotation=9;
}
normal_but.addEventListener(MouseEvent.MOUSE_DOWN,normal_Handler);
function normal_Handler(e:MouseEvent):void {
    box_mc.scaleX = box_mc.scaleY = .6;
    box_mc.x = 180;
    box_mc.y = 64;
    box_mc.rotation=0;
}
cheat_but.addEventListener(MouseEvent.MOUSE_DOWN,cheat_Handler);
function cheat_Handler(e:MouseEvent):void {
    MovieClip(ldr.content).gotoAndStop("win");
/*
tilsvarende, kaldt fra den loadede swf's tidslinie, ville være:
//////////
MovieClip(parent.parent).play();
/////////
*/
}

Sound object

Load lyden

var my_file:URLRequest=new URLRequest("lyd.mp3");
var my_sound:Sound=new Sound();
my_sound.load(my_file);

Når et Sound-objekt først har loadet en lyd, kan det ikke genbruges. Nyt Sound-objekt for ny lyd.

Channel Control

Play og stop

var channel1:SoundChannel;
channel1 = my_sound.play(0,10); //fra start, 10 gange
channel1.stop();

Position til pause

var pos:int= channel1.position;
channel1=my_sound.play(pos);

Stop all sounds

SoundMixer.stopAll();

Link lyden

Forudsætter en importeret lyd i library med linkage-name: ding.
Lyd i library, kan du linke med højreklik > Properties > Export for ActionScript > og classNavn, fx. ‘ding’.
(Flash vil som regel undre sig over, at der ikke ligger en class med det navn, og hvis ikke du med vilje har lavet en ekstern actionscript-fil med samme navn, skal du bare svare ok til dens forslag.)
Derefter kan den kaldes frem således:

//A
    import flash.media.*;
//B
    var lyd:Sound=new ding();
    var sndc:SoundChannel;
//C//D
    //play og stop
    sndc = lyd.play();
    sndc.stop();
//D
    //stop alle lyde
    SoundMixer.stopAll();