Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-09-2004, 16:13   #1 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
Arrays Dynamisch erstellen, die ich mit schleife auslesen kann

Ich hab folendes Problem ich bastle gerad an einer art "map" editor (für ein rollenspiel also das mir strings schreibt die ich dann wieder auslesen kann aus einer text datei um sie als Karte zu verwenden) dieser editor soll mir mit einem mouse listener angibt auf welchen mc ich gklickt habe (ich errechne das aus der x und y position der mouse) , das klappt auch soweit

nun möchte ich für jede "Linie" also y position ein array haben in dem ich einen wert speichern soll (in diesem fall _root.mcgoto(hier noch statisch angegeben)

dieses array möchte ich dynamisch erstellen (es soll dann nachher mit einer schleife ausgelesen werden dir werte durch , getrennt werden und ausgetracert werden so das ich damit eine txt datei beschreiben kann) soweit bin ich allerdings noch nicht soll nur dem verständniss dienen

das Problem ist das ich die Array nicht dynmaisch erstellen kann bzw nicht einmal in einer schleife erstellen kann und sie dann im mouselistener weiter verwenden kann siehe folgende beispiele:


ActionScript:
  1. _root.mcgoto=1;// die variable die im array feld zu speichern ist
  2. for (i=1; i<100; i++){
  3. this["yeditarray"+Number(i)] = [];  // hier deffiniere ich die arrays    
  4.                      }
  5. bestimmterListener = new Object();
  6. bestimmterListener.onMouseDown = function () {
  7. trace(_xmouse+"  "+_ymouse);
  8. xarrraynumber=Number(Math.floor((_xmouse-Number(_root.bewegungx))/25))+1;// festlegen des array feldes
  9. yarrraynumber=Number(Math.floor((_ymouse-Number(_root.bewegungy))/25))+1;// festlegen welches array (zeile nacheher) beschrieben werden soll
  10. this["yeditarray"+Number(yarrraynumber)][Number(xarrraynumber)]=_root.mcgoto;
  11. trace(this["yeditarray"+Number(yarrraynumber)][Number(xarrraynumber)]+" yr="+yarrraynumber+" xr="+xarrraynumber);
  12. trace(yeditarray1[1])
  13. };
  14. Mouse.addListener(bestimmterListener);

^^^^^^^das funktioniert nicht gibt mir zum beispiel zurück:

16 19 // wären x und y position der mouse und wäre richtig
undefined yr=1 xr=1 // wäre undefined für den inhalt des arrayfeldes aber yr und xr (y sowie -koordinate des angesprochenen mc´s) sind korekt
undefined // ich habe wie oben zu sehen auf den mc geklickt der auf koordinaten position 1,1 liegt also müsste es ein array mit dem namen yeditarray1 geben!

_______________________________________

sooo und das hier funktioniert nur teileweise:


ActionScript:
  1. _root.mcgoto=1;// die variable die im array feld zu speichern ist
  2. bestimmterListener = new Object();
  3. bestimmterListener.onMouseDown = function () {
  4. trace(_xmouse+"  "+_ymouse);
  5. xarrraynumber=Number(Math.floor((_xmouse-Number(_root.bewegungx))/25))+1;// festlegen des array feldes
  6. yarrraynumber=Number(Math.floor((_ymouse-Number(_root.bewegungy))/25))+1;// festlegen welches array (zeile nacheher) beschrieben werden soll
  7. this["yeditarray"+Number(yarrraynumber)] = []; // hier deffiniere ich das array als solches
  8. this["yeditarray"+Number(yarrraynumber)][Number(xarrraynumber)]=_root.mcgoto;
  9. trace(this["yeditarray"+Number(yarrraynumber)][Number(xarrraynumber)]+" yr="+yarrraynumber+" xr="+xarrraynumber);
  10. trace(yeditarray1[1])
  11. };
  12. Mouse.addListener(bestimmterListener);

rückgabe ist

16 19 // wieder richtig für x und y der mouse position
1 yr=1 xr=1 // wert 1 (also der wert von _root.mcgoto wurde eingetragen und die koordinaten richtig errechnet
undefined // aber im yeditarray1[1] ist immer noch nix weil nicht vorhanden


da der mouse listener bei jedem neuen klick aufs neue die funktion aufruft kann ich das eh nicht so machen wie im letzten beispiel da er mir sonst jedesmal ein neues array zaubert , bzw das vorhanden "leert" (überschreibt) und alles vorherigen werte weg sind zumal ich auch noch die arrays nachher per for schleife weiter verwenden also in einen string schreiben will um so einen string zu erhalten den ich zusammen mit den anderen strings die aus den anderen arrays (yeditarray2, yeditarray3.... die auf selbe weise erstellt wurden) austracern lassen will um sie in eine txt datei zu kopieren.




ich hoffe man hat verstanden wo mein problem liegt und jemand weiss eine lösung

Gruss Sascha


EDIT: Ja ich hatte vorher alles ohne "Number" geht auch nicht!

Geändert von projecktx (21-09-2004 um 16:18 Uhr)
projecktx ist offline   Mit Zitat antworten
Alt 21-09-2004, 16:37   #2 (permalink)
Schläfer
 
Registriert seit: Oct 2003
Beiträge: 105
Code:
if (myArray == undefined) {
  myArray = new Array();
}
myArray.unshift(myData);
Unshift ist das Zauberwort, um Daten an ein Array anzuhängen

Was genau du allerdings willst, hab ich jetzt nicht so ganz verstanden. Scheint ein wenig verkompliziert zu sein

Gruß Pesse
__________________
Pesse's Blog
Pesse ist offline   Mit Zitat antworten
Alt 21-09-2004, 17:24   #3 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
hmm das hilft mir nicht wirklich weiter... also nochmal kurz zur erklärung:

Ich bastle gerad an einem rollenspiel..

aufbau der landschaft:

ich habe einen MC in dem sind 30 schlüsselbilder drin jedes schlüsselbild steht für einen untergrund bzw landchaft(wald, wiese, meer, strand...)

dieser mc ist 25 * 25 pixel gross und mein "spielfeld" ist 675 * 575 Pixel array gross daraus ergeben sich 27*23 sprites

ich Dupliziere nun diesen Movieclip mit duplicateMovieclip an die entsprechenden stellen so entsteht ein koortdinaten system

1,1|2,1|3,1|4,1....
1,2|2,2|3,2|4,2....
1,3|2,3|3,3|4,3....
1,4|2,4|3,4|4,4....
.
.
.

diese mc´s lasse ich dann durch ein zweidimensionales array (welche vorher durch daten aus eine textdatei die wie folgt aussieht)
zeile1,2,12,4,23,13,25........
zeile2,5,6,15,3,4,5,23......

undso weiter

gefüllt wurde zu einem bestimmten frame springen also würde für den obogen fall das mc 1,1 zu frame 2 springen das mc 2,1 zu frame 12, das mc 3,1 zu frame 4..... das mc 1,2 zu frame 5, das mc 2,2 zu frame 6 und so weiter

soweit klar????


da es aber müssig ist die "karte" der landschaft nur mit zahlen in einer textdatei zu erstellen (zumal das ganze spielfeld nachher auch noch 675*575 (also 25*25 jeweils volle spielfeldgrössen) also 575 strings mit jeweils 675 zahlen gross wäre... wollte ich einen MAPEDITOR erstellen um die karte zu zeichen ...

zu dem zweck würde in einer variable (hier _root.mcgoto) eine zahl gespeichert... (zu der der frame dann nachher springen soll)

also errechne ich mir aus der mousposition und dem teiler 25 die position des mcs das sich unter der mouse befindet wenn ich da drauf geklickt habe und nöchte nun die zahl die unter _root.mcgoto gespeichert ist in ein array eintragen, das benannt ist nach der y koordinate des mcs das sich beim klick unter der mouse befindet also im einfachsten beispiel:
ich klicke auf mc 1,1 also wäre der zu bschreibende array der array "yeditarray1" und darin das feld [1] ....

bei mc auf koordinate 2,1 waäre es ebenfalls array "yeditarray1" aber feld [2] das beschrieben werden müsste mit dem wert von _root.mcgoto

bei mc auf koordinate 1,2 wäre es jedoch array "yeditarra2" das beschrieben werden müsste und darin das feld [1]

sooo nun möchte ich diese dynamisch erstellten arrays nachher in jeweils einen string zurückverwandeln (per for schleife) und dies ganzen strings dann austracern lassen bzw in ein dynamisches textfeld ausgeben so das ich sie kopieren und dann in eine textfile einfügen kann um diese für das eigentliche spiel als kartenvorlage laden zu lassen, was dann oben angesprochene txt file wär :
also:

zeile1,2,12,4,23,13,25........ //inhalt von yeditarray1
zeile2,5,6,15,3,4,5,23...... //inhalt von yeditarray2

und so weiter


... puh ich hoffe nun ist es etwas klarer


daher hilft mir dein ansatz nicht weiter weil er zeigt mir nur wie ich ein array erstellen kann und was anhängen aber nicht wie ich "yeditarray"+YkoordinateDesMc´s erstelle so das ich nachher in einer schleife dieses auslesen kann

Gruss Sascha

Geändert von projecktx (21-09-2004 um 17:32 Uhr)
projecktx ist offline   Mit Zitat antworten
Alt 21-09-2004, 20:10   #4 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
PHP-Code:
arranzahl=2
yeditarray1
=[1,2,12,4,23,13,25]
yeditarray2=[2,5,6,15,3,4,5,23]

for(var 
i=1;i<=arranzahl;i++)
{
    
textfeld.text +='zeile'+i+','+_root['yeditarray'+i]+newline

ich hab nicht recht verstanden, ob die erstellung der arrays klar war.
wenn nicht, dann sags halt nochmal.

grz
warrantmaster ist offline   Mit Zitat antworten
Alt 21-09-2004, 21:49   #5 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
ich hab es jetzt mit nem 2 dimensionalen array gelöst...

weiss der geier wo der fehler war entweder hat ich nen denkfehler oder es liegt an dem listener event....

das problem war einfach das ich bei der ausgabe von

trace(this["yeditarray"+i][1]) //ergebniss 1

und bei

trace(yeditarray1[1]) //ergebniss undefined

hatte

wie gesagt habs nun anders gelöst... und funktioniert.....


thx für die mühe.... ich bastle da jetzt seit sonntag morgen dran (also an dem rollenspiel bzw der grafichen darstellung davon) und so langsam nerven mich die array geschichten




ne andere frage... ich lade mit LoadVars nun die neue liste rein
und lass das geladene objeckt splitten (4 oder 5 mal pro schleifendurchlauf) dies über 2 ineinanderliegenden schleifen

also

for (i=1; i<575; i++){
for (j=1; j<675; j++){
......


gibts da irgendwo ne begrenzung???

weil bei ca. 100 mal 50 funktioniert das ganze bei 575 * 675 bekomme ich die fehlermeldung

Der Computer wird durch die ausführung eines scripts in dem film verlangsamt, soll diese script weiter ausgeführt werden JA NEIN




Gruss Sascha
projecktx ist offline   Mit Zitat antworten
Alt 21-09-2004, 22:38   #6 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
deine schleifen sind falsch. da du eine feldgröße von 25x25 pixeln hast,
musst du auch nur 675/25 bzw 575/25 durchgänge machen.

btw:
ich würde dir empfehlen die feldgröße auf ein maß einzustellen das teilbar
bzw für rechner verträglicher ist, also 16, 32 etc. wenn du dir tile based
games ansiehst wirst du merken das das standard ist.

edit:
naja die schleifen sind bedingt falsch. aber auf jeden fall für flash 2 much.
__________________

Geändert von binary blade (21-09-2004 um 22:41 Uhr)
elias ist offline   Mit Zitat antworten
Alt 21-09-2004, 22:50   #7 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
nöl meine chleifen sind nicht falsh... ich kann mich ja in dem array noch bewegen...

also 675 und 575 sind schon richtig weil das GESAMMTE spielfeld 25*25 der ANGEZEIGTEN spielfeldgrösse ist...

und da 27(anzahl der sprites pro ANGEZEIGTEM spielfeld in x richtung)*25(anzahl der vollen ANGEZEIGTEN spielfelder in x richtung)ist ... ist 675 sprites im GESAMMTEN SPielfeld ist richtig

und 23(anzahl der sprites pro ANGEZEIGTEM spielfeld in y richtung)*25 (anzahl der vollen ANGEZEIGTEN spielfelder in y richtung wenn man sie aneinander legt) ist... für y 575 SPRITES im GESAMMTEN SPIELFELD richtig...


wenn ich sagen wir 100* 50 sprites in das array lade und dann splite ist es kein problem dann kann ich knapp 5 volle spielfelder in x richtung wamndern (1 sprite pro schrit) und ca 2 volle spielfelder in y richtung.. die datei wird geladen geplitet in das array eingetragen und es ist kein problem jeweils einen sprite in eine richtung zu gehen und sich so durch das 2 dimensionale array zu scrolen...

bei 675 * 575 sprites allerdings hängt sich das flash auf mit oben besagter fehlermneldung

nochmal zu den daten:
GRÖSSE eine Sprites : 25*25 Pixel
ANGEZEIGTE Spielfeld grösse : 27*23 sprites
ANZEIGE GRÖSSe auf dem monitor 675*575 PIXEL (675/25=27sprites und 575/25=23sprites)


GEPLANTE SPIELFELDGRÖSSE insgesamt 675*575 Sprites (und die liegen in einer text datei

ist die Textdatei nur 100*50 sprites gross wird alles geladen

bei 675 +575 fehlermeldung(...wir durch script velangsamt ....)

Gruss Sascha

Geändert von projecktx (21-09-2004 um 22:56 Uhr)
projecktx ist offline   Mit Zitat antworten
Alt 21-09-2004, 23:46   #8 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
ehm ja 675*575 Sprites (also MC's) sind wenn ich nicht wieder auf dem
schlauch stehe etwas mehr als 380.000 clips. wenn ich mir also in gedanken
rufe das flash schon bei der animation von mc's die ich an einer hand abzählen
kann in die knie geht, stimmt da schonmal was nicht.
lösung ist das du die clips anzeigst die zu sehen sind plus eine reihe für
jede richtung in die du gehen kannst. wenn du eine reihe weitergehst werden
die nächsten nachgeladen.

werf mal nen blick hier drauf, falls du's noch nicht kennst:
Gamepackage
__________________
elias ist offline   Mit Zitat antworten
Alt 22-09-2004, 00:47   #9 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
hmmmm ist immer noch niicht verständlich ich sehe es schon...

das Gesammte spielfeld hat 675*575 Sprites!!!!!!
Davon SICHTBAR sind jeweils nur 27*23 also öhm 621 wenn ich richtig gerechnet habe!!!

und dein avatar steht in der mitte vom spielfeld ... wird allerdings noch geändert wie gesagt arbeiote erst seit sonntag dran....

schaus dir selber an ich lads mal hoch....

KLICK-DEMOVERSION... schau selber wie ichs gemacht hab

dteuerung entweder mit den cursor tasten oder mit den pfeilen oben rechts

aber ich habs jetzt getestet ich bekomme jetzt ca 675*130 sprites gesammt hin... werd wohl auch nachladen müssen mal schauen wie ichs aufteile am besten nur in 5 horizontale spielebenen das wären dann 5 textfiles mal oben genannten 675*130.... ich habs auch schon bis 675*160 getestet ging auch aber nur einmal beim nächsten versuch mit 675*190 hing er sich wieder auf und danach musste ich bis 675*130 runter gehen bis es wieder ging...

wie auch immer schau halt selber mal...

die karte ist jetzt 680*130 Sprites gross....



sag mir mal ob du da nen ladefehler wegen script bekommst und wie der erste eindruck so ist... aber wie gesagt hab erst 2 tage was dran gebastelt mehr als rumlaufen und ner quadratischen landschaft ist noch nicht!

Gruss Sascha

Edit: ps das laden dauert etwas ... denke so 10 sekunden, hab noch keinen preloader drin


EDIT2: hopala hab gerad gesehen das ich da die version hoch geladen hab wo teilweise der Map editor schon eingebaut is... naja so kannste wenigstens ein bischen drin "Rummalen" na der baut dann nur 7 felder ich nenns mal "wiese" ein aber so kannste markieren und sehen das das ding wirklich 680*130 felder gross ist

Geändert von projecktx (22-09-2004 um 01:34 Uhr)
projecktx ist offline   Mit Zitat antworten
Alt 22-09-2004, 01:35   #10 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
kann ich nicht viel zu sagen, sieht alles noch ziemlich roh aus. was mir am
fiesesten ins auge sticht ist, das die tiles wenn ich nach oben gehe zu einem
wilden haufen werden. aber ich denke das kommt alles noch.

hab mal diesen loop hier getestet:

for (i=1; i<100000; i++) trace(i);

dabei kommt flash auf meinem 1ghz athlon mächtig ins schwitzen, wenn ich
mehr durchgänge mache krachts mal eben. möglicherweise hängts mit
der framerate zusammen. ka.

aber was ich noch gerne verstehen würde: versuchst du jetzt 675*575 clips
auf der bühne zu platzieren oder nur die sichtbaren?
__________________
elias ist offline   Mit Zitat antworten
Alt 22-09-2004, 01:46   #11 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
also eigentlich wollte ich die ganzen 675*575 felder >>>>laden<<<.....

davon dann aber nur 27*23 anzeigen so wie es jetzt ist!!
der sichtbare bereich bleibt also gleich....

wollte verhindern das ich mal nachladen muss, aber das lässt sich wohl nicht verhindern...

wie gesagt 680*130 FELDER bekomme ich immer geladen bei mehr bekomme ich dann ne fehlermeldung

dieser wilde haufen oben sind momentan alles möglichen sprites die ich darstellen kann wollte testen wie drin wirken und dann evtl welche wieder rausschmeissen......


wie gesagt die karte ansich ist noch roh da kommen noch landschaften hin also wiesen wälder berge täler städte tempel hölen, möglichkeiten duch städte zu laufen in nachgeldaenen´swf....mit leuten zu reden kämpfe aus zu fechten, handel zu treiben..... , schifffahrten ..... all sowas, vom charakter her solls sowas werden wie ultima 4 falls du mal nen atari XL hattest und rollenspiele kennst weisst du was ich meine..

meinte eigentlich so vom aufbau selber her... der bg und vor allendingen die "blauen bälle) da hinter den steuer pfeilen und der windrose... der rest kommt ja alles noch


Gruss Sascha
projecktx ist offline   Mit Zitat antworten
Alt 22-09-2004, 02:03   #12 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
hatte nur das vergnügen mit ultima 8 und 9. wobei ultima 8 heute noch eines
meiner lieblingsspiele ist. nur hab ich meine ollen disketten verlegt und weiß
nicht obs auf winXP läuft, sonst würd ich jetzt ne runde zocken

wie gesagt, wenn du die nötigen reihen/zeilen (1-2) nach- bzw. entlädst
machst du nix falsch. ist ja unsinn tausende clips zu laden die man eh nicht
sieht.

zum spiel ansich:
ok die genannten makel sind entschuldigt. was mir nicht gefällt ist die steuerung.
es wäre besser wenn man eine taste halten kann und trotzdem noch mit
den anderen steuern kann. aber das machst du bestimmt auch noch
__________________
elias ist offline   Mit Zitat antworten
Alt 22-09-2004, 02:11   #13 (permalink)
Banned
 
Benutzerbild von projecktx
 
Registriert seit: Sep 2003
Beiträge: 2.071
werd ich eh müssen, sobald man in sädten mit leuten kommunizieren muss und es dann an die texteingabe geht sollte man auch die cursortasten benutzen können zur texteingabe... etc...

Danke für deine kritik... bis es fertig ist wirds sicher noch einige zeit dauern ich wollt nur erstmal die steuerung , die laderoutinen, eine grobe karte und das design bauen, seit dem atari hab ich keine spiele mehr gebastelt und das ist imemerhin schon 16 jahre her, da gabs flash noch nicht und das topmodel unter den pc´s war der 286er mit 8mb ram

Gruss Sascha


EDIT: zu den clips laden die man eh nicht sieht... naja ich hätte es schöner gefunden wenn nicht zwischen durch mal ne wartezeit von 10 sekunden ist... so wie es aussieht werd ich wohl mindestens 5 teile karten brauchen.... wenn ichs horizontal und vertikal teile kommts im ungünstigsten fall hin das jemand an einer bestimmten stelle 4 mal laden muss wenn er nur kurz im kreis geht.. also werd ich mich auf entweder horizontal oder vertikal beschränken....

Geändert von projecktx (22-09-2004 um 02:16 Uhr)
projecktx 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 13:00 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele