To nie jest proste zagadnienie i zależy od tego jak chcesz by było zdesignowane by pasowało do mechaniki gry. Ja widzę dwa rozwiązania:
- Nie pozwalaj blokowi stawać się widocznym jeżeli jest kolizja z innym obiektem. Dość łatwe to zaimplementowania.
- Przerobienie kolizji bloku z graczem (i innymi obiektami) tak aby reagowały na kolizję tylko gdy wchodzą do kolizji a nie w jej trakcie. To nie jest już tak łatwe do dodania. Kod wygląda tak:
GML
if(place_meeting(x+hspeed,y+vspeed,o_blokwidoczny) && not place_meeting(x,y,o_blokwidoczny)) {}
Pytanie drugie. Łatwiej będzie zrobić 2 obiekty które będą zamieniane. Na jednym obiekcie jak najbardziej się da i nie jest to trudne. Musisz tylko dodać jedną zmienną true'false która będzie pamiętać czy teraz blok widać. Problem potem jest lekki ze sprawdzeniem czy ten blok jest widoczny, bo przy kolizji musisz wykryć z jakim blokiem jest kolizja i sprawdzić jego stan.
Gdy masz 2 osobne obiekty wystarczy że sprawdzisz czy jest kolizja.