Papervision 3D Karussell mit dynamischen interaktiven Inhalten
(Bildern und Text) aus XML Datei, gekürzter Basis Code



-------------------------Vorbereitungen --------------------------------------
XML DATEI (liste.xml) im folgenden Format anlegen:
<thumbnails>
<thumbnail filename="Bildname.gif" url="http://die-adresse.de/" target="_blank" titel="Titel" description="Beschreibung" />
<thumbnail filename="Bildname2.gif" url="http://die-adresse2.de/" target="_blank" titel="Titel" description="Beschreibung2" />
</thumbnails>

Bilder Ordner (images) mit in diesem Beispiel 12 Bildern jpg/gif anlegen.

Benötigte Klassen s.Code downloaden für das Projekt

ActionScript AS Code in Frame auf Timeline kopieren

AS3 References and Credits
http://code.google.com/p/tweener/
http://code.google.com/p/papervision3d/
http://blog.papervision3d.org/
http://theflashblog.com/?p=306
http://www.gotoandlearn.com/
http://www.webdesignmo.com
http://www.flashmo.com
http://vilebody.wordpress.com/2007/11/29/3d-papervision-plane-events/
*/

--------------------------Start AS Code für Flash --------------------------------------

/*
Edited by Sonja Vieten
http://blog.sonja-vieten.de

AS3 References and Credits
http://code.google.com/p/tweener/
http://code.google.com/p/papervision3d/
http://blog.papervision3d.org/
http://www.gotoandlearn.com/
http://theflashblog.com/?p=306
http://www.flashmo.com
http://www.webdesignmo.com/blog/2008/04/30/spiral-carousel-xml/
http://vilebody.wordpress.com/2007/11/29/3d-papervision-plane-events/
*/

//Benötigte Klassen:
//Papervision org
import org.papervision3d.scenes.*;
import org.papervision3d.objects.*;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
//Caurina Tweener
import caurina.transitions.*;

//3 dynamische Textfelder mit diesen Namen für Titel, Beschreibung und Link Ausgabe anlegen
//Bei Bedarf Schrift einbetten und Umlaute und Sonderzeichen einbetten
tn_title.text = "";
tn_desc.text = "";
tn_url.text = "";

//Angabe der Anzahl der Karussell Bilder im Ordner.
var totalc:int = 12;
//Radius Karussell

var radius:Number =520;

var anglePer:Number = (Math.PI*2) / totalc;
var angleX:Number = anglePer;
//bestimmt später bei Rechts bzw. Linksbwegung wieviele Bilder übersprungen werden
var dest:Number =1;

//Filter (Abstand, Winkel, Farbe, Weichzeichnung, xGrad, yGrad,xAbstand, yAbstand)
//wird später bei Rollover bzw. Rollout einzelner Items angewendet
var dsf:DropShadowFilter = new DropShadowFilter(0, 90, 0xFFFFFF, 8, 3, 3, 5, 5);
var nodsf:DropShadowFilter = new DropShadowFilter(0);

//Container für Inhalte (Bilder im Karussell)
var con:Sprite = new Sprite();
con.x = stage.stageWidth/2;
con.y = stage.stageHeight/2-20;
addChild(con);

//PV3D
var scene:MovieScene3D = new MovieScene3D(con);
var cam:Camera3D = new Camera3D();
cam.zoom =6;

//hier werden leere Listen- Arrays erzeugt, die als Container für die XML Inhalte dienen
var url_list = new Array();
var url_target_list:Array = new Array();
var title_list = new Array();
var description_list = new Array();
//Ordner, in dem die Bilder liegen anlegen und hier referenzieren
var folder:String = "images/";

//URL Angaben zu XML Datei und Laden
var url:URLRequest = new URLRequest("liste.xml");
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, createbild);
loader.load(url);

function createbild(e:Event):void
{
//XML Objekt
var liste_xml:XML = new XML(loader.data);
var total = liste_xml.thumbnail.length();
// trace(liste_xml);

for( i =0; i< total; i++ )
{
//hier werden die XML Inhalte ausgelesen und den einzelnen Listen- Arrays hinzugefügt
url_list.push( liste_xml.thumbnail[i].@url.toXMLString() );
url_target_list.push( liste_xml.thumbnail[i].@target.toXMLString() );
title_list.push( liste_xml.thumbnail[i].@titel.toXMLString() );
description_list.push( liste_xml.thumbnail[i].@description.toXMLString() );

var bam:BitmapFileMaterial = new BitmapFileMaterial(folder + liste_xml.thumbnail[i].@filename.toXMLString());
bam.oneSide = false;
bam.smooth = true;

//PV3D Plane Klasse für flache rechtwinklige Objekte, als Parameter: Material, Breite, Höhe
var p:Plane = new Plane(bam, 250, 200);
scene.addChild(p);

p.x = Math.cos(i*anglePer) * radius;
p.z = Math.sin(i*anglePer) * radius;
p.rotationY = (-i*anglePer) * (180/Math.PI) + 270;

//hier werden die einzelnen Objekte ansprechbar und mit Event Listenern ausgestattet
var p_container:Sprite = p.container;
//Name egal, hier mit acht Buchstaben, werden später abgeschnitten
p.container.name = "achtzehn" + i;

p.container.buttonMode = true;
p.container.addEventListener( MouseEvent.ROLL_OVER, p_rollover );
p.container.addEventListener( MouseEvent.MOUSE_OUT, p_rollout );
p.container.addEventListener( MouseEvent.CLICK, p_click );

}
}

//STEUERUNG Carousel mit Tweener und Rendern Kamera, auf Bühne 2 Buttons "right" und "left" anlegen
right.addEventListener(MouseEvent.MOUSE_OVER, moveRight);
left.addEventListener(MouseEvent.MOUSE_OVER, moveLeft);
root.addEventListener(Event.ENTER_FRAME, render);

function moveRight(e:Event):void
{
dest++;
Tweener.addTween(this, {angleX:dest*anglePer,
time:2.9});
}

function moveLeft(e:Event):void
{
dest--;
Tweener.addTween(this, {angleX:dest*anglePer,
time:2.9});
}

function render(e:Event):void
{
cam.x = Math.cos(angleX) * 1000;
cam.z = Math.sin(angleX) * 1000;
scene.renderCamera(cam);
}

//STEUERUNG einzelne Items, Textzuordnung und Filter bei Rollover an und bei Rollout aus
function p_rollover(me:MouseEvent)
{
var sp:Sprite = me.target as Sprite;
//hier werden die acht Buchstaben des Namens abgeschnitten so dass
//alle Inhalte über die richtige ein bis zweistellige Nr. zugeordnet werden können
var s_no:Number = parseInt(sp.name.slice(8,10));
sp.filters = [dsf];
tn_title.text = title_list[s_no];
tn_desc.text = description_list[s_no];
tn_url.text = url_list[s_no];
}
function p_rollout(me:MouseEvent)
{
var sp:Sprite = me.target as Sprite;
sp.filters = [nodsf];
tn_title.text = "";
tn_desc.text = "";
tn_url.text = "";
}
function p_click(me:MouseEvent)
{
var sp:Sprite = me.target as Sprite;
trace(sp.name);
var s_no:Number = parseInt(sp.name.slice(8,10));
navigateToURL(new URLRequest(url_list[s_no]), url_target_list[s_no]);
}

stop();