{lang: 'de'}
Flashhilfe.de - Flash Community

könnte jemand ein internes Script für eine .as-datei umschreiben? [Flash 10]

 


AntwortenRegistrieren Seite1  

DessIntress#1
Benutzerbild von DessIntress
Beiträge: 3
Registriert: Mar 2011

08.06.2011, 19:46

Abend Zusammen,

hab da ein Spiel das bisher nur 1 Level besitzt, nun möchte ich es auf mehrere Levels erweitern aber ich bekomme total Probleme wegen dem Script vom Vorframe. Darum möchte ich dieses Script in .as umschreiben.. ...lassen weil ich noch nie eine .as gemacht habe und das auch erst Bildlich verstehen muss.
Sprich ich will das interne Script raushauen und via import laden, allerdings sollen alle "fast gleichen" Scripte den selben Spielstand fortführen, so dass zum Schluss ein Highscore aus allen Levels existiert oO

ich bin neulich erst von as2 auf as3 umgestiegen und dieses ganze import-Gedöse mit package, public, privat und Co sagt mir überhaupt gar nichts, ich weiß nur, dass in package alles drin stehen muss.

Ohne das laden einer .as bekomme ich nämlich immer die Meldung von wegen currentCount hat keine Number, das hängt irgendwie mit dem Timer (2 Minuten Countdown) zusammen, aber ein Reset und ein Neustart haben da nichts gebracht.
Darum wäre ich froh wenn mir da einer helfen könnte, egal ob er mir "schnell" den Code für eine .as umschreibt oder ob er mir den Fehler im nächsten Frame zeigt. Ich poste einfach mal beide Codes. Zuerst den passenden vom Vorframe und dann den wo der ganze Anfang scheinbar verhunzt ist, dem seine Timerangeben stimmen definitiv nicht mehr.



Guter Code:
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
import Gegner;

stop();

var time:Timer = new Timer(3000, 0);
var begrenzung:Timer = new Timer(1000);
begrenzung.start();
time.start();

var musicPlayin = true;
butMusic.gotoAndStop(1);


// Stellt die Musik an oder aus
butMusic.addEventListener(MouseEvent.MOUSE_UP, function(e) {
     // Anzeige und Variablen setzen
   musicPlayin = !musicPlayin;
     butMusic.gotoAndStop(musicPlayin ? 1 : 2);
     
     if(musicPlayin) {
        // Hintergrundmusik starten
      bgMusicChannel = bgMusicSound.play();
        bgMusicChannel.addEventListener(Event.SOUND_COMPLETE, function(e) {
           bgMusicChannel = bgMusicSound.play();   
        });
     } else {
        
        // evtl noch abgespielte Sounds stoppen
      bgMusicChannel.stop();
     }
});

// Sound-Objekte
var sndEnemyBoomSound = new Sound(new URLRequest("http://xxx.funpic.de/gegnerstirbt.mp3"));
var sndEnemyBoomChannel = new SoundChannel();
var sndEnemySound = new Sound(new URLRequest("http://xxx.funpic.de/gegnerstirbt_durch_schuss.mp3"));
var sndEnemyChannel = new SoundChannel();
var sndLaserSound = new Sound(new URLRequest("http://xxx.funpic.de/laserfeuern.mp3"));
var sndLaserChannel = new SoundChannel();
var bgMusicSound = new Sound(new URLRequest("http://xxx.funpic.de/titelmusik.mp3"));
var bgMusicChannel:SoundChannel = new SoundChannel();


var spielstand = 0;
var lives = 7;
var geschwindigkeit:int = 4;
var laserspeicher:Array = new Array();      // Array, das die Laser in sich speichert.
var gegnerspeicher:Array = new Array();      // Array, das die Gegner in sich speichert.
var isDown:Object = {u: 0, down: 0, l: 0, r: 0, s: 0};   //Object, das die Tastaturaktivität angibt.



// Erstellen der 140 möglichen Laser
for(var i = 0; i < 140; i++) {
     laserspeicher[i] = new laser();
}
var akt_laser = 0;
var lst_laser = 0;


// Erstellen der 100 möglichen Gegner
for(var j = 0; j < 100; j++) {
     gegnerspeicher[j] = new Gegner();
     gegnerspeicher[j].nummer = j;
}
var akt_gegner = 0;
var lst_gegner = 0;

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboard_handler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyboard_handler);
stage.addEventListener(Event.ENTER_FRAME, main_loop);
stage.focus = stage;
time.addEventListener(TimerEvent.TIMER, gegner_spawn);
bgMusicChannel = bgMusicSound.play();
function main_loop(e) {
     // OSD aktualisieren
   score.text = spielstand;
     var restzeit = 120 - begrenzung.currentCount; // 12000 = 2 Minuten
   timer.text = int(restzeit / 60) + ":" + (restzeit % 60);
     if(restzeit <= 0) {
        game_over2();
        return 0;
     }
 
     // // // BEWEGUNG DES RAUMSCHIFFS
   if(isDown.u == 1 && raumschiff.y > 0)       raumschiff.y -= geschwindigkeit;
     if(isDown.r == 1) {
        if(raumschiff.x < 250)   raumschiff.x += geschwindigkeit;
        // Startet evtl. die Bewegung des Sternenfelds
      if(raumschiff.x > 150)    sternenfeld();
     }
     if(isDown.l == 1 && raumschiff.x > 0)       raumschiff.x -= geschwindigkeit;
     if(isDown.down == 1 && raumschiff.y < 360)    raumschiff.y += geschwindigkeit;
     if(isDown.s == 1)                     schuss();
     
     // // //BEWEGUNG & KOLLISION DER AKTIVEN LASER
   if(lst_laser != akt_laser) {
        for(var i = lst_laser; i < (lst_laser + 140); i++) {   
           if(stage.contains(laserspeicher[i % 140])) {
              // akt_laser und lst_laser rotieren von 0 bis 140, müssen also speziell verwendet werden.
            if(i % 140 != akt_laser) {
                 laserspeicher[i % 140].x += 10; //laserspeed
         
                 // Testen, ob der Laser aus dem Bild geflogen ist
               if(laserspeicher[i % 140].x >= 640) { // Laser Flugweite
                  // Den Laser von der Bühne löschen
                  stage.removeChild(laserspeicher[i % 140]);
 
                    lst_laser = (lst_laser + 1) % 140;
                 }
                 
                 // Kollisionstest mit den Gegnern, Hauptgegnerschleife in Kurzform
               for(var o = lst_gegner; o < (lst_gegner + 40); o++) {
                    if(stage.contains(gegnerspeicher[o % 40])) {
                       if(laserspeicher[i % 140].hitTestObject(gegnerspeicher[o % 40])) {
                          gegnerspeicher[o % 40].leben -= 2.5; //gegnerkraft-abzug beim schuss, vorher auf 4
                        spielstand += 10; // Punktestand hochsetzen
                        if(gegnerspeicher[o % 40].leben <= 0) {
                             // Evtl. Sound abspielen
                           if(musicPlayin) sndEnemyChannel = sndEnemySound.play();
                             
                             gegnerspeicher[o % 40].y = 710;   // Gegner aus dem Bild nehmen
                        }
                          laserspeicher[i % 140].y = -230; // Laser aus dem Bild nehmen
                     }
                       
                       if(o % 40 == akt_gegner) {
                          break;       
                       }
                    }
                 }
              } else {
                 break;
              }
           }
        }
     }
 
     // // // GEGNER BEWEGEN & KOLLISIONSABFRAGE RAUMSCHIFF <-> GEGNER
   for(i = lst_gegner; i < (lst_gegner + 40); i++) { //40 ist hier der Speed
      if(!stage.contains(gegnerspeicher[i % 40])) continue;
        gegnerspeicher[i%40].bewegen();
        
        // Wenn der Gegner aus dem Bild ist
      if(gegnerspeicher[i % 40].x == 0 < (-gegnerspeicher[i % 40].width)) {  // ==0 bedeutet wenn er Links dan Rand berührt ist der Gegner weg
         stage.removeChild(gegnerspeicher[i % 40]);
           lst_gegner = (lst_gegner + 1) % 140;
        }
        
        // Kollisionsabfrage
      if(raumschiff.hitTestObject(gegnerspeicher[i % 40])) {
           raumschiff.play();            // Schildanimation abspielen
         if(musicPlayin) sndEnemyChannel = sndEnemyBoomSound.play(); //gegner stirbt am schild
         gegnerspeicher[i % 40].y = 710;   // Gegner aus dem Bild nehmen
         spielstand -= 300;             // Punktestand herunter setzen
         lives--;                  // Leben heruntersetzen
         osd.gotoAndPlay(7-lives);      // Ein Leben weniger auch anzeigen
         
           // Game Over
         if(lives == 0) {
              game_over();
              return 0;
           }
        }
        
        // Haben wir alle aktiven Gegner durch, wird die Schleife abgebrochen
      if(i % 40 == akt_gegner) {
           break;       
        }
     }
}

function game_over2() {
     stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboard_handler);
     stage.removeEventListener(KeyboardEvent.KEY_UP, keyboard_handler);
     stage.removeEventListener(Event.ENTER_FRAME, main_loop);
     time.removeEventListener(TimerEvent.TIMER, gegner_spawn);
     // Alle Sounds stoppen
   bgMusicChannel.stop();
     sndLaserChannel.stop();
     sndEnemyChannel.stop();
     
     // Gegner und Laser löschen
   for(var o in gegnerspeicher)
        if(stage.contains(gegnerspeicher[o]))
           stage.removeChild(gegnerspeicher[o]);
     for(o in laserspeicher)
        if(stage.contains(laserspeicher[o]))
           stage.removeChild(laserspeicher[o])
     gotoAndStop(4);
}

// Funktion, die zufällig Gegner erscheinen lässt
function gegner_spawn(e) {   
     stage.addChild(gegnerspeicher[akt_gegner]);
     gegnerspeicher[akt_gegner].y = int(Math.random() * 370);
     gegnerspeicher[akt_gegner].x = 610;
     
     akt_gegner = (akt_gegner + 1) % 40;
}

// Funktion, die die Tasteneingaben entsprechend weiterleitet
function keyboard_handler(e) {
     var val = 2;
     val = (e.type == KeyboardEvent.KEY_DOWN ? 1 : val);
     val = (e.type == KeyboardEvent.KEY_UP    ? 0 : val);
       
     if(val != 2) {
        switch(e.keyCode) {
           case Keyboard.UP:      isDown.u = val; break;
           case Keyboard.RIGHT:    isDown.r = val; break;
           case Keyboard.LEFT:    isDown.l = val; break;
           case Keyboard.DOWN:    isDown.down = val; break;
           case Keyboard.SPACE:    isDown.s = val;
        }
     }
}

// Funktion zum erstellen eines Lasers
function schuss() {
     // Sound abspielen
   if(musicPlayin) sndLaserChannel = sndLaserSound.play(0);
     if(musicPlayin) sndLaserChannel.soundTransform = new SoundTransform(0.1);
     laserspeicher[akt_laser] = new laser();
     stage.addChild(laserspeicher[akt_laser]);
     
     laserspeicher[akt_laser].x = raumschiff.x + 100;
     laserspeicher[akt_laser].y = raumschiff.y + 20;
     
     akt_laser = (akt_laser + 1) % 140;
}

// Bewegt das Sternenfeld in einer Endlosschleife
function sternenfeld() {
     // Alle Felder durchgehen
   for(var i:int = 1; i <= 5; i++) {
        this["stars" + i].x -= 1;
        
        // Endlosschleife setzen
      if(this["stars" + i].x < -(this["stars" + i].width)) {
           // (((i + 3) % 5) + 1) gibt das Element 4 Felder weiter an. +1 außen,
         // da %5 Werte von 0-4 gibt, wir brauchen 1-5
         this["stars" + i].x = this["stars" + (((i + 3) % 5) + 1)].x +
                            this["stars" + (((i + 3) % 5) + 1)].width;
        }
     }
}



Böser Code: -.-
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
import Gegner;

stop();



var begrenzung2:Timer = new Timer(1000);
begrenzung2.start();
time.reset();


// Stellt die Musik an oder aus
butMusic.addEventListener(MouseEvent.MOUSE_UP, function(e) {
     // Anzeige und Variablen setzen
   musicPlayin = !musicPlayin;
     butMusic.gotoAndStop(musicPlayin ? 1 : 2);
     
     if(musicPlayin) {
        // Hintergrundmusik starten
      bgMusicChannel = bgMusicSound.play();
        bgMusicChannel.addEventListener(Event.SOUND_COMPLETE, function(e) {
           bgMusicChannel = bgMusicSound.play();   
        });
     } else {
        
        // evtl noch abgespielte Sounds stoppen
      bgMusicChannel.stop();
     }
});


var lives2 = 7;
var geschwindigkeit2:int = 4;
var laserspeicher2:Array = new Array();      // Array, das die Laser in sich speichert.
var gegnerspeicher2:Array = new Array();      // Array, das die Gegner in sich speichert.
var isDown2:Object = {u: 0, down: 0, l: 0, r: 0, s: 0};   //Object, das die Tastaturaktivität angibt.



// Erstellen der 140 möglichen Laser
for(var i2 = 0; i2 < 140; i2++) {
     laserspeicher2[i2] = new laser();
}
var akt_laser2 = 0;
var lst_laser2 = 0;


// Erstellen der 100 möglichen Gegner
for(var j2 = 0; j2 < 100; j2++) {
     gegnerspeicher2[j2] = new Gegner();
     gegnerspeicher2[j2].nummer = j2;
}
var akt_gegner2 = 0;
var lst_gegner2 = 0;

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboard_handler2);
stage.addEventListener(KeyboardEvent.KEY_UP, keyboard_handler2);
stage.addEventListener(Event.ENTER_FRAME, main_loop2);
stage.focus = stage;
time.addEventListener(TimerEvent.TIMER, gegner_spawn2);
bgMusicChannel = bgMusicSound.play();
function main_loop2(e) {
     // OSD aktualisieren
   score.text = spielstand;
        var restzeit2 = +120 - spielstand.currentCount; // 12000 = 2 Minuten
   timer.text = int(restzeit2 / 60) + ":" + (restzeit2 % 60);
     if(restzeit2 <= 0) {
        game_over2();
        return 0;
     }
 
     // // // BEWEGUNG DES RAUMSCHIFFS
   if(isDown2.u == 1 && raumschiff.y > 0)       raumschiff.y -= geschwindigkeit2;
     if(isDown2.r == 1) {
        if(raumschiff.x < 250)   raumschiff.x += geschwindigkeit2;
 
     }
     if(isDown2.l == 1 && raumschiff.x > 0)       raumschiff.x -= geschwindigkeit2;
     if(isDown2.down == 1 && raumschiff.y < 360)    raumschiff.y += geschwindigkeit2;
     if(isDown2.s == 1)                     schuss2();
     
     // // //BEWEGUNG & KOLLISION DER AKTIVEN LASER
   if(lst_laser2 != akt_laser2) {
        for(var i = lst_laser2; i < (lst_laser2 + 140); i++) {   
           if(stage.contains(laserspeicher2[i % 140])) {
              // akt_laser2 und lst_laser2 rotieren von 0 bis 140, müssen also speziell verwendet werden.
            if(i % 140 != akt_laser2) {
                 laserspeicher2[i % 140].x += 10; //laserspeed
         
                 // Testen, ob der Laser aus dem Bild geflogen ist
               if(laserspeicher2[i % 140].x >= 640) { // Laser Flugweite
                  // Den Laser von der Bühne löschen
                  stage.removeChild(laserspeicher2[i % 140]);
 
                    lst_laser2 = (lst_laser2 + 1) % 140;
                 }
                 
                 // Kollisionstest mit den Gegnern, Hauptgegnerschleife in Kurzform
               for(var o = lst_gegner2; o < (lst_gegner2 + 40); o++) {
                    if(stage.contains(gegnerspeicher2[o % 40])) {
                       if(laserspeicher2[i % 140].hitTestObject(gegnerspeicher2[o % 40])) {
                          gegnerspeicher2[o % 40].leben -= 2.5; //gegnerkraft-abzug beim schuss2, vorher auf 4
                        spielstand += 10; // Punktestand hochsetzen
                        if(gegnerspeicher2[o % 40].leben <= 0) {
                             // Evtl. Sound abspielen
                           if(musicPlayin) sndEnemyChannel = sndEnemySound.play();
                             
                             gegnerspeicher2[o % 40].y = 710;   // Gegner aus dem Bild nehmen
                        }
                          laserspeicher2[i % 140].y = -230; // Laser aus dem Bild nehmen
                     }
                       
                       if(o % 40 == akt_gegner2) {
                          break;       
                       }
                    }
                 }
              } else {
                 break;
              }
           }
        }
     }
 
     // // // GEGNER BEWEGEN & KOLLISIONSABFRAGE RAUMSCHIFF <-> GEGNER
   for(i = lst_gegner2; i < (lst_gegner2 + 40); i++) { //40 ist hier der Speed
      if(!stage.contains(gegnerspeicher2[i % 40])) continue;
        gegnerspeicher2[i%40].bewegen();
        
        // Wenn der Gegner aus dem Bild ist
      if(gegnerspeicher2[i % 40].x == 0 < (-gegnerspeicher2[i % 40].width)) {  // ==0 bedeutet wenn er Links dan Rand berührt ist der Gegner weg
         stage.removeChild(gegnerspeicher2[i % 40]);
           lst_gegner2 = (lst_gegner2 + 1) % 140;
        }
        
        // Kollisionsabfrage
      if(raumschiff.hitTestObject(gegnerspeicher2[i % 40])) {
           raumschiff.play();            // Schildanimation abspielen
         if(musicPlayin) sndEnemyChannel = sndEnemyBoomSound.play(); //gegner stirbt am schild
         gegnerspeicher2[i % 40].y = 710;   // Gegner aus dem Bild nehmen
         spielstand -= 300;             // Punktestand herunter setzen
         lives2--;                  // Leben heruntersetzen
         osd.gotoAndPlay(7-lives2);      // Ein Leben weniger auch anzeigen
         
           // Game Over
         if(lives2 == 0) {
              game_over();
              return 0;
           }
        }
        
        // Haben wir alle aktiven Gegner durch, wird die Schleife abgebrochen
      if(i % 40 == akt_gegner2) {
           break;       
        }
     }
}

function game_over() {
     stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboard_handler2);
     stage.removeEventListener(KeyboardEvent.KEY_UP, keyboard_handler2);
     stage.removeEventListener(Event.ENTER_FRAME, main_loop2);
     time.removeEventListener(TimerEvent.TIMER, gegner_spawn2);
     // Alle Sounds stoppen
   bgMusicChannel.stop();
     sndLaserChannel.stop();
     sndEnemyChannel.stop();
     
     // Gegner und Laser löschen
   for(var o in gegnerspeicher2)
        if(stage.contains(gegnerspeicher2[o]))
           stage.removeChild(gegnerspeicher2[o]);
     for(o in laserspeicher2)
        if(stage.contains(laserspeicher2[o]))
           stage.removeChild(laserspeicher2[o])
     gotoAndStop(5);
}

// Funktion, die zufällig Gegner erscheinen lässt
function gegner_spawn2(e) {   
     stage.addChild(gegnerspeicher2[akt_gegner2]);
     gegnerspeicher2[akt_gegner2].y = int(Math.random() * 370);
     gegnerspeicher2[akt_gegner2].x = 610;
     
     akt_gegner2 = (akt_gegner2 + 1) % 40;
}

// Funktion, die die Tasteneingaben entsprechend weiterleitet
function keyboard_handler2(e) {
     var val = 2;
     val = (e.type == KeyboardEvent.KEY_DOWN ? 1 : val);
     val = (e.type == KeyboardEvent.KEY_UP    ? 0 : val);
       
     if(val != 2) {
        switch(e.keyCode) {
           case Keyboard.UP:      isDown2.u = val; break;
           case Keyboard.RIGHT:    isDown2.r = val; break;
           case Keyboard.LEFT:    isDown2.l = val; break;
           case Keyboard.DOWN:    isDown2.down = val; break;
           case Keyboard.SPACE:    isDown2.s = val;
        }
     }
}

// Funktion zum erstellen eines Lasers
function schuss2() {
     // Sound abspielen
   if(musicPlayin) sndLaserChannel = sndLaserSound.play(0);
     if(musicPlayin) sndLaserChannel.soundTransform = new SoundTransform(0.1);
     laserspeicher2[akt_laser2] = new laser();
     stage.addChild(laserspeicher2[akt_laser2]);
     
     laserspeicher2[akt_laser2].x = raumschiff.x + 100;
     laserspeicher2[akt_laser2].y = raumschiff.y + 20;
     
     akt_laser2 = (akt_laser2 + 1) % 140;
}




Die Gegner.as die im Code erwähnt wird habe ich bereits fertiggestellt über ein Tut erhalten. Den Rest hab ich weitgehenst Optimiert (Der Basiscode sah noch viel schlimmer aus, lief nur träge und war inGame zu leicht)
In dem Tut hätte man wenigstens mal ein neues Level erwähnen können :D
Geändert von DessIntress am 08.06.11 um 19:55 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2024 Sebastian Wichmann - Flashhilfe.de