Подскажите, как лучше всего сделать генерацию уникального id для объектов сцены игры? Первое что приходит на ум: static int, но не будет ли исчерпано количество таких id при долгой работе игры? А может есть способы лучше?
Force_Majeure
static long int
Force_Majeure
Вполне себе нормальный способ. Ведь номера же нужны вполне для конкретных объектов - персонажей, статиков, динамиков.. и всего-такого ( в том смысле, что не будет же номеров у всяких там частиц и пуль ).. Т.е. их количество либо вообще уже известно при старте уровня, либо растет довольно медленно ( ну там персы спауниться могут )...
Так что ничего не должно переполниться.
Если тебе понадобится ежесекундно создавать новый ID, то при использовании int он переполнится уже через 63 года непрерывной работы. Так что делай сразу long, а то твоих внуков разыщут и отомстят.
Went
MNAndrew
Megabyte-Ceercop
Спасибо!
> Если тебе понадобится ежесекундно создавать новый ID, то при использовании int
> он переполнится уже через 63 года непрерывной работы
Ясно :)
Значит буду прстой static int использовать
может все же unsigned int? или тебе отрицательные id тоже нужны?
Взял из одного коммерческого проекта:
int getID()
{
return 4;
}Aneroun
> может все же unsigned int
ну да, unsigned имелся ввиду
Facepalm
не понял, всегда же будет возвращаться 4
Вопрос в продолжение
Пытаюсь делать так:
class a { public: a(void) { id0++; id = id0; } static int id0; int id; } int a::id0 = 0; class b : public a { } a ex1; // ex1.id равен 1 b ex2; // ex2.id равен 0 ?? почему так и как сделать чтобы был равен 2 ?
Force_Majeure
Взорвал мозг)
я даже проверил. нормально все. в первом 1, во втором 2.
Правка:
Подебаж да посмотри где что меняется, елки палки
MATov
У меня у самого уже мозг сварился. Вроде все элементарно,а ... :(
Правильно работает вроде вот так (подсказали на др. форуме)
class a { public: a(void) { id0++; id = id0; } static int id0; int id; } int a::id0 = 0; class b : public a { b( void):a( ); // Хотя я с таким раньше не сталкивался, думал это только для конструкторов с параметрами }
Зачем что-то генерировать?
Бери адрес обьекта в памяти за ИД.
Pokimon
а потом нам на секундочку захотелос чтото сериализовать или сыграть посети или ещё какое непотребство)
kas
Полагаю, что для разных непотребств не стоит генерить ID в рантайме.
Ghost2
> Полагаю, что для разных непотребств не стоит генерить ID в рантайме.
В рантайме можно и ID и случайные числа генерировать. Главное чтоб алгоритм был строго детерминированый.
Тема в архиве.