Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-07-2005, 13:54   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 24
movieclips nach grösse ordnen

hallo, ich habe folgendes problem: ich habe ein array "name" mit 200 ländernamen und ein array "flaeche" mit der fläche der länder in der gleichen reihenfolge, wie die namen. über attachMovie platziere ich 200 movieclips. nun möchte ich jedem land eine variable zuordnen, die ihm sagt, welche position es in der absteigenden hierarchie der flächen inne hält. d.h. das grösste land soll die variable "position = 1" erhalten und das kleinste land die variable "position = 200". was ist die beste methode, um dies zu tun? was macht man, wenn zwei länder die gleiche fläche haben? vielen dank!

ActionScript:
  1. // flash 6 kann noch kein .sort(Array.NUMERIC) deshalb über einen zwischenschritt:
  2. function numerisch(a,b) {
  3.         return (a>b);
  4. }
  5. var flaeche_geordnet = flaeche;
  6. flaeche_geordnet.sort(numerisch);
  7. flaeche_geordnet.reverse();
  8. trace(flaeche_geordnet);
  9.  
  10. for (i=0; i<name.length; i++) {
  11.         _root.attachMovie ("country", "country"+i, i);
  12.         _root["country"+i].name = name[i];
  13.         _root["country"+i].flaeche = flaeche[i];
  14. }
diplomkandidat ist offline   Mit Zitat antworten
Alt 22-07-2005, 13:59   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Nur ein kleiner Tipp...
PHP-Code:
function numerisch(a,b) {
        return (
a<b);
}
var 
flaeche_geordnet flaeche;
flaeche_geordnet.sort(numerisch); 
Da kannste dir das reverse sparen.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 22-07-2005, 15:55   #3 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Wenn du die Flächen sortierst, stimmt die Reihenfolge aber nicht mehr mit den Namen überein, oder? Vielleicht ist ein Object besser, das Fläche und Name aufnehmen kann. Wenn zwei Flächen gleich sind, würde ich normalerweise alphabetisch nach Name sortieren.
mfg. r.
bokel ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:08   #4 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 24
wie gross darf ein array sein?

das ist genau das problem. die movieclips müssen ihren namen und ihre fläche behalten. deswegen dachte ich man könnte eine zusätzliche variable "position" machen, welche die clips nach absteigender grösse von "flaeche" durchnumeriert. ich probiere jetzt aber mit einem multidimensionalen array, welches sowohl "name" als auch "flaeche" beeinhaltet. die frage ist nun, wie gross so ein array werden. ich habe noch andere variablen, wie z.b. bruttosozialprodukt, bevölkerung, auslandschulden. evt. kommen noch mehr dazu. aber das array würde so schon jetzt 1000 einträge beeinhalten. ist das zu gross?
vielen dank

Geändert von diplomkandidat (22-07-2005 um 16:10 Uhr)
diplomkandidat ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:09   #5 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
ja, objects wären leichter handzuhaben.

in etwa:
ActionScript:
  1. laender = [{name:"Österreich",flaeche:12345},{name:"Djibuti",flaeche:54321},...];
  2.  
  3. laender.sort(function(a,b){return a.flaeche>b.flaeche;});
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:11   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Nein, das ist nicht zu gross. Anstatt multidimensionalem Array würde ich aber dringend zu einem Objekt raten:

laender = [
{name:"deutschland",flaeche:1000,bszp:80},
{name:"italien",flaeche:200,bszp:10},
{name:"frankreich",flaeche:2000,bszp:70}];

Edit: zu spät

mfg. r

