Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   uint идентификаторы (http://www.flasher.ru/forum/showthread.php?t=215600)

Appleman 30.05.2018 18:22

uint идентификаторы
 
Решил выйти на новый уровень и попробовать отказаться от строковых идентификаторов там, где это возможно. В частности, делать все игровые предметы на uint-идентификаторах. Пока получается как-то тяжко. Бог с ним, что теперь в консоли появляются абсолютно не информативные сообщения типа "Надеваем предмет ID 114576", можно и к Модели языковой пакет прикрутить и название на русском сразу подцеплять, не велика беда.

Главная проблема - обеспечить уникальность этих самых идентификаторов. А когда они ещё и записаны в шестнадцатиричном представлении, то даже визуально их сопоставлять тяжко.

Пока выкрутился так. Нажимаю Ctrl+K, открываю палитру. Для первого элемента беру какой-нибудь цвет типа RGB 175:175:175. А для каждого следующего увеличиваю яркость с шагом 5 и получаю новое uint-значение. Но это, по-моему, порнография.

Что посоветуете? Спасибо.

undefined 30.05.2018 18:28

делать как в java: первый айдишник 0,второй 1 и т.д.

Tails 30.05.2018 18:33

Скачай консоль для проекта, очень удобная. Можно даже в рантайме произвольный код выполнять, функций дёргать, смотреть состояние объектов. Ещё у флеша есть дебаггер с полноценными точками останова, незаменимая вещь. Так, прост, вдруг ты ещё не использовал.

пс. Айдишник должен быть уникальным, а не красивым и понятным человеку! Начинай нумерацию с 1, зачем такие сложности. Ноль лучше не юзать, может пригодиться, например, для обозначения отсутствия сущности (null).

Appleman 30.05.2018 20:26

Цитата:

Сообщение от Tails (Сообщение 1205424)
пс. Айдишник должен быть уникальным, а не красивым и понятным человеку! Начинай нумерацию с 1, зачем такие сложности. Ноль лучше не юзать, может пригодиться, например, для обозначения отсутствия сущности (null).

Спасибо. Вот не поверишь, мне в натуре понравилось, как шестнадцатиричные числа выглядят - так красиво и "загадочно", точно как у крутого хакера ;)

Пока надумал наваять статический класс-генератор, который наплодит uint-ов по порядку, забьёт всё в массив и будет по одному выдавать. И всё.

Tails 30.05.2018 21:14

А мне 16x числа напоминают дизайнеров. Они цвета в нём обычно хранят. Смотришь на какой нибудь 0xFF0000 и сразу видишь женщину в красном красный цвет. :mosking:

ZergMaster 31.05.2018 00:59

Цитата:

Сообщение от Appleman (Сообщение 1205427)
Вот не поверишь, мне в натуре понравилось, как шестнадцатиричные числа выглядят - так красиво и "загадочно", точно как у крутого хакера ;)

Оооо, дааа, верю. Я тоже так раньше программировал. Чтобы выглядело круто и сложно и, желательно, никому не понятно. Боже, сколько же от этого было проблем! Сейчас наоборот, стремлюсь, чтобы код был предельно прост и как можно более примитивен. Не чураюсь дописать лишнюю функцию в угоду понятности, по пол часа думаю над названиями переменных и т.п. Сильно проще стало жить.

caseyryan 31.05.2018 09:32

Я вот как-то не верю, что там такое количество инвентаря, что аж строковых констант не хватит.
Я бы не рекомендовал использовать никакие uint идентификаторы и уж тем более автогенератор айдишников. Ты потом задолбишься это отлаживать, если что-то пойдет не так, особенно если это еще и в базу пишется, которую потом потребуется рефакторить. Делай всегда так, чтобы ты сразу мог понять что происходит.
Вот есть у тебя, допустим, плащ, который добавляет 50% защиты, и другой плащ, дающий 100% защиты.
Называешь их cloak_50 и cloak_100 соответственно. Можешь туда и какие-то другие параметры добавить.
Если у тебя есть 2 плаща, которые дают 50% защиты, но отличаются цветом, то можешь написать так
cloak_50_green / cloak_50_red и т.п.

Appleman 31.05.2018 10:05

Старый анекдот:
- Мальчик, ты пионер?
- (гордо) Да!
- Да?!
- (испуганно) Н-нет...
- Нет?!!!
- (в истерике) Ну я не зна-а-а-ю!

Вот так же и с идентификаторами. В соседних ветках меня всей ватагой застыдили, вот типа от Tails:
Цитата:

В принципе, это норм, только класс я бы назвал CharacterProperty и значения использовал не строковые, а целочисленные. (Int, Uint). Строки - жирные и тормознутые.
:umnik2:

caseyryan 31.05.2018 10:21

Надо понимать где строки тормознутые, а где нет. Если у тебя что-то там со строками делается миллион раз за кадр, то да, лучше числа считать. А для идентификаторов "тормознутость" вообще не имеет значения, зато в отладке числа - это полнейший геморой. Да ты уже и сам это понял, судя по началу темы
А автогенератор использовать нельзя потому что при добавлении чего-то не в конец списка, все айдишники пересчитаются и получится каша. Допустим у игрока был меч с одним айди, а перед ним был молот с другим айди. Айдишники пересчитаются, и окажется, что у игрока уже молот, вместо меча, к примеру.

Appleman 31.05.2018 12:14

Цитата:

Сообщение от caseyryan (Сообщение 1205443)
зато в отладке числа - это полнейший геморой. Да ты уже и сам это понял, судя по началу темы

На точняк! Спасибо, камрад, успокоил мою душу. Сейчас с чувством облегчения верну обратно строки! :)

Цитата:

А автогенератор использовать нельзя потому что при добавлении чего-то не в конец списка, все айдишники пересчитаются и получится каша. Допустим у игрока был меч с одним айди, а перед ним был молот с другим айди. Айдишники пересчитаются, и окажется, что у игрока уже молот, вместо меча, к примеру.
Ну я думал завести в классе-справочнике константы идентификаторов и при запуске программы один раз раздать им значения из генератора, а потом уже до самого конца их использовать:

Код AS3:

// В классе Model IDs
static public const TEST_ID: uint = IDGenerator.generate();
 
// В классе AllItems
var i:Item = new Item(TEST_ID)



Часовой пояс GMT +4, время: 03:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.