Hola chicos necesito detectar la colision de mi objeto flecha(esta va a una velocidad maxima de 50).Que me recomendais para no tener problemas? Un evento colision? o un place_meeting en el evento step?

En ves de poner a mucha velocidad es mejor que le.cambien la velocidad a room speed.
Ya que te puede traer problemas.
Los.puedes hacer con un place meeting
En el.evento step
Saludos

Una solución es que el movimiento de la flecha se divida en secciones; si se sobrepasa cierta velocidad, en lugar de sumar la velocidad directamente a la posición, se van sumando pequeños desplazamientos hasta alcanzar la posición final. Ejemplo:
[gml]
//Evento Step
//(vx, vy) son las componentes de la velocidad
v = sqrt( vx*vx + vy*vy ); //rapidez
if( v > 8 ) //si sobrepasa el limite seguro
{
    divisor = ceil( v/8 ); //divisor de la velocidad
    repeat( divisor ) //ciclo
    {
        x += vx/divisor; //el desplazamiento se hace poco a poco
        y += vy/divisor;
        if place_meeting( x,y, obBloque ) //si hay colision
        {
            vx = 0; //la velocidad se hace cero
            vy = 0;
            v = 0;
            break; //termina el ciclo
        }
    }
}
[/gml]

Otro método sería realizar un proyección de forma que detecte la posición de la colisión de forma geométrica, como se muestra en este artículo: http://www.gamedev.net/page/resources/_/technical/game-programming/swept-aabb-collision-detection-and-response-r3084

Un método parecido al anterior, pero que resulta más sencillo, utiliza la función collision_line. Ejemplo: http://www.escueladevideojuegos.net/colisiones-ultra-perfectas-gamemaker/

Yo tengo este metodo para hacer colisiones rapidas y me ha funcionado bien:

CREATE
vel=50  ///velocidad
dir=point_direction(x,y,mouse_x,mouse_y)  ///direccion
image_angle=dir
xx=lengthdir_x(1,dir)
yy=lengthdir_y(1,dir)


STEP
repeat(abs(vel))
{
if not place_meeting(x,y,muro)
   {
    x+=xx
    y+=yy
   }
else {instance_destroy()}  ///borrar esta parte si no se quiere destruir la flecha
}