Структура для хранения данных
|
|
AGENTX001 | Дата: Четверг, 12 Июля 2012, 17:49 | Сообщение # 1 |
почётный гцупер
Сейчас нет на сайте
| Привет=) Собственно возник такой вопрос - а есть ли в дельфине структура для хранения данных, индексируя их строками? Что-то вроде: Code var myweapon : string = 'ak47';
...
Procedure Render(); begin ... DrawSprite(Hero {: TSprite2D} ); DrawSprite(Array(myweapon {: string} ) {: TSprite2D} ); end; Надеюсь идея понятна?)
Сообщение отредактировал AGENTX001 - Четверг, 12 Июля 2012, 17:49 |
|
| |
Vinchensoo | Дата: Четверг, 12 Июля 2012, 17:49 | Сообщение # 2 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Quote (AGENTX001) Надеюсь идея понятна?) Нет. Ассоциативный массив что ли?
|
|
| |
AGENTX001 | Дата: Четверг, 12 Июля 2012, 17:50 | Сообщение # 3 |
почётный гцупер
Сейчас нет на сайте
| Vinchensoo, нет, массив, в котором в качестве индекса можно давать строку))
|
|
| |
RUNGOGET2THECHOPAH | Дата: Четверг, 12 Июля 2012, 17:52 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Гугли Хэш-таблицы.
|
|
| |
Archido | Дата: Четверг, 12 Июля 2012, 17:57 | Сообщение # 5 |
Сэнсэй
Сейчас нет на сайте
| Quote (RUNGOGET2THECHOPAH) нет, массив, в котором в качестве индекса можно давать строку)) Это и есть ассоциативный массив, у тебя просто частный случай. Там же на вики есть пример для Delphi.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
AGENTX001 | Дата: Четверг, 12 Июля 2012, 21:46 | Сообщение # 6 |
почётный гцупер
Сейчас нет на сайте
| Archido, о, именно он, спасибо)) Добавлено (12.07.2012, 21:46) --------------------------------------------- А кто-нибудь подскажет статический и кроссплатформенный ассоциативный массив для фри паскаль? А то стандартный на виджетах построен, да и использует ооп...
|
|
| |
Stage | Дата: Пятница, 13 Июля 2012, 02:18 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| Вся суть пацанов с gcup. С пеной у рта будут защищать %language_name%, ничего не зная даже о таком примитиве, как обычный словарь.
|
|
| |
TimKruz | Дата: Пятница, 13 Июля 2012, 18:31 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Quote (AGENTX001) А кто-нибудь подскажет статический и кроссплатформенный ассоциативный массив для фри паскаль? Попробуй написать свой, если без него никак не можешь. Используй запись с полями "имя" и "данные", сделай динамический список этих записей, добавление и удаление в него. Ну а функция getbyname(text:string):data будет перебирать список, ища подходящую запись с соответствующей строкой. Но хранить имя строкой отдельно от данных и искать по имени нерационально... Зачем тебе называть каждый спрайт (tsprite2d) по имени? Quote (AGENTX001) да и использует ооп Чем тебя ООП пугает? Объекты использовать удобно.
|
|
| |
AGENTX001 | Дата: Суббота, 14 Июля 2012, 17:12 | Сообщение # 9 |
почётный гцупер
Сейчас нет на сайте
| to TimKruz: спасибо зо объяснение принципов) называю каждый спрайт строкой так-как это удобно) у меня простенькая 2д игрушка, за быстродействием гнаться нет смысла)
|
|
| |
RUNGOGET2THECHOPAH | Дата: Суббота, 14 Июля 2012, 17:42 | Сообщение # 10 |
участник
Сейчас нет на сайте
| Зря ты так про быстродействие. Искать тупым перебором, имея в качестве ключа строку, очень "неоптимально". Попробуй хотя бы их расположить в лексикографическом порядке (как в словаре), чтобы можно было обращаться за логарифмическое время (бинарным поиском), а не линейное.
|
|
| |
Archido | Дата: Суббота, 14 Июля 2012, 18:18 | Сообщение # 11 |
Сэнсэй
Сейчас нет на сайте
| Кстати да, чтобы сортануть TStringList достаточно сделать ему Sorted := true; Только вот, обращаясь к массиву как TStringList.Values[...] бинарного поиска не будет скорее всего, придеться юзать TStringList.Find (...). Ну или унаследоваться и дописать, что нужно
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
TimKruz | Дата: Суббота, 14 Июля 2012, 18:27 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Quote (AGENTX001) за быстродействием гнаться нет смысла) Ну тут не только быстродействие, тут ещё и затраты памяти. Хранить лишние строки... Да и поиск долгий, вместо прямого обращения по ссылке. В любой самой маленькой игре нужно следить за всем. Понятно, что владельцы 8-ядерных монстров с 20 ГБ оперативной памяти и 4-мя видеокартами на борту не заметят разницы, но они и играют в более мощные игры, а вот владельцы старых компьютеров почувствуют разницу. К тому же, следя за быстродействием и расходом памяти приучаешь себя делать так всегда, а это что-то да значит... Можешь вместо строк использовать ID (просто по номеру) и константы, как-то так: Code const //ID в банке спрайтов всегда фиксированный, //а константы - чтобы не забыть ID конкретного спрайта spr_earth=0; //кусок карты, например spr_grass=1; //тоже кусок карты spr_ak47=47; //предмет spr_hero=100; //первый кадр, если анимация - spr_hero+№кадра spr_car_01=125; //авто var SpriteBank:array of TSprite2D; //динамический массив, перед загрузкой спрайтов устанавливаешь размер, //перед выходом высвобождаешь память procedure DrawMap; begin DrawSprite(SpriteBank[spr_ak47],10,10,0); //спрайт, x, y, угол и т.п. DrawSprite(SpriteBank[spr_hero],100,40,90); end; Имя константы не занимает места в программе (компилятор заменяет её конкретным значением), а по названию легче понять, какой смысл она несёт. Ну это один из способов хранения спрайтов, так-то можно по-разному сделать...
|
|
| |
masb8ly-GC | Дата: Воскресенье, 15 Июля 2012, 09:04 | Сообщение # 13 |
постоянный участник
Сейчас нет на сайте
| TimKruz, владельцы 8-ми ядерных процов не играют в более мощные игры) Просто 8-ми ядерные AMD греются просто ужасно при сильных нагрузках... Вообще не понимаю смысла в них. Мне 6-ти ядерного Intel'а Extreme серии хватает с головой, правда он и стоит в 4 раза дороже, но он и производительное в 4 раза) Фиксированный ID это хорошо можно например просто создать ассоциативный массив в отдельном файле в котором ID'шником будет номер строки, тогда обращение к строке будет элементарным, хранить все в файле с кодом в виде константы не очень хорошо и удобно. Можно создать, что-то вроде associative.mas и потом вшить его в DLL или в EXE и обращаться уже по внутреннему адресу
Backend Developer ESIS Client Side Developer Room8Studio Technical Leader Lucid Reality Labs Chief Technology Officer The Intruders Chief Technology Officer RoyalePlay Games
|
|
| |
AGENTX001 | Дата: Понедельник, 16 Июля 2012, 12:29 | Сообщение # 14 |
почётный гцупер
Сейчас нет на сайте
| TimKruz, просто, я чё по строкам хотел, хотелось бы информацию об оружии (и других вещах) хранить отдельно (в ИНИ).
|
|
| |
TimKruz | Дата: Понедельник, 16 Июля 2012, 12:35 | Сообщение # 15 |
старожил
Сейчас нет на сайте
| Quote (AGENTX001) хотелось бы информацию об оружии (и других вещах) хранить отдельно (в ИНИ). Ну так и храни информацию в ini, если хочешь... Какая связь между ассоциативными массивами со спрайтами и информацией о вещах в ini?
|
|
| |