Geändert von bokel (22-07-2005 um 16:12 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:21   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 24
wie gross darf so ein object sein, ohne dass es problematisch wird? sind 1000 bis 1500 werte o.k.?

danke!
diplomkandidat ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:50   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 24
vielen dank!
diplomkandidat ist offline   Mit Zitat antworten
Alt 22-07-2005, 20:24   #9 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
Zitat:
Zitat von bokel
Nein, das ist nicht zu gross. Anstatt multidimensionalem Array würde ich aber dringend zu einem Objekt raten:

laender = [
{name:"deutschland",flaeche:1000,bszp:80},
{name:"italien",flaeche:200,bszp:10},
{name:"frankreich",flaeche:2000,bszp:70}];

Edit: zu spät

mfg. r
@bokel: Kleine Frage noch:
Bringt es performancemäßig etwas, wenn man anstatt einzelner Objekte
Objektinstanzen aus einer Klasse erstellt?
Also z.b. so:
ActionScript:
  1. land = function (name, flaeche) {
  2.     this.name=name, this.flaeche=flaeche;
  3. };
  4. laender = [new land("deutschland", 1800), new land("frankreich", 2000)];
__________________
Gruß, Jey!
jeypack ist offline   Mit Zitat antworten
Alt 22-07-2005, 20:34   #10 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Performancemässig macht es keinen Unterschied. Wenn du micht fragst, würde ich eine Klasse nehmen, aber ich wollte dich nicht überfordern

mfg. r.
bokel ist offline   Mit Zitat antworten
Alt 24-07-2005, 16:32   #11 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 24
o.k. ich bin wirklich etwas überfordert: objekte und klassen sind ziemlich neu für mich. deshalb: wie kann ich automatisch objektinstanzen aus einer klasse generieren? so wie ich es momentan versuche, geht es nicht. ich hätte gerne instanzen von land, welche land0, land1, land2 etc. heissen, und in einem array mit dem namen countries gespeichert werden...

vielen dank!

ActionScript:
  1. var name = ["Afghanistan", "Albania", "Algeria", etc.]
  2. var area = [647500, 28748, 2381740, etc.]
  3. var gdp = [4707812000, 6124225000, 66530140000, etc.]
  4. var population = [29928987, 3169064, 31832610, etc.]
  5. var debtstock = [NaN, 1482, 23386, etc.]
  6. var xpos = [675, 533, 478, etc.]
  7. var ypos = [253, 226, 275, etc.]
  8.  
  9. var countries = new Array();
  10.  
  11. function Land (name, area, gdp, population, debtstock, xpos, ypos) {
  12.     this.name = name;
  13.     this.area = area;
  14.     this.gdp = gdp;
  15.     this.population = population;
  16.     this.debtstock = debtstock;
  17.     this.xpos = xpos;
  18.     this.ypos = ypos;
  19. }
  20.  
  21. for (i=0; i<name.length; i++) {
  22.     Land[i] = new Land (name[i], area[i], gdp[i], population[i], debtstock[i], xpos[i], ypos[i]);
  23.     countries.push(Land[i]);
  24. }
diplomkandidat ist offline   Mit Zitat antworten
Alt 24-07-2005, 16:49   #12 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Da schreibste dir ne Klasse "Land".
Beim Veröffentlichen deines Flashfilms musste aber ActionScript 2.0 einstellen und die Klasse musste im gleichem Verzeichnis wie deine Datei packen und "Land.as" nennen.
Die sehe dann so aus...
PHP-Code:
class Land{

     public var 
name;
     public var 
area;
     public var 
gdp;
     public var 
population;
     public var 
debtstock;
     public var 
xpos;
     public var 
ypos;
    
    public function 
Land nameareagdppopulationdebtstockxposypos) {
        
this.name name;
        
this.area area;
        
this.gdp gdp;
        
this.population population;
        
this.debtstock debtstock;
        
this.xpos xpos;
        
this.ypos ypos;
    }

Und dann kannste auch deinen Script so verwenden.
PHP-Code:
var name = [ "Afghanistan""Albania""Algeria" ];
var 
area = [ 647500287482381740 ];
var 
gdp = [ 4707812000612422500066530140000 ];
var 
population = [ 29928987316906431832610 ];
var 
debtstock = [ NaN148223386 ];
var 
xpos = [ 675533478 ];
var 
ypos = [ 253226275 ];

var 
countries = new Array();

for (var 
i=0name.lengthi++) {
        
Land[i] = new Land (name[i], area[i], gdp[i], population[i], debtstock[i], xpos[i], ypos[i]);
        
countries.pushLand[i] );

__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 24-07-2005, 16:49   #13 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hallo!
Ich weiß gereade nicht, ob ich dich richtig verstanden habe:
ActionScript:
  1. var namen = ["Afghanistan", "Albania", "Algeria"];
  2. var area = [647500, 28748, 23817409];
  3. var gdp = [4707812000, 6124225000, 66530140000];
  4. var population = [29928987, 3169064, 31832610];
  5. var debtstock = [NaN, 1482, 23386];
  6. var xpos = [675, 533, 478];
  7. var ypos = [253, 226, 275];
  8. var countries = [];
  9. //
  10. for (i=0; i<namen.length; i++) {
  11.     countries[i] = [];
  12.     countries[i].push(namen[i], area[i], gdp[i], population[i], debtstock[i], xpos[i], ypos[i]);
  13. }
  14. //
  15. trace(countries[2][0]);
  16. //
  17. trace(countries[2]);
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 24-07-2005, 17:02   #14 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
Zitat:
Zitat von diplomkandidat
o.k. ich bin wirklich etwas überfordert: objekte und klassen sind ziemlich neu für mich. deshalb: wie kann ich automatisch objektinstanzen aus einer klasse generieren? so wie ich es momentan versuche, geht es nicht. ich hätte gerne instanzen von land, welche land0, land1, land2 etc. heissen, und in einem array mit dem namen countries gespeichert werden...

vielen dank!
Ich würde die Objektinstanzen direkt in das Array pushen.

ActionScript:
  1. for (var i = 0; i<name.length; i++) {
  2.     countries.push(new Land(name[i], area[i], gdp[i], population[i], debtstock[i], xpos[i], ypos[i]));
  3. }
Dann kannst du über
ActionScript:
  1. countries[index]
darauf zugreifen.
__________________
Gruß, Jey!
jeypack ist offline   Mit Zitat antworten
Alt 24-07-2005, 18:16   #15 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 24
Zitat:
Zitat von jeypack
Ich würde die Objektinstanzen direkt in das Array pushen.

ActionScript:
  1. for (var i = 0; i<name.length; i++) {
  2.     countries.push(new Land(name[i], area[i], gdp[i], population[i], debtstock[i], xpos[i], ypos[i]));
  3. }
Dann kannst du über
ActionScript:
  1. countries[index]
darauf zugreifen.
o.k. nun habe ich aber ein weiteres problem: ich möchte movieclips haben, welche die properties von countries haben. bis jetzt habe ich das so gemacht:
ActionScript:
  1. for(i=0; i<name.length; i++) {
  2.         _root.attachMovie ("country", "country"+i, i);
  3.         _root["country"+i]._x = countries[i].xpos;
  4.         _root["country"+i]._y = countries[i].ypos;
  5.         _root["country"+i]._width = Math.sqrt(countries[i].area);
  6.         _root["country"+i]._height = Math.sqrt(countries[i].area);
  7. }
wenn ich nun die länder nach der fläche ordenen will, mache ich:
ActionScript:
  1. countries.sort(function(a,b){return a.area<b.area;});
dann stimmt aber die zuordnung:
ActionScript:
  1. _root["country"+i]._width = Math.sqrt(countries[i].area);
  2. _root["country"+i]._height = Math.sqrt(countries[i].area);
nicht mehr...

gibt es eine möglichkeit aus jedem Land direkt ein MovieClip zu generieren, welche dann die properties von Land haben und auf die ich immer noch über countries zugreifen kann, um sie nach den verschiedenen properties zu ordnen?

ich hoff das versteht jetzt irgendjemand. ich bin zumindest schon ziemlich verwirrt...

vielen dank!
diplomkandidat ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele