Перейти к содержимому


Фотография

Идентификация и группировка объектов на карте по идентичных или схожим свойствам.


Лучший Ответ SteelRat , 07 September 2016 - 17:56

 

Важно добавить, что помимо общих свойств, у каждого конкретного элемента могут оставаться и уникальные.

_object setVariable ["имя уникального свойства", (определение уникального свойства), (true - транслировать уникальное свойство в сеть, false - не транслировать, по умолчанию false)];

https://community.bi...iki/setVariable

Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 15

#1 OFFLINE   Shtazi

Shtazi

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 07 September 2016 - 13:42

Добрый день всем участникам форума.

 

 

 

Существует необходимость группировать добавленные объекты на карте по определённым свойствам.

Приведу пример:

Hidden text

 

Насколько я понимаю, у объектов и тригеров в Арма3 присутствует только один идентификатор - их имя, Name. И это уникальный идентификатор, который должен принадлежать одному единственному объекту (как id в css и html). Существует ли какая-то дополнительная конструкция, которая позволяет создавать группы предметов с разными id (name) - подобие class?

 

Если специальной "конструкции" в армочке для этого не предусмотрено, то выходом является только особое именование таких объектов и добавление в какой-то общий массив?

Приведу пример:

Hidden text

 

Важно добавить, что помимо общих свойств, у каждого конкретного элемента могут оставаться и уникальные. Т.е. требуется как возможность идентифицировать конкретный объект, так и его принадлежность к "группе", "классу" и т.д. Также, помимо каких-то "физически" объектов, ими могут оказаться тригеры.

 

upd.: никаких готовых решений не прошу (вопрос по-большей части теоретический), только подсказать направление.


Сообщение отредактировал Shtazi: 07 September 2016 - 16:30

  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 07 September 2016 - 17:51

 

Существует ли какая-то дополнительная конструкция, которая позволяет создавать группы предметов с разными id (name) - подобие class?

 

А чем вас не устраивает класс? Каждый класс уникален, плюс у каждого класса есть базовый класс на основе которого создан этот класс, наследование свойств и методов, как говорится. Базовый класс собственно и есть тот объект который определяет тип всех дочерних, или сыновьих, как будет угодно, классов. Определив какой базовый класс наследует опрашиваемый класс, можно определить к какому общему типу принадлежит данный объект.


  • 1

#3 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 07 September 2016 - 17:56   Лучший Ответ

 

Важно добавить, что помимо общих свойств, у каждого конкретного элемента могут оставаться и уникальные.

_object setVariable ["имя уникального свойства", (определение уникального свойства), (true - транслировать уникальное свойство в сеть, false - не транслировать, по умолчанию false)];

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 1

#4 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 07 September 2016 - 18:04

 

Есть две вышки на карте. Первую называем "вышка_Солнышко", вторую - "вышка_Кузнечик". Инициализируя данные объекты, я парсю их название, вычленяю слово "вышка", понимаю, что это нужный мне объект и добавляю его в какой-то спец

_className = typeOf _object;

  • 1

#5 OFFLINE   Shtazi

Shtazi

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 07 September 2016 - 18:08

 

 

Существует ли какая-то дополнительная конструкция, которая позволяет создавать группы предметов с разными id (name) - подобие class?

 

А чем вас не устраивает класс? ...

 

Приветствую! Заранее предупрежу Вас, что с программированием, по-большей части, я знаком только понаслышке.

 

Проблема в том, что может потребоваться объединить объекты, относящиеся к разным классам: бот, здание, тригер. Наверное, у всех у них есть общий прародитель от которого они наследуются(некий базовый класс), но на карте будут и другие объекты, имеющие общего с ними предка.

Если есть 10 одинаковых зданий, а нам требуется объединить в условную "группу" только 5 из них? Класс у них общий, предки - тоже. Вот и приходит на ум только метод с опред. форматом наименования: заранее я не могу знать точное название каждого, но если в это название добавить ключевое слово, то всё становится легче. Вот я думаю - единственный это метод или есть менее костыльные.


 

 

Важно добавить, что помимо общих свойств, у каждого конкретного элемента могут оставаться и уникальные.

_object setVariable ["имя уникального свойства", (определение уникального свойства), (true - транслировать уникальное свойство в сеть, false - не транслировать, по умолчанию false)];

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

 

Похоже, это именно то, что нужно! Огромное Вам спасибо! :good:


  • 0

#6 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 07 September 2016 - 18:16

{
	_obj = _x;
	_objClass = typeOf _obj;
	
	switch (_objClass) do {
		case "Class_name_0": {
			// дейстие
		};
		
		case "Class_name_1": {
			// дейстие
		};
		
		case "Class_name_2": {
			// дейстие
		};
		
		default: {
			// действие по умолчанию если не обнаружено совпадений,
			// если не требуется ни каких действий не писать этот селекшен вообще, или оставить пустым, как по вкусу
		};
	};
	
} forEach (nearestObjects [_scanPos, ["Base_class_Name_0", "Base_class_Name_1", и.т.д], _scanArea]);

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 1

#7 OFFLINE   Shtazi

Shtazi

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 07 September 2016 - 18:40

На данный момент я себе это представляю так:

 

Каждой "вышке" при инициализации задаём переменную (пусть называется tag с опред. значением);

 

Когда хотим поставить другую вышку:

Получаем массив объектов рядом с игроком;

Для каждого элемента массива проверяем: есть ли у него переменная tag с опред. значением.

Если нет - ставим вышку, есть - отказываем в установке.

 

Думаю, это именно то, что мне нужно. Вариант с классами пока вызывает у меня вопросы, которые нужно проверить на практике.

SteelRat, хочу ещё раз поблагодарить Вас за столь полезную наводку.


Сообщение отредактировал Shtazi: 07 September 2016 - 18:42

  • 0

#8 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 07 September 2016 - 18:49

Shtazi, госпади... У вас вышки из пустоты берутся? Заталкайте вы свои вышки в один массив и тогда не потребуется в поиске чего-то - просто обратились к массиву и сравнили их позиции - все хорошо, добавили новое что-то в массив, все плохо - нет
  • 1

#9 OFFLINE   Shtazi

Shtazi

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 07 September 2016 - 19:04

Shtazi, госпади... У вас вышки из пустоты берутся? Заталкайте вы свои вышки в один массив и тогда не потребуется в поиске чего-то - просто обратились к массиву и сравнили их позиции - все хорошо, добавили новое что-то в массив, все плохо - нет

 

Приветствую! Надеюсь, мой вопрос Вас не расстроил - я только учусь, а вопрос - теоретический :crazy:

Я не знаю, что будет лучше, когда массив "вышек" начнёт разрастаться.

 

P.s. Никаких вышек на самом деле нет - это выдуманный пример.

P.p.s. Наверное, когда массив разрастётся до таких размеров, что это будет иметь значение - всё остальное уже значения иметь не будет, т.к. окажется неработоспособным :crazy:


Сообщение отредактировал Shtazi: 07 September 2016 - 19:15

  • 0

#10 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 07 September 2016 - 19:15

Shtazi, ну и пусть разрастается, пара сотен элементов в массиве - вполне нормальная ситуация, в любом случае это лучше чем каждый раз просить движок с нуля находить нужные объекты, а если в этом массиве соблюсти еще какую-нибудь структуру, то поиск еще и меньше ресурсов будет тратить
  • 1

#11 OFFLINE   Shtazi

Shtazi

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 07 September 2016 - 19:23

vlad333000, учту, спасибо!


  • 0

#12 OFFLINE   Shtazi

Shtazi

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 07 September 2016 - 20:00

Благодарю SteelRat и vlad333000 за их ответы. Вопрос решён, топик можно закрывать.


  • 0

#13 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 08 September 2016 - 19:57

Shtazi, ну и пусть разрастается, пара сотен элементов в массиве - вполне нормальная ситуация, в любом случае это лучше чем каждый раз просить движок с нуля находить нужные объекты, а если в этом массиве соблюсти еще какую-нибудь структуру, то поиск еще и меньше ресурсов будет тратить

 

Влад прав, сделать перебор массива будет быстрее, а массив в 200 или 1000 индексов, это вообще не массив, ну вы меня понимаете). Тут нужно понять простую вещь, массив объектов это всего лишь набор символических ссылок на сам объект, только и всего. Большой массив ни как не может привести к не работоспособности, понимаете ли, процессору ровно какой вы массив создали, 100 индексов, или 100000 индексов, разница лишь в затрачиваемом времени на перебор массива, и вряд ли придётся перебирать каждый раз весь массив от начала до конца, искомый индекс может быть и первым, и вторым, итд.


  • 1

#14 OFFLINE   Shtazi

Shtazi

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 09 September 2016 - 00:19

SteelRat, Мне вообще с этим топиком здорово повезло: я и про установитьПеременную узнал, и про группировку объектов тоже.

Смог усидеть на двух стульях, так сказать :crazy:


Сообщение отредактировал Shtazi: 09 September 2016 - 00:19

  • 0

#15 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 09 September 2016 - 17:37

Здесь ещё больше интересного, а главное, полезного

https://arma3.ru/for...kriptopisaniiu/


  • 1

#16 OFFLINE   Shtazi

Shtazi

    Рядовой

  • Пользователи
  • 9 сообщений

Отправлено 13 September 2016 - 02:19

SteelRat, Спасибо. Давно пылится в закладке "к прочтению", как и сайт КК. Его урок по подключению внешних .dll и вовсе стал для меня открытием.


  • 0




Яндекс.Метрика