//SPACE && SHOOT == 0
if ((key_space) &&(!_shoot[i]))
{
i++;// Fehler
_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 ( .pos_y > 5)
{
_shoot[i].pos_y -= 5;
}
else
{
reset(_shoot[i] , VISIBLE);
i--;// Fehler
_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++;// Fehler
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);

}

Fehlerbeschreibung:
Beim 1 aufruf von _shoot[i] = pan_create("bmap = shot.bmp;",1);

Ist _shoot[i] = _shoot[0] und enthält die werte vom Panel auf die du zugreifen kannst.

Dann zählst du _shoot[i] um 1 hoch also ist _shoot[i]= _shoot[1] und hat noch keine Panel werte
zugewiesen bekommen, sondern zeigt auf einen leeren Speicherbereich.

Anstatt _ shoot[0] hast du shoot[1] übergeben.

In der Kollisionsüberprüfung greifst du dann auf nicht initialisierte werte wie z.b . _shoot.pos_x zu und erzeugst damit einen Crash.

Das gilt natürlich auch für enemies[i]

Also immer darauf Achten das Bereiche auf die man zugreift auch etwas enthalten.

Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt

PS.
Wenn du die mit Fehler gekennzeichneten Stellen auskommentierst funktioniert der Code.


Wenn Katzen Pferde w�hren, k�nnten wir die B�ume Hochreiten.
*"Saarl�nder es kann nur einen geben"*