Indien

Wir sind schon recht amüsant und ab und zu auch
ein bischen gemein. Wir sind Feinheit. Danke!

Blog

15.05.08, Martin Bommeli

Der Flashplayer 10 ist da

2 Kommentare

Year. Die beta version des Adobe Flash Player 10 (Astro) ist im Lab downloadbar. Der neue Player kann auf die "Video Card" zugreifen. Das heisst der Flashplayer ist schneller den je.
Hier ein paar "Key Features":
- 3D Effects
- Peer to Peer (P2P)
- Custom Filters and Effects
- Advanced Text Layout
- Enhanced Drawing API
- Visual Performance Improvements
- Typed Arrays
- Dynamic sound generation
- GPU Blitting/Compositing
- FileReference (Gabs schon, aber neu muss das File nicht mehr zuerst auf dem Server gespeichert werden)

- Alle Infos und FlashPlayer download
- FlashPlayer 10 Demos
- FlashPlayer 10 Lab
- Pixel Blender Toolkit

22.01.08, Martin Bommeli

AS3: Papervision3d - erste Versuche

0 Kommentare

Papervision3D ist eine Open Source 3d Engine auf Flash AS3 Basis. Anfang Dezember ist die alpha Version von Papervision3D 2.0 (Great White) rausgekommen...

Da ich in den letzten Tagen entlich mal AS3 "angeschaut" habe, dachte ich mir es kann ja nicht schaden mal n'bisschen mit Papervision rumzuspielen. Hier also mein erster Versuch :-) Mit Klick auf das Logo dreht es sich in seiner X oder Y Achse. Der Focus wird anhand der X Achse des Cursors berechnet...

bitte Flash Player installieren!

Beim zweiten Beispiel habe ich mal das gleiche Bitmap aus der Libary gezogen und per zufalls x, y und z Achse auf der Stage platziert. Mit Mausbewegung kann man auch einwenig im Raum rumsurfen.

bitte Flash Player installieren!

Download .fla File

Hier ein Codeauszug des zweiten Beispiels:

import org.papervision3d.cameras.*;
import org.papervision3d.core.proto.*;
import org.papervision3d.core.*;
import org.papervision3d.events.*;
import org.papervision3d.scenes.*;
import org.papervision3d.materials.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.render.*;
import org.papervision3d.view.*;
import caurina.transitions.Tweener;
	
var scene:Scene3D;
var camera:Camera3D;
var renderer:BasicRenderEngine;
var viewport:Viewport3D;

var p:Plane;
var bam:BitmapAssetMaterial;

initAll();

function initAll(){
	stage.align = StageAlign.TOP_LEFT;
	stage.scaleMode = StageScaleMode.NO_SCALE;
	
	init3D();
	initObject();
}

function init3D(){
	renderer = new BasicRenderEngine();
	
	viewport = new Viewport3D(0, 0, true, true);
	viewport.containerSprite.buttonMode = true;
	addChild(viewport);	
	
	scene = new Scene3D();				
	camera = new Camera3D();
	camera.x = 0;
	camera.y = 0;
	camera.z = -200;
	camera.focus = 100;
	camera.zoom = 1;
}

function initObject(){	
	bam = new BitmapAssetMaterial("cover");
	bam.oneSide = false;
	bam.smooth = true;	
	bam.interactive = true;	
	
	for(var i:uint=0; i<10; i++){
		var p:Plane = new Plane(bam, 800, 166, 2, 2);
		scene.addChild(p);
		p.x = Math.random() * 777 - 222;
		p.y = Math.random() * 777 - 222;
		p.z = Math.random() * 777 - 222;
		p.rotationY = Math.random() * 360;		
		p.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, showAni);	
	}	
	
	stage.addEventListener(MouseEvent.MOUSE_MOVE, initRender);
	stage.addEventListener(Event.MOUSE_LEAVE, renderAllStop);
}

function showAni(ev:InteractiveScene3DEvent) {	
	var newRotXPos:Number = ev.target.rotationX; 
	var newRotYPos:Number = ev.target.rotationY;	
	
	newRotXPos = (newRotXPos+360);
	
	Tweener.pauseAllTweens();
	Tweener.addTween(ev.target,{
					rotationX: newRotXPos,
					rotationY: newRotYPos,
					time: 1.0, 
					transition:"easeOutQuart"
					}
	);
}


function initRender(e:Event):void{
	stage.addEventListener(Event.ENTER_FRAME, renderAll);
}

function renderAllStop(e:Event):void{
	stage.removeEventListener(Event.ENTER_FRAME, renderAll);
}

function renderAll(e:Event):void{
	var newcamX = camera.x+Math.round((stage.mouseX-stage.stageWidth/2)/10);
	var newcamY = camera.y+Math.round((stage.mouseY-stage.stageHeight/2)/10);
	
	if(newcamX>-2000 && newcamX<2000){
		camera.x = newcamX;
	}
	if(newcamY>-200 && newcamY<200){
		camera.y = newcamY;
	}	
	renderer.renderScene(scene, camera, viewport);	
}

- Papervision Source
- Papervision Dokumentation
- Papervision Wiki
- Tweener Source
- Tweener Dokumentation

- AS3 Code-Snippets
- Papervision 360° Video

11.01.08, Martin Bommeli

Flash: Actionscript 3 Compute-Spectrum

2 Kommentare

Ende 2006 habe ich für ein SFUG Meeting einen kleinen Equalizer entwickelt. Diesen habe ich wiedermal hervorgenommen und etwas erweitert.

bitte Flash Player installieren!
mp3 File: cgibbsallstateunion.mp3

Hier ein Codeauszug:

SWFObject Einbindung

var so = new SWFObject("soundvisualizer.swf","swfid","500","150","9");
so.addVariable("trackname","All State union");
so.addVariable("trackartist","C. Gibbs");
so.addVariable("autostart","0");	
so.addVariable("file","test.mp3");
so.write("mp3_player");

AS3

    
/**************************************************

spectrum_show() - BytesArray auslesen und darstellen 

****************************************************/

private function spectrum_show(e:Event):void{
    
    var lineY:Number;
    var gMC:MovieClip;
    var ba:ByteArray = new ByteArray();
                
    var bytesL:Number = snd.bytesLoaded;
    var bytesT:Number = snd.bytesTotal;
    var bytesP:Number = bytesL/bytesT*100;
    
    txt1.autoSize = TextFieldAutoSize.RIGHT;
    txt1.text = Math.round(bytesP)+"% geladen";		
    if (bytesP == 100) {
        txt1.text = "";
    }
    txt1.x = stage.stageWidth-txt1.width;
    
    
    gMC = spectrum_mc;
    gMC.graphics.clear();
    gMC.grundlinie_mc.width = gMC.fade_mc.width = stage.stageWidth;	
    
    lineY = gMC.grundlinie_mc.y;
    
    
    SoundMixer.computeSpectrum(ba,true,1);
    
    var i:uint;			
    for (i=0; i<512; i+=1) {
        var a:Number = ba.readFloat();
        var num:Number = a*lineY;						
        var lineW:Number = 5;				
        var lineX:Number;
        
        lineX = i*stage.stageWidth/512;
                
        //Balken nach oben
        gMC.graphics.beginFill(0x4FA6FF,1);
        gMC.graphics.drawRect(lineX,lineY,lineW,-num/2);

        //Balken nach unten
        gMC.graphics.beginFill(0x4FA6FF,2);
        gMC.graphics.drawRect(lineX,lineY,lineW,num/2);				
        
    }
            
}

- Kompleter AS3 Code dieses Players
- SoundMixer Klasse in den livedocs
- computeSpectrum bei gotoAndLearn.com
- AS3 Sound Spectrum Contest

18.12.07, Martin Bommeli

Flash: Actionscript AS3 Code-Snippets

3 Kommentare

Hier ein paar kleine aber sehr nützliches Actionscript-Code-Snippets...

Das erste ist um festzustellen ob das swf-File Lokal oder auf nem Server ausgeführt wird:

AS3
if(stage.loaderInfo.url.indexOf("file:") != -1){
   trace("Lokal");
}else{
   trace("Server");
}

AS2
if(_url.indexOf("file") != -1){
   trace("Lokal");
}else{
   trace("Server");
}

Dieses Snippet ist um ein ContextMenu (recht-maustasten-menu auf einer SWF) mit Link zu erstellen:

AS3
function goToContextMenuWebsite1(event:ContextMenuEvent):void { 
   var weblink:URLRequest = new URLRequest("http://www.feinheit.ch/");
   navigateToURL(weblink,"_blank");
}

var cmnu:ContextMenu = new ContextMenu();
cmnu.hideBuiltInItems();
var cmnui:ContextMenuItem = new ContextMenuItem("by FEINHEIT"); 
cmnui.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, goToContextMenuWebsite1); 

cmnu.customItems.push(cmnui);
this.contextMenu = cmnu;

AS2
function goToContextMenuWebsite1(){
   getURL("http://www.feinheit.ch");
};

var cmnu:ContextMenu = new ContextMenu();
cmnu.hideBuiltInItems();
cmnu.customItems.push(new ContextMenuItem("by FEINHEIT",goToContextMenuWebsite1));
this.menu = cmnu;

Wenn man per Flashvars eine Variable einlesen möchte kann man dies nicht mehr mit _root.deinevariable machen. Hier ein Beispiel wie man eine Variable einliesst und sie Definiert, falls sie "leer" reinkommt:

html/js (swfObject einbindung)
var so = new SWFObject("movie.swf", "mymovie", "400", "200", "8", "#336699");
so.addVariable("sprache", "en");
so.write("flashcontent");

AS3
var sprache:String = stage.loaderInfo.parameters["sprache"];
!sprache ? sprache = "de" : sprache = sprache;
trace(sprache);

AS2
!_root.sprache ? _root.sprache = "de" : _root.sprache = _root.sprache;
trace(_root.sprache);

Bei as3 gibt's kein onPress, onRelase usw. mehr. Man muss an den MovieClip nen Listener anhängen. Um dann auch noch den richtigen Curser-Status anzuzeigen muss man den buttonMode auf true setzen. useHandCursor kann man bei as3 nur noch auf Button-Objekte setzen.

AS3
function meinefunction(e:MouseEvent):void{
   trace("Ich bin ein Button");
}
meinbutton_btn.addEventListener(MouseEvent.CLICK, meinefunction);
meinbutton_btn.buttonMode = true;
meinbutton_btn.mouseChildren = false;

AS2
meinbutton_btn.onPress = function(){
   trace("Ich bin ein Button");
}

Einfache einfärbung eines MovieClips:

AS3
//import flash.geom.ColorTransform;

var color_transf:ColorTransform = mc.transform.colorTransform;
color_transf.color = 0xff0000;
mc.transform.colorTransform = color_transf;

AS2
new Color(mc).setRGB(0xff0000);

Contextmenu ausblenden:

AS3
stage.showDefaultContextMenu = false;

AS2
Stage.showMenu = false;

In AS3 ist es nun entlich möglich Regular expressions zu nutzen. Hier ein einfaches Beispiel mit einem e-Mail check:

AS3
function checkEmail (mail:String):Boolean 
{
  var regExpPattern : RegExp = /^[0-9a-zA-Z][-._a-zA-Z0-9]*@([0-9a-zA-Z][-._0-9a-zA-Z]*\.)+[a-zA-Z]{2,6}$/;
  if( mail.match(regExpPattern) == null ) {
    return false;
  } else {
    return true;
  }
}

trace(checkEmail("martin@@domain.ch")); //false
trace(checkEmail("martin@domain.ch")); //true
trace(checkEmail("martin@domain")); //false
trace(checkEmail("@domain.de")); //false
trace(checkEmail("martin.bommeli@domain.ch")); //true
trace(checkEmail("martin bommeli@domain.ch")); //false
trace(checkEmail("martin+bommeli@domain.ch")); //false
trace(checkEmail("martin_bommeli@subdomain.domain.ch")); //true