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
///////////////////////////////
#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