c_move(my,temp2,my.speed_x,IGNORE_PASSABLE);
This does not make much sense to me. Check the manual reference for c_move, you are giving a world position (temp2) as the relative speed vector.
Try sth as follows:

Code:
action cannon_ball(){
	set(my,PASSABLE);
	my.speed_x = 8;
	vec_for_vertex(my.x,cannon,43);
	vec_diff(temp, player.x, my.x);
	vec_to_angle(my.pan,temp);
	while(1){
		c_move(my,vector(my.speed_x*time_step,0,0),nullvector,IGNORE_PASSABLE);
		wait(1);	
	}
}



"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends