Den Game Maker benutzen
Instanzen deaktivieren
Wenn du einen großen Raum erstellst, zum Beispiel bei Plattformspielen, kombiniert mit einem kleinen View, liegen viele Instanzen ausserhalb des sichtbaren Bereiches. Diese Instanzen sind aber trotzdem aktiv und führen ihre "events" durch. Auch bei Kollisionsprüfungen werden diese berücksichtigt. Dies kann viel CPU Leistung verbrauchen, was oft nicht erwünscht ist. (Es ist beispielsweise unwichtig ob sich Instanzen ausserhalb des Views bewegen.) Um dieses Problem zu lösen enthält Game Maker Funktionen zum Deaktivieren und Aktivieren von Instanzen. Bevor du sie benutzt musst du verstehen wie sie funktionieren.Wenn du Instanzen
deaktivierst sind sie in gewissem Sinne nicht existent für das
Spiel. Sie sind nicht mehr sichtbar und ihre Events werden nicht
ausgeführt.
Somit existieren sie
für
alle Aktionen und Funktionen nicht mehr. Dies spart Rechnerleistung
aber sei vorsichtig. Wenn du z.B. alle Instanzen eines Objektes
deaktivierst kannst du sie nicht löschen (Weil sie nicht
existieren.). So kann ein vom Spieler gefundener Schlüssel keine
deaktivierte Tür öffnen.
Der schlimmste Fehler, den du
machen kannst, ist die Instanz zu deaktivieren welche für das
Aktivieren zuständig ist. Um dies zu verhindern haben einige
Funktionen hier die Möglichkeit sich nicht selbst zu
deaktivieren.
Dies sind die möglichen Funktionen:
instance_deactivate_all(notme) Deaktiviert alle Instanzen im Raum. Wenn notme true ist wird die ausführende Instanz nicht deaktiviert (Was normalerweise das ist was du willst.).
instance_deactivate_object(obj) Deaktiviert alle Instanzen im Raum für das gegebene Objekt. Du kannst auch "all" für alle Instanzen oder die ID einer bestimmten Instanz angeben.
instance_deactivate_region(left, top, width, height, inside, notme) Deaktiviert alle Instanzen in der angegebenen Region (dessen Umrisse im Bereich liegen). Wenn inside false ist werden alle Instanzen ausserhalb der Region deaktiviert.Wenn notme true ist wird die ausführende Instanz nicht deaktiviert (Was normalerweise das ist was du willst.).
instance_activate_all() Aktiviert alle Instanzen im Raum.
instance_activate_object(obj) Aktiviert alle Instanzen im Raum für das gegebene Objekt. Du kannst auch "all" für alle Instanzen oder die ID einer bestimmten Instanz angeben.
instance_activate_region(left, top, width, height, inside) Aktiviert alle Instanzen in der angegebenen Region. Wenn inside false ist werden alle Instanzen ausserhalb der Region deaktiviert.
Zum Beispiel, um alle Instanzen ausserhalb des Views zu deaktivieren kannst du den folgenden Code im Step Event des bewegenden Objekts angeben:
{
instance_activate_all();
instance_deactivate_region(view_left[0],view_top[0],
view_width[0],view_height[0],false,true);
}
In der Praxis wirst du wahrscheinlich eine Region nutzen die etwas grösser ist als der View.
Alternative Versionen
Auch verfügbar in:
Download helpfile