Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-10-2004, 08:52   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 85
Spielfelder generieren

Hallo Zusammen,

ich experimentiere gerade ein bissel mit Kachelung bzw. Spielfeldergenerierung. Im Moment habe ich ein 2 dimensionales Array und 2 Schleifendurchläufe die mir das Spielfeld generieren. Das klappt nun auch wunderbar.

Nun hätte ich es aber gerne so, das nicht das ganze Spielfeld auf einmal da ist sondern das sich jede Kachel nach der anderen aufbaut (egal welche Reihenfolge).

Hättet ihr da ein paar Tips für mich, oder Links zu Beispielen wo sowas ähnliches bereits gemacht wurde?

Vielen Dank schon mal...

Gruß,
Mel

Geändert von Melina80 (12-10-2004 um 08:55 Uhr)
Melina80 ist offline   Mit Zitat antworten
Alt 12-10-2004, 09:01   #2 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
wie wärs mit setInterval()
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 12-10-2004, 09:28   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 85
Danke, aber mir ist nu 2x der Player abgeraucht, irgendwas mach ich falsch.

So sieht mein Script auf ...

PHP-Code:
function BuildGameFieldgameField_dirXgameField_dirY ) { 
    
_root.level++;
    var 
tiefe 0;
    for ( var 
tileX 0tileX this["GameLevel" level][0].lengthtileX++ ) 
    {
        for ( var 
tileY 0tileY this["GameLevel" level].lengthtileY++ ) 
        {
            
obj_Block "block_" tileX "|" tileY;
            if ( 
this["GameLevel" level][tileY][tileX] != 
            {
                
attachMovie("Tile"obj_Blocktiefe++);
                
this[obj_Block]._x gameField_dirX this[obj_Block]._width*tileX*1.2;
                
this[obj_Block]._y gameField_dirY this[obj_Block]._height*tileY*1.6;
            }
        } 
    } 
};

//Aufruf der Funktion
BuildGameField(45,20); 
wo würdest Du hier mit dem setInterval Befehl arbeiten?
Als erstes dachte ich den setInterval als eigene Funktion und meine BuildGameField Funktion ruft diese dann auf... aber hmmm, klappt nicht :-)

Gruß Mel

Geändert von Melina80 (12-10-2004 um 09:30 Uhr)
Melina80 ist offline   Mit Zitat antworten
Alt 12-10-2004, 12:50   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 85
Hat wer einen Tip für mich? Büdde :-)
Melina80 ist offline   Mit Zitat antworten
Alt 12-10-2004, 14:02   #5 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
ActionScript:
  1. generateTile = function () {
  2.     var x = field_obj.aktualField%field_obj.field_divisor;
  3.     var y = Math.floor(field_obj.aktualField/field_obj.field_divisor);
  4.     var target=attachMovie("tile", "block_"+x+"|"+y, field_obj.tiefe++);
  5.     target._x = field_obj.FieldX+target._width*x*1.2;
  6.     target._y = field_obj.FieldY+target._height*y*1.6;
  7.     field_obj.aktualField++;
  8.     if (field_obj.aktualField>=field_obj.tiles) {
  9.         clearInterval(AnimateFieldGen);
  10.         delete field_obj;
  11.     }
  12. };
  13. function BuildGameField(gameField_dirX, gameField_dirY) {
  14.     field_obj=new Object();
  15.     _root.level++;
  16.     field_obj.tiefe = 0;
  17.     field_obj.FieldX = gameField_dirX;
  18.     field_obj.FieldY = gameField_dirY;
  19.     field_obj.tiles = this["GameLevel"+level][0].length*this["GameLevel"+level].length;
  20.     field_obj.field_divisor = this["GameLevel"+level][0].length;
  21.     field_obj.aktualField = 0;
  22.     AnimateFieldGen = setInterval(generateTile, 200);
  23. }

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 12-10-2004, 15:27   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 85
ok, vielen Dank erstmal. Im Moment bin ich noch dabei das Script zu verstehen.

Also, es wird ein Objekt generiert, in dem Fall field_obj. Dieses Objekt bekommt diverse Werte zugeordnet wie FieldX, FieldY usw. Wenn ich das richtig verstehe ist die Funktion BuildGameField mit dem Objekt der Konstruktor. Der quasi das Obejekt beschreibt. Richtig?

Ist es mit setInterval so, das es sich solange selbst aufruft bis es gelöscht wird? In diesen Fall dann mit clearIntervall. Also wenn field_obj.aktualField größer gleich field_obj.tiles ist dann beende den interval.

Falls ich völlig falsch liege dann... dann weiss ich auch nicht :-).

Gruß Mel


Ne Frage am Rande: Frag ich zu blump oder zu blöd oder warum kommt keine Diskusion zu stande? Ich hatte nie um ein Script gebeten, nur um Hilfestellung. Das am Ende vielleicht andere auch etwas davon haben. Naja wenn ich was falsch gemacht habe dann bitte ich dies zu entschuldigen, war nicht meine Absicht.
Melina80 ist offline   Mit Zitat antworten
Alt 12-10-2004, 16:36   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 85
Boah, nun raucht mir aber der Kopf.

Beim Start leg ich ja diverse Arrays fest. Wie kann ich nun über das Objekt auf den Inhalt eines 2 dim. Array zugreifen?

PHP-Code:
GameLevel = new Array(); 
GameLevel1 = [
              [
2,2,2,2,2,2,2,2,2,2,2,2],
              [
2,2,2,2,2,2,2,2,2,2,2,2],
              [
2,2,2,2,2,2,2,2,2,2,2,2],
              [
0,2,2,0,0,2,2,0,0,2,2,0]
             ]; 
... denn überall dort wo die 0 auftaucht darf keine Kachel gesetzt werden. In meiner obigen Funktion ging das.

PHP-Code:
if ( this["GameLevel" level][tileY][tileX] != 
Wie kann ich das nun über das Objekt prüfen?

Mel

Geändert von Melina80 (12-10-2004 um 16:37 Uhr)
Melina80 ist offline   Mit Zitat antworten
Alt 13-10-2004, 13:31   #8 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Also erstmal Antwort am Rande....:
nene, das war nichts plump, eher umgekehrt, ich hatte schon das Gefühl, daß Du weisst worüber Du redest (wie die darauf folgende Antwort ja auch belegt), nur halt mit der Funktion setInterval Deine Probleme hattest....
...das führt nun für mich die Folge, daß ich das was mir einfällt auch noch gerne mal nachprüfe, vielleicht übersehe ich ja was...
....das hatte nun wieder zur Folge, daß ich ein komplett funktionierendes script da liegen hatte, jetzt hätte ich dieses ja noch schön auskommentieren können, aber warum, wenn ich mir doch ziemlich sicher war, daß Du es auch so verstehst

...so nun zum 'Folgeproblem':
ActionScript:
  1. if ( this["GameLevel" + level][tileY][tileX] != 0 )...
...ist ja eigentlich schon ganz richtig, nur ist 'this' innerhalb des intervalls nicht definiert (ich weiss nicht warum...frag kelor,bokel,etc.)...jetzt hast Du 2 Möglichkeiten entweder nimmst Du _root statt this, dann würde das in diesem Fall schon funktionieren, eleganter ist es aber natürlich den echten pfad als parameter zu übergeben, das sähe dann so aus (sorry wieder fertig...):
ActionScript:
  1. generateTile = function (path) {
  2. //variable 'path' wird gesetzt, falls parameter übergeben werden
  3.     var x = field_obj.aktualField%field_obj.field_divisor;
  4.     var y = Math.floor(field_obj.aktualField/field_obj.field_divisor);
  5. //hier habe ich this durch path (die übergebene variable) ersetzt
  6.     if ( path["GameLevel" + level][y][x] != 0 ){
  7.     var target=attachMovie("tile", "block_"+x+"|"+y, field_obj.tiefe++);
  8.     target._x = field_obj.FieldX+target._width*x*1.2;
  9.     target._y = field_obj.FieldY+target._height*y*1.6;
  10.     }
  11.     field_obj.aktualField++;
  12.     if (field_obj.aktualField>=field_obj.tiles) {
  13.         clearInterval(AnimateFieldGen);
  14.         delete field_obj;
  15.     }
  16. };
  17. //und dann der intervallaufruf inclusive eines parameters
  18. ...
  19. AnimateFieldGen = setInterval(generateTile, 200,this);
  20. ...

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (13-10-2004 um 13:33 Uhr)
Alois 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 10:03 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele