Kod jest ok, ale czy zdajesz sobie sprawę że
tj. ord("s") + i to nie jest kolejność jak na klawiaturze, tylko według tablicy znaków ascii:
kulki - "s"
laser - "t"
strzelba - "u"
miotacz - "v"
bazooka - "w"
Podejrzewam że gdy tworzysz nowy obiekt broni wywołuje się dla niej collision event a bit dla keyboard pressed jest nadal aktywny i kod wykonuje się jeszcze raz, dodanie zmiennej is_pressed by pomogło.