könnte jemand ein internes Script für eine .as-datei umschreiben? [Flash 10]
| 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 | |
|
| Ähnliche Beiträge zum Thema | 13.09.2022 - Rennier 28.07.2022 - TateBauch 13.09.2021 - Willisquirion |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News
Regeln & Bedingungen
|