Отключение образцов

Когда Вы создаёте большую комнату, например, в платформенных играх с небольшим видом, много образцов объекта находится за пределами вида. Такие образцы всё ещё активны и выполняют указанные события. Также, например, выполнение столкновения проверяет, будут ли эти образцы объекта приняты во внимание. Это может затратить много времени. (Например, часто бывает не важно, что образец объекта находиться за пределами перемещения вида.) Чтобы решить эту проблему Game Maker содержит некоторые функции, чтобы деактивировать и активировать образцы объекта. Перед их использованием, Вы должны ясно понимать, как они работают.

Когда Вы деактивируете образцы объекта, то они, в некотором значении, удаляются из игры. Они не являются больше видимыми, и любые события для них не выполняются. И для всех действий и функций они уже больше не существуют. Это экономит много времени, но Вы должны быть всё же осторожны. Например, когда Вы удаляете все образцы объекта конкретного типа, деактивированные образцы объекта не удаляются (поскольку они не существуют). Так что не думайте, что играющий нажатием клавиши может открыть деактивированную дверь.

Наиболее частую критическую ошибку, которую Вы можете совершить, так это деактивировать образец объекта, который несёт ответственность для активации. Чтобы избежать этого, существуют некоторые подпрограммы, находящиеся ниже, которые не позволят вызываемому образцу объекта деактивировать себя.

Вот доступные подпрограммы:

instance_deactivate_all(notme) Деактивирует все образцы объекта в комнате. Если notme - истина, то вызываемый образец объекта не деактивируется (обычно это то, что Вам нужно).
instance_deactivate_object(obj) Деактивирует все образцы объекта в комнате заданного объекта obj. Вы можете также использовать все, чтобы указать, что все образцы объекта должны быть деактивированы; или идентификатор образца объекта, чтобы деактивировать индивидуальный образец объекта.
instance_deactivate_region(left,top,width,height,inside,notme) Деактивирует все образцы объекта в указанную область (то есть, если окошки bounding box пролегают частично в области). Если установлена ложь, то образцы объекта находящиеся за пределами области деактивируются. Если notme - истина, то вызываемый образец объекта не деактивируется (обычно это то, что Вам нужно).
instance_activate_all() Активирует все образцы объекта в комнате.
instance_activate_object(obj) Активирует все образцы объекта в комнате заданного объекта obj. Вы можете также использовать все, чтобы указать, что все образцы объекта должны быть активированы; или идентификатор образца объекта, чтобы активировать индивидуальный образец объекта.
instance_activate_region(left,top,width,height,inside) Активирует все образцы объекта в указанной области. Если установлена ложь, то образцы объекта находящиеся за пределами области будут активированы.

Например, чтобы деактивировать все образцы объекта за пределами вида и активировать их в виде, Вы можете вставить следующее коды в событии шага движущегося персонажа:

{
  instance_activate_all();
  instance_deactivate_region(view_xview[0],view_yview[0],
                        view_wview[0],view_hview[0],false,true);
}

На практике, Вы могли бы захотеть использовать область немного большую, чем область вида.