Воскресенье, 22 Декабря 2024, 14:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как уничтожить объект в другой комнате?
RekerДата: Понедельник, 22 Октября 2018, 00:05 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Находясь в одной комнате как уничтожить объект в другой комнате?
Abel399Дата: Понедельник, 22 Октября 2018, 09:11 | Сообщение # 2
Surpass your limits. Right now.
Сейчас нет на сайте
1 Вариант) globals. Создаете глобальную переменную на этапе инициализации и в Create необходимого объекта проверяете if (global.isObjectDestroyed) instance_destroy();
2 Вариант) persistent object. Делаете некоторый постоянный объект "контроллер", который будет отвечать за определенный набор объектов и при необходимости удалять их.
B делаете вроде такого:
Код

isObjDeleted = noone; // not deleted
isObjDeleted = rm_some_room_name; // delete Obj in that room
// For Create:
if (isObjDeleted == room) {
    instance_destroy();
}

2.5 Вариант) Не хватает на отдельный пункт, просто доработка ко 2-му. Можно завести контроллер с хэш-таблицей, в которой ключом будет id комнаты, а значением список, состоящий из object_id и instance_id.
Примерно выглядит так:
Controller.Create:
Код

deletedObjects = ds_map_create();

Controller.RoomStart:
Код

if (ds_map_exists(deletedObjects, room)) {
    var list = deletedObjects[? room]
    var n = ds_list_size(list);
    for (var i = 0; i < n; ++i) {
        instance_destroy(list[| i]); // если не хотите вызывать событие destroy, то вторым аргументом можно передать false
    }
}

Controller.SomePieceOfCode:
Код

// Добавление на удаление:
ds_list_add(deletedObjects[? rm_some_room], obj_some_object_id_or_intance_id);
// Если нужно поддерживать операцию "снова вернуть объект" и в одной комнате может быть много удаляемых объектов, то лучше листы снова-таки заменить на х.таблицы, если их немного, то асимптотически (и "экономически") листы выгоднее
var expectedObject = ...;
var list = deletedObjects[? rm_some_room_name];
var n = ds_list_size(list);
for (var i = 0; i < n; ++i) {
    if (list[i] == expectedObject) {
        ds_list_delete(list, i); // deletedObjects[? rm_some_room_name], если list это не ссылка (я уже не помню точно)
        break;
    }
}


Ninja Slayer - 2D Physics Puzzle [cancelled]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг