| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Nov 2010
Beiträge: 3
| Problem mit Eventhandling bei Papervision - wer kann helfen?
Hallo zusammen! Ich bin ein ziemlicher Actionscript-Trottel und hab mich sozusagen gezwungenermaßen jetzt eingearbeitet. Ich habe einen rotierbaren 3D-Scatterplot mit Papervision erstellt (natürlich mit Hilfe zahlreicher Tutorials... ;-) bei dem die Datenpunkte aus einem Textfile eingelesen werden. ( Format des Textfiles: x,y,z,farbe,ID des Datenpunktes;x2,y2,z2,Farbe2;ID2 usw. ...) Das klappt auch soweit alles ganz gut, allerdings soll da jetzt noch eine Funktion rein, dass man die einzelnen Datenpunkte (via Sphere dargestellt) anklicken kann und dann wird das ganze zurück an PHP übergeben. Aber egal was für einen EventListener ich auf die Punkte lege, es passiert nix! Eine Fehlermeldung beim Debuggen bekomme ich aber auch nicht. Hat jemand eine Idee? Damit ihr wisst was ich meine hier der komplette Code. Die Stellen wo die Eventlistener sind habe ich Kenntlich gemacht... Code: package {
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.navigateToURL;
import flash.net.URLLoaderDataFormat;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import org.papervision3d.core.geom.Lines3D;
import org.papervision3d.core.geom.renderables.Line3D;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.special.LineMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.view.BasicView;
import org.papervision3d.events.InteractiveScene3DEvent;
[SWF(backgroundColor="#C2C2C2",width="600",height="600")]
public class Line3DChart_XtraSmall extends BasicView
{
public var chartContainer:DisplayObject3D;
public var chart:DisplayObject3D;
private var dataPoints : Array;
private var color:ColorMaterial;
private static const RADIUS : int = 15;
private static const MAX_SIZE : int = 600;
private static const AXIS_SIZE : int = 400;
private static const AXIS_CORRFACT : int = 400;
//Hiermit bekomme ich die Daten aus dem Textfile geladen...
public var loader:URLLoader;
public var Kunden:Array;
public function Line3DChart_XtraSmall()
{
super(stage.stageWidth, stage.stageHeight, false, true);
init();
}
private function init():void
{
chartContainer = new DisplayObject3D("Chart Container");
chart = new DisplayObject3D("Chart");
chartContainer.rotationY=-15;
chartContainer.rotationX=-15;
dataPoints = new Array();
var defaultMaterial : LineMaterial = new LineMaterial(0xFFFFFF, .1);
var xAxisMaterial : LineMaterial = new LineMaterial( 0x3299FF, .75 );
var yAxisMaterial : LineMaterial = new LineMaterial( 0xFF00FF, .75 );
var zAxisMaterial : LineMaterial = new LineMaterial( 0xFFFFFF, .75 );
var axes : Lines3D = new Lines3D( defaultMaterial, "Axes" );
axes.addLine( new Line3D( axes, xAxisMaterial, 2, new Vertex3D( -AXIS_SIZE,-AXIS_CORRFACT,-AXIS_CORRFACT ), new Vertex3D( AXIS_SIZE,-AXIS_CORRFACT,-AXIS_CORRFACT ) ));
axes.addLine( new Line3D( axes, yAxisMaterial, 2, new Vertex3D( -AXIS_CORRFACT,-AXIS_SIZE,-AXIS_CORRFACT ), new Vertex3D( -AXIS_CORRFACT,AXIS_SIZE,-AXIS_CORRFACT ) ));
axes.addLine( new Line3D( axes, zAxisMaterial, 2, new Vertex3D( -AXIS_CORRFACT,-AXIS_CORRFACT,-AXIS_SIZE ), new Vertex3D( -AXIS_CORRFACT,-AXIS_CORRFACT,AXIS_SIZE ) ));
axes.addLine( new Line3D( axes, xAxisMaterial, 2, new Vertex3D( -AXIS_SIZE,-AXIS_CORRFACT,AXIS_CORRFACT ), new Vertex3D( AXIS_SIZE,-AXIS_CORRFACT,AXIS_CORRFACT ) ));
axes.addLine( new Line3D( axes, yAxisMaterial, 2, new Vertex3D( AXIS_CORRFACT,-AXIS_SIZE,AXIS_CORRFACT ), new Vertex3D( AXIS_CORRFACT,AXIS_SIZE,AXIS_CORRFACT ) ));
axes.addLine( new Line3D( axes, zAxisMaterial, 2, new Vertex3D( AXIS_CORRFACT,-AXIS_CORRFACT,-AXIS_SIZE ), new Vertex3D( AXIS_CORRFACT,-AXIS_CORRFACT,AXIS_SIZE ) ));
axes.addLine( new Line3D( axes, zAxisMaterial, 2, new Vertex3D( -AXIS_CORRFACT,AXIS_CORRFACT,-AXIS_SIZE ), new Vertex3D( -AXIS_CORRFACT,AXIS_CORRFACT,AXIS_SIZE ) ));
axes.addLine( new Line3D( axes, yAxisMaterial, 2, new Vertex3D( -AXIS_CORRFACT,-AXIS_SIZE,AXIS_CORRFACT ), new Vertex3D( -AXIS_CORRFACT,AXIS_SIZE,AXIS_CORRFACT ) )); var lines : Lines3D = new Lines3D( defaultMaterial, "Lines" );
axes.addLine( new Line3D( axes, xAxisMaterial, 2, new Vertex3D( -AXIS_SIZE,AXIS_CORRFACT,AXIS_CORRFACT ), new Vertex3D( AXIS_SIZE,AXIS_CORRFACT,AXIS_CORRFACT ) ));
chart.addChild( axes );
chart.addChild( lines );
var lastVertex : Vertex3D;
//Daten reinladen
loadTextFile('tempData.txt');
trace(Kunden);
chartContainer.addChild(chart);
scene.addChild(chartContainer);
singleRender();
stage.addEventListener(KeyboardEvent.KEY_DOWN, pfeiltasteDown);
}
private function loadTextFile(path:String):void {
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE,makeArray);
loader.load(new URLRequest(path));
trace(Kunden);
}
private function makeArray(e:Event):void {
var dictionaryText:String=String(e.target.data);
Kunden=dictionaryText.split(";");
trace(Kunden[0]);
var currentVertex : Vertex3D = new Vertex3D();
var itemArray:Array = new Array();
for each (var num in Kunden)
{
currentVertex = new Vertex3D();
var a:Array = num.split(/,/); // Daten aus dem Textfile a == ["x","y","z","Farbe","PunktID"]
currentVertex.x = a[0]-AXIS_CORRFACT;
currentVertex.y = a[1]-AXIS_CORRFACT;
currentVertex.z = a[2]-AXIS_CORRFACT;
var dataMaterial : ColorMaterial = new ColorMaterial( a[3], .65, false );
if (a[3]=="0x33CCFF")
{
var point : Sphere = new Sphere( dataMaterial, RADIUS*2 );
}
else
{
var point : Sphere = new Sphere( dataMaterial, RADIUS );
}
point.x = currentVertex.x;
point.y = currentVertex.y;
point.z = currentVertex.z;
point.myTargetID = a[4];
chart.addChild( point );
itemArray.push(point);
}
// ############################################################### HIER KOMMEN DIE EVENTS UM DIE ES GEHT!!!
for (var i:String in itemArray)
{
itemArray[i].addEventListener(MouseEvent.MOUSE_DOWN, openNewURL); //funktioniert nicht, openNewURL wird nicht aufgerufen
itemArray[i].addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, openNewURL); //funktioniert auch nicht, openNewURL wird nicht aufgerufen
trace(itemArray[i].myTargetID); //gibt die korrekte ID aus
}
singleRender();
}
public function pfeiltasteDown(evt:KeyboardEvent):void {
switch (evt.keyCode) {
case Keyboard.DOWN :
chart.rotationX-=5;
break;
case Keyboard.UP :
chart.rotationX+=5;
break;
case Keyboard.LEFT :
chart.rotationY+=5;
break;
case Keyboard.RIGHT :
chart.rotationY-=5;
break;
default :
}
singleRender();
}
// die funktion soll aufgerufen werden beim click
public function openNewURL(event:MouseEvent):void
{
trace(event.currentTarget.myTargetID);
var pageURL:URLRequest = new URLRequest("distribute.php?target=" + event.currentTarget.myTargetID);
navigateToURL(pageURL, "_self");
}
}
} VG, simeon |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Nov 2010
Beiträge: 3
| Problemverdeutlichung
Um das ganze für euch zugänglicher zu machen, hier nochmal der Kern meines Problems: Ich erzeuge mit Code: var point : Sphere = new Sphere( dataMaterial, RADIUS ); Code: chart.addChild( point ); Code: itemArray.push(point); Code: for (var i:String in itemArray)
{
itemArray[i].addEventListener(MouseEvent.MOUSE_DOWN, openNewURL); //funktioniert nicht, openNewURL wird nicht aufgerufen
itemArray[i].addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, openNewURL); //funktioniert auch nicht, openNewURL wird nicht aufgerufen
trace(itemArray[i].myTargetID); //gibt die korrekte ID aus
} Kompilieren geht auch ohne Fehlermeldung, aber wenn ich auf die Punkte klicke passiert gar nichts... Und zwar weder beim normalen MouseEvent noch beim InteractiveScene3DEvent, ich hab beides ausprobiert. So, hoffe das hat die Frage etwas konkretisiert/verdeutlicht. Der komplette Code steht ja im Post oben... Wäre euch echt für Hilfe Dankbar, weiß nämlich nicht mehr weiter. Danke und VG, Simeon |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Nov 2010
Beiträge: 3
| Problem gelöst!
Ich konnte das Problem selber nach einigem suchen lösen! Für alle die sowas auch mal haben hier die Lösung: Um die Sphere anklickbar zu machen muss dem verwendeten Material die Eigenschaft interactive mitgegeben werden. Also z.B. Code: var dataMaterial : ColorMaterial = new ColorMaterial( Farbe, .65, false ); dataMaterial.interactive = true; // Das war es was fehlte! var point : Sphere = new Sphere( dataMaterial, RADIUS ); |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| events, papervision3d |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Movie Problem, kann jemand helfen?? | aalecs | Flash 8 | 1 | 30-03-2006 09:35 |
| Problem mit Animation! kann wer helfen? | corvin-natas | Flash MX 2004 | 1 | 26-09-2004 11:42 |
| setInterval Problem wer kann helfen?? | Rack | ActionScript 1 | 8 | 25-09-2004 14:13 |
| servus wer kann mir helfen hab nen problem | Grisuuu | ActionScript 1 | 2 | 10-10-2003 12:30 |
| kleines problem wer kann helfen | Steelman | Flash 4 und Flash 5 | 3 | 09-09-2002 15:42 |