Już daję, ale to nie jest najszybsza metoda:
GML (collisionwhile)
// skrypt collision_while( cofajX, cofajY, obj );
x = argument0;
y = argument1;
var _count, _collision;
_count = 0;
while ( true )
{
_collision = instance_place( x, y, argument2 );
x += cos( direction*pi/180 );
y -= sin( direction*pi/180 );
_count += 1;
if ( _count > speed ) return noone;
if ( _collision != noone ) return _collision;
}
Sposób użycia:
GML
if ( collision_line( xprevious, yprevious, x, y, oWall, 0, 0 ) )
{
if ( collision_while( xprevious, yprevious, oWall ) )
instance_destroy();
}
Skrypt zwraca ID 1 napotkanej instacji więc możesz sobie zwrócić twoje .other
Ten bedzie działał jeszcze szybciej, ale nie ma blokady przeciwko zapętleniu się ( na wypadek gdyby poszło coś nie tak )
GML (collisionwhile)
// skrypt collision_while( cofajX, cofajY, obj );
x = argument0;
y = argument1;
var _collision;
while ( true )
{
_collision = instance_place( x, y, argument2 );
x += cos( direction*pi/180 );
y -= sin( direction*pi/180 );
if ( _collision != noone ) return _collision;
}
Edit: Origin ustaw na czubku pocisku. Sprawdzanie kolizji wykonuj w evencie end step