Posted By: ratz
2D Space shooter -> es will nicht funktionieren - 11/03/13 12:30
Hallo
ich versuche mithilfe des Aum 82 ein eigenden ganz einfachen
2D Space Shooter zu programmieren.
(ein Raumschiff, was einfach einen Feind abschießen können
soll, der dann irgendwo zufällig wieder erscheint)
:ABER:
nun hab ich folgendes problem:
Starte ich das Game kommt die meldung:
Script-crash in space_ship();
-> diese meldung erscheint immer dann
wenn ich die "Kollision" mit dem
Feind wieder einschalte und ich schießen will
-> (ich schalte die kollison ab der stelle:
"COLLISION WITH ENEMY" mit */ ... */ aus )
und:
mein Feind soll mit dem schuss kollidieren, was aber irgendwie
nicht funtioniert, obwohl ich den gleichen Kollisions-code nehme
hier der code
achja .. was mir noch ganz wichtig wäre:
ich möchte keine #defines und temp variabeln beutzen
da es sonst zu unübersichtlich wird
ich versuche mithilfe des Aum 82 ein eigenden ganz einfachen
2D Space Shooter zu programmieren.
(ein Raumschiff, was einfach einen Feind abschießen können
soll, der dann irgendwo zufällig wieder erscheint)
:ABER:
nun hab ich folgendes problem:
Starte ich das Game kommt die meldung:
Script-crash in space_ship();
-> diese meldung erscheint immer dann
wenn ich die "Kollision" mit dem
Feind wieder einschalte und ich schießen will
-> (ich schalte die kollison ab der stelle:
"COLLISION WITH ENEMY" mit */ ... */ aus )
und:
mein Feind soll mit dem schuss kollidieren, was aber irgendwie
nicht funtioniert, obwohl ich den gleichen Kollisions-code nehme
hier der code
Code:
/////////////////////////////// #include <acknex.h> #include <default.c> /////////////////////////////// var i = 0; var score = 0; function move_background(); function space_ship(); function shoot(); function enemy_event(i); function enemy_collisions(i); FONT* arial_font = "Arial#20"; /////////////////// PANEL* score_pan = { layer = 20; digits (10, 10, "Score: %.f", arial_font, 1, score); flags = visible; } PANEL* background1 = { bmap = "back_1.bmp"; pos_x = 0; pos_y = 0; flags = SHOW; } PANEL* background2 = { bmap = "back_1.bmp"; pos_x = 0; pos_y = -769; flags = SHOW; } PANEL* _ship = { bmap = "ship.bmp"; pos_x = 100; pos_y = 100; flags = SHOW | OVERLAY; } PANEL* _shoot[50]; PANEL* enemies[50]; function main() { vec_set(screen_size,vector(800,400,0)); vec_set(screen_color,vector(50,1,1)); // dark blue vec_set(sky_color,vector(50,1,1)); // dark blue video_window(NULL,NULL,0,"My New Game"); d3d_antialias = 1; shadow_stencil = 3; level_load(NULL); move_background(); enemy_event(i); space_ship(); } function move_background() { while (1) { background1.pos_y += 3 * time_step; background2.pos_y = background1.pos_y - 769; if (background1.pos_y > 768) { background1.pos_y -= 768; } wait (1); } } function space_ship() { while(1) { //UP if (key_cuu == 1) { _ship.pos_y --; } //DOWN if (key_cud == 1) { _ship.pos_y ++; } //LEFT if (key_cul == 1) { _ship.pos_x --; } //RIGHT if (key_cur == 1) { _ship.pos_x ++; } //SPACE && SHOOT == 0 if ((key_space) &&(!_shoot[i])) { i++; _shoot[i] = pan_create("bmap = shot.bmp;",1); _shoot[i].pos_x = _ship.pos_x+30; _shoot[i].pos_y = _ship.pos_y; _shoot[i].flags = VISIBLE; } //SHOOT EVENT if (_shoot[i]) { if (_shoot[i] .pos_y > 5) { _shoot[i].pos_y -= 5; } else { reset(_shoot[i] , VISIBLE); i--; _shoot[i] = NULL; } } //COLLISION WITH ENEMY if ((((_ship.pos_x + 67 >= enemies[i].pos_x) && (_ship.pos_x + 67 <= enemies[i].pos_x + 37)) || ((enemies[i].pos_x + 37 >= _ship.pos_x) && (enemies[i].pos_x + 37 <= _ship.pos_x + 67)))&& (((_ship.pos_y + 67 >= enemies[i].pos_y) && (_ship.pos_y + 67 <= enemies[i].pos_y + 37)) || ((enemies[i].pos_y + 37 >= _ship.pos_y) && (enemies[i].pos_y + 37 <= _ship.pos_y + 67)))) { score += 10; reset(enemies[i],SHOW); enemies[i].pos_x = random(400); enemies[i].pos_y = random(400); set(enemies[i],SHOW); } wait(1); } } function enemy_event(i) { i++; enemies[i] = pan_create("bmap = enemy2.bmp; flags = VISIBLE;", 20); enemies[i].pos_x = random(150); enemies[i].pos_y = random(150); enemy_collisions(i); } function enemy_collisions(i) { while (1) { if (_shoot[i]) { if (is (enemies[i], INVISIBLE)) {break;} if ((((_shoot[i].pos_x >= enemies[i].pos_x) && (_shoot[i].pos_x <= enemies[i].pos_x)) || ((enemies[i].pos_x >= _shoot[i].pos_x) && (enemies[i].pos_x <= _shoot[i].pos_x ))) && (((_shoot[i].pos_y >= enemies[i].pos_y) && (_shoot[i].pos_y <= enemies[i].pos_y )) || ((enemies[i].pos_y >= _shoot[i].pos_y) && (enemies[i].pos_y <= _shoot[i].pos_y )))) { score += 20; reset(_shoot[i], VISIBLE); _shoot[i] = NULL; reset(enemies[i], VISIBLE); } } wait (1); } }
achja .. was mir noch ganz wichtig wäre:
ich möchte keine #defines und temp variabeln beutzen
da es sonst zu unübersichtlich wird