Flashhilfe.de - Flash Community

PV3D: For Schleifen Problem [Flash 10]

Forum > Flash 3D > PV3D: For Schleifen Problem

 


AntwortenRegistrieren Seite1  

 28.08.2009, 22:08 
Benutzerbild von coarsy
Beiträge: 272
Wohnort: Frankfurt
Registriert: Nov 2005

PV3D: For Schleifen Problem
Hi zusammen,

ich mal wieder mit einem neuen Problem:

Ich durchlaufe eine XML-Datei in welcher die Längen- und Breitengrade
(Langitude + Latidue) stehen und ausgelesen werden. Mit diesen
Daten berechne ich die Positionierung auf meinem Globus. Soweit so gut,
die Schleife wird soweit durchlaufen, dennoch wird nur ein einziger Marker
auf dem Globus platziert. Irgendwie habe ich das Objektprinzip noch
nicht so ganz durchschaut, weis scheint...

Hier also mal meine Schleife, wie gesagt, die Längen- und Breitengrade werden
der Reihe nach in die entsprechenden Variablen geschreiben, funktioniert soweit:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
      private function getLocationGeo(country_name:String):void {
               
         var i:Number;      
         
         FlashConnect.trace (loadedXML.countries.country.(@name == country_name ).locations.location.length());
         
            for (i = 0; i < loadedXML.countries.country.(@name == country_name ).locations.location.length(); i++) {
            
            var marker:Marker = new Marker();
            
            FlashConnect.trace(marker);
            
            var longitude:Number =  (loadedXML.countries[0].country.(@name == country_name ).locations.location[i].longitude.text());
            var latitude:Number =  (loadedXML.countries[0].country.(@name == country_name ).locations.location[i].latitude.text());
         
            placeMarker (marker, latitude, longitude);
            
            }         
      }


Irgendwie is an dieser Stelle was faul,
da nur ein einziger Marker auf dem Globus platziert wird:

ActionScript:
1placeMarker (marker, latitude, longitude);


Das Trace von marker gibt folgendes aus:

ActionScript:
1
2
3
32: x:0 y:0 z:0
35: x:0 y:0 z:0
38: x:0 y:0 z:0


Hat irgendwer ne Idee, was ich hier grundlegend falsch mache?
Vielleicht einfach mal ne Nacht drüber schlafen...

Besten Dank schon mal für Eure Hilfe und viele Grüße vom Chris
 29.08.2009, 09:58Re1
Benutzerbild von springerFlashhilfe.de Moderator
Beiträge: 4906
Wohnort: zuhaus
Registriert: Apr 2004

ActionScript:
1loadedXML.countries[0].country.(@name == country_name )


das ergibt eine liste. du musst also noch
ActionScript:
1loadedXML.countries[0].country.(@name == country_name )[0].locations......
anhängen...

zudem solltest du die werte auch als number casten...

ActionScript:
1var latitude:NumberNumber(loadedXML.countries[0].country.(@name == country_name ).locations.location[i].latitude.text());


so wies aussieht machst du schon mehrere marker, allerdings alle am selben punkt....
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
 29.08.2009, 17:14Re2
Benutzerbild von coarsy
Beiträge: 272
Wohnort: Frankfurt
Registriert: Nov 2005

Themenautor/in

Hi Mister Herr Springer,

erstmal vielen Dank für Deine Antwort. Die 3 entsprechenden Longitudes and Latitudes wurden bereits
richtig ausgeben. Ein Trace auf die Marker Objects als auch auf die XML-Werte, also auch auf die x, y, z Koords ergibt folgendes Ergebnis:

Mymarcer Objects: 32: x:0 y:0 z:0
Longitude: 30.5212101
Latitude: 50.3213101
x: -73.82365402697923
y: -20.50254451006131
z: 92.35644955669218
marker vector: x:-73.82 y:92.36 z:-20.5
Mymarcer Objects: 35: x:0 y:0 z:0
Longitude: 30.1212101
Latitude: 50.3213101
x: -73.96498859660069
y: -19.986662732604987
z: 92.35644955669218
marker vector: x:-73.96 y:92.36 z:-19.99
Mymarcer Objects: 38: x:0 y:0 z:0
Longitude: 29.8212101
Latitude: 50.3213101
x: -74.06862414601663
y: -19.599110755294326
z: 92.35644955669218
marker vector: x:-74.07 y:92.36 z:-19.6

Hier auch nochmal die 3 Funktionen in meiner Main.as, damit das was geschehen soll auch besser nachvollzogen werden kann.
Irgendwo ist hier der Hase begraben...

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
private function getLocationGeo(country_name:String):void {
               
         var i:Number;      
         
            FlashConnect.trace ("Available Geocords: " + loadedXML.countries.country.(@name == country_name ).locations.location.length());
         
            for (i = 0; i < loadedXML.countries.country.(@name == country_name )[0].locations.location.length(); i++) {
            
            var marker:Marker = new Marker() as Marker;
            
            FlashConnect.trace("Mymarcer Objects: " + marker);
            
            var longitude:NumberNumber(loadedXML.countries[0].country.(@name == country_name )[0].locations.location[i].longitude.text());
            var latitude:NumberNumber(loadedXML.countries[0].country.(@name == country_name )[0].locations.location[i].latitude.text());
            
            FlashConnect.trace ("Longitude: " + Number(loadedXML.countries[0].country.(@name == country_name )[0].locations.location[i].longitude.text()));
            FlashConnect.trace ("Latitude: " + Number(loadedXML.countries[0].country.(@name == country_name )[0].locations.location[i].latitude.text()));
            
            placeMarker (marker, latitude, longitude);   
            
            }   
         
      }
      
      // building the location submenu of each country clicked
      private function getCountryhandler(evt:MouseEvent):void {
         FlashConnect.trace ("TARGET: " + evt.currentTarget.id);
         
         var i:Number;
         
         addChild (submenu_mc);
         submenu_mc.alpha = 0;
         
         trace("LENGTH OF LOCATIONS: " + loadedXML.countries.country.(@name == evt.currentTarget.id ).locations.location.length());
            
            for (i = 0; i < loadedXML.countries.country.(@name == evt.currentTarget.id ).locations.location.length(); i++) {
            // trace (loadedXML.countries[0].country.(@name == evt.currentTarget.id ).locations.location[i].name.text());
            
            var subbutton_txt:String = loadedXML.countries[0].country.(@name == evt.currentTarget.id ).locations.location[i].name.text();
            
               submenu_btn = new MyButton("> " + subbutton_txt.toUpperCase());
               submenu_btn.y = (i* 28) + 50;
               submenu_btn.x = 10;               // this.country_btn.addEventListener(MouseEvent.CLICK, getCountryhandler);
               submenu_mc.addChild (submenu_btn);
            
            }

            submenu_mc.x = evt.currentTarget.x + 260;
            submenu_mc.y = evt.currentTarget.y - 30;
            Tweener.addTween( submenu_mc, { alpha: 1.0, time: 1.5 } );
            
         }
         
      protected function placeMarker( marker:Marker, latitude:Number, longitude:Number ):void
      {
         //Translate the geo coordinates to 3D coordinates.
         var markerVector:Number3D = translateGeoCoords( latitude, longitude, globe.radius );
         
         FlashConnect.trace("marker vector: " + markerVector);
         
         marker.x = markerVector.x;
         marker.y = markerVector.y;
         marker.z = markerVector.z;
         
         //Align the marker with the globe's surface.
         marker.lookAt( DisplayObject3D.ZERO );
         
         globe.addChild( marker );
         
         // marker.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK, markerClickHandler );
      }
      
      private function translateGeoCoords( latitude:Number, longitude:Number, radius:Number ):Number3D
      {
                  
         //Convert latitude and longitude to radians.
         latitude = Math.PI * latitude / 180;
         longitude = Math.PI * longitude / 180;
         
         //Adjust latitude and longitude by radians.
         latitude -= ( latitudeDegreeOffset * ( Math.PI/180 ) ); // offset latitude by n degrees (in radians).
         longitude -= ( longitudeDegreeOffset * ( Math.PI/180 ) ); // offset longitude by n degrees (in radians).
         
         //Spherical to cartesian coordinate conversion formula.
         var x:Number = radius * Math.sin( latitude ) * Math.cos( longitude );
         var y:Number = radius * Math.sin( latitude ) * Math.sin( longitude );
         var z:Number = radius * Math.cos( latitude );
         
         FlashConnect.trace("x: " + x);
         FlashConnect.trace("y: " + y);         
         FlashConnect.trace("z: " + z);         
         
         //Switch z and y (since z is forward) (see the right-hand rule).
         return new Number3D( x, z, y );
      }      


Vielleicht hast Du ja noch ne Idee, weshalb nur ein einziger Marker ausgegeben wird, obwohl die Schleife 3-Mal durchlaufen wird.

Ich wünsche ein schönes Wochenende mit den besten Grüßen,

Chris
 
nicht sichtbar bei eingeloggten Mitgliedern
 30.08.2009, 11:31Re3
Benutzerbild von coarsy
Beiträge: 272
Wohnort: Frankfurt
Registriert: Nov 2005

Themenautor/in

Sodalla, hab jetzt noch ein wenig rumgetüftelt und nun funktionierts auch. Und zwar so:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
      private function getLocationGeo(country_name:String):void {
               
         var i:Number;      
         
            FlashConnect.trace ("Available Geocords: " + loadedXML.countries.country.(@name == country_name ).locations.location.length());
         
            for (i = 0; i < loadedXML.countries.country.(@name == country_name ).locations.location.length(); i++) {            
            
            var marker:Marker = new Marker();
            
            var longitude:NumberNumber(loadedXML.countries[0].country.(@name == country_name ).locations.location[i].longitude.text());
            var latitude:NumberNumber(loadedXML.countries[0].country.(@name == country_name ).locations.location[i].latitude.text());
            
            FlashConnect.trace ("Longitude: " + Number(loadedXML.countries[0].country.(@name == country_name ).locations.location[i].longitude.text()));
            FlashConnect.trace ("Latitude: " + Number(loadedXML.countries[0].country.(@name == country_name ).locations.location[i].latitude.text()));
            
            placeMarker (marker, latitude, longitude);   
            
            }
      }


Hab ehrlich gesagt keine Ahnung, was nun anderst sein soll...

Viele Grüße und ein schönes Wochenende vom Chris
 
Themen
Ähnliche Beiträge zum Thema
 

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.
Partner Webseiten: DesignerInAction.de   Designnation.de   Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   PSD-Tutorials.de   Tutorials.de

Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2012 Sebastian Wichmann - Flashhilfe.de