Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];

Вниз

Создаю инвентарь. Нужна помощь с размещением   Найти похожие ветки 

 
Enge1   (2008-07-06 10:30) [0]

Ситуация такая.
Есть инвентарь. Когда получаю предмет нужно, чтобы в инвентаре он располагался в последнем пустом слоте. Слоты у меня это панели (panel1, panel2 и т.д) На панели также отображается количество данного предмета, когда он кончается, нужно, чтобы остальные, следующие за текущим слотом сдвигались на его место.
Полагаю тут нужно всего лишь изменять left и top значения объекта panel, но сортировать их нужно как-то через массив. Помогите, чем сможете


 
@!!ex ©   (2008-07-06 13:52) [1]

Делать это через панели - это бред полный.


 
Kostafey ©   (2008-07-06 14:31) [2]

Даже если так что мешает держать список с панелями.
Хотя вот что не понятно.
Если эта информация будет храниться БД,
то последовательность тут роли не играет.
Да, возможна сортировка и в соответствии с
этим расположение панелей (каждя из которых
ассоциируется с записью некоторого НД).
Я правильно понимаю?

Возможно такое проектирование интерфейса
несколько и необычно...


 
Тын-Дын ©   (2008-07-06 14:33) [3]


> Enge1   (06.07.08 10:30)  


А как ты хранишь список инвентаря? В каком виде?


 
Enge1   (2008-07-06 14:34) [4]

А через что предлагаете тогда делать? Просто на этих панелях размещены рисунки и лэйблы. Мне так удобнее ими управлять.

Kostafey, можно поподробнее?
Информация о них не хранится в БД. Всё на переменных построено


 
Enge1   (2008-07-06 14:39) [5]

Я думал хранить информацию о них (а именно id и кол-во) в элементах массива, но что-то не получается пока


 
Тын-Дын ©   (2008-07-06 14:41) [6]


> Enge1   (06.07.08 14:39) [5]


Подумай о массивах структур:
TInvent=record
end;
TInvents=array of TInvent;

В TInvent полная информация как о содержимом, так и о расположении.


 
sniknik ©   (2008-07-06 15:15) [7]

> Мне так удобнее ими управлять.
оно и видно насколько удобнее...

> А через что предлагаете тогда делать?
TDBCtrlGrid если правильно понял попытку описания в [0]


 
MsGuns ©   (2008-07-06 15:22) [8]

>@!!ex ©   (06.07.08 13:52) [1]
>Делать это через панели - это бред полный.

Ну отчего же ? Вдруг он компьютезирует учет в публичном доме ;)


 
Enge1   (2008-07-06 15:25) [9]

эм, Тын-Дын, не мог бы ты небольшой рабочий исходник сделать, чтобы я разобрался. Буду очень признателен


 
Тын-Дын ©   (2008-07-06 15:38) [10]


> Enge1   (06.07.08 15:25) [9]


Что в топике означает "Сортировать"?


 
Enge1   (2008-07-06 16:00) [11]

Значит упорядочить так, как я писал выше:
Когда получаю предмет нужно, чтобы в инвентаре он располагался в последнем пустом слоте...
...На панели также отображается количество данного предмета, когда он кончается, нужно, чтобы остальные, следующие за текущим слотом сдвигались на его место.

p.s. чтобы проще было понять, вот как выглядит инвентарь у меня:
http://img391.imageshack.us/img391/8623/sdadik5.gif


 
MsGuns ©   (2008-07-06 16:10) [12]

>http://img391.imageshack.us/img391/8623/sdadik5.gif

Ужос !
Делать интерфейс для делового ПО в "игрушечном" столе - моветон


 
Kostafey ©   (2008-07-06 16:24) [13]

> [7] sniknik ©   (06.07.08 15:15)
> > А через что предлагаете тогда делать?
> TDBCtrlGrid если правильно понял попытку описания в [0]

Он же не с БД работает.


> [4] Enge1   (06.07.08 14:34)
> А через что предлагаете тогда делать? Просто на этих панелях
> размещены рисунки и лэйблы. Мне так удобнее ими управлять.
>
> Kostafey, можно поподробнее?

Так в > [6] Тын-Дын ©   (06.07.08 14:41)
уже все написано.


> [9] Enge1   (06.07.08 15:25)

А в чем сложность?
Описать поля record или сортировка массива?


> [10] Тын-Дын ©   (06.07.08 15:38)
> > Enge1   (06.07.08 15:25) [9]
> Что в топике означает "Сортировать"?

Похоже о сортировке речи не идет.
Нужно просто смещать все панельки
если количество n-того типа нивентаря
стало равно 0.

Это имеется в виду под сортировкой?


 
Тын-Дын ©   (2008-07-06 16:24) [14]


> Enge1   (06.07.08 16:00) [11]


Ты уже пробовал использовать OnPaint для TPanel?
Осознанно используешь панели? Попробуй после отрисовки на панелях свернуть форму и развернуть. Всё ли в порядке после этого?

Как ты отрисовываешь графику?

Выбор TPanel на самом деле не слишком хорош для твоей задачи.
Можно использовать PaintBox.


 
Enge1   (2008-07-06 16:24) [15]

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


 
Тын-Дын ©   (2008-07-06 16:25) [16]

Для того, чтобы дать пример, тебе нужно сделать осознанный выбор инструментов.


 
Enge1   (2008-07-06 16:28) [17]

Эм, это относилось к MsGuns...
Тын-Дын, нет, не пробовал. Я даже никак не отрисовывал графику. Я думал использовать примитивные visible параметры, и изменять координаты понелей и всё...


 
Тын-Дын ©   (2008-07-06 16:30) [18]


> Enge1   (06.07.08 16:28) [17]


Мда.
Тогда у тебя ещё много проблем впереди.
Готовый пример я тебе сделаю. Но уж выберу сам контейнер для хранения.


 
Enge1   (2008-07-06 16:32) [19]

Спасибо большое. Знаю, что мне ещё многому нужно научиться, но я заодно и учусь делая этот проект. Он будет полезен мне в будещем.


 
Kostafey ©   (2008-07-06 16:36) [20]

Можно так.
Придумываем некоторое правило, определяющее положение
n-го элемента инвентаря.
там что-нибудь навроде, (псевдокод)
x := (n mod c)*a
y := Round(n/c)*b

где a и b - размеры панельки,
с - количество панелек в линии.

Координаты нового элемента массива определяюся по новым правилам.
Элемент в массиве (не последний) удален - вызываем процедурку,
которая сместит хвостовые элементы массива на 1 влево.
:)


 
MsGuns ©   (2008-07-06 16:48) [21]

>Enge1   (06.07.08 16:24) [15]
>Мм... не знаю, что такое моветон, но я делаю не "деловое ПО", а рпг-игру.

Ясно. Если б в начале написал, ЧТО делаешь, не было бы и критики


 
sniknik ©   (2008-07-06 17:12) [22]

> Он же не с БД работает.
это неважно, и для неработающих с БД приложений также приемлемо, и удобно хранение/обработка однотипных и повторяющихся данных в структурах для них предназначенных - рекордсетах (переводится кстати как - "набор данных/записей"... ???).

хотя... картинка желаемого не похожа на описание... для такого лучше наверное TListView подойдет, с CustomDraw. или делать чтото на основе TScrollBox. всетаки не очень понятно, что там на картинке делается.


 
Kostafey ©   (2008-07-06 18:18) [23]

> [22] sniknik ©   (06.07.08 17:12)
> > Он же не с БД работает.
> это неважно, и для неработающих с БД приложений также приемлемо,
> и удобно хранение/обработка однотипных и повторяющихся
> данных в структурах для них предназначенных - рекордсетах
> (переводится кстати как - "набор данных/записей"... ???)
> .

Подождите - подождите. А сам набор данных как формировать в этом случае?


> хотя... картинка желаемого не похожа на описание... для
> такого лучше наверное TListView подойдет, с CustomDraw.
> или делать чтото на основе TScrollBox. всетаки не очень
> понятно, что там на картинке делается.

Можно проще. Создавать и удалять панельки.
Алгоритм определения местонахождения новой панельки
несложно подобрать.


 
Enge1   (2008-07-06 18:24) [24]

Ну сложно, не сложно, а у меня самого ничего не получается.


 
sniknik ©   (2008-07-06 19:02) [25]

> А сам набор данных как формировать в этом случае?
откуда знать как в этом случае? а вообще способов дофига, прочитать из файла, получить по сети/почте, через провайдера, составить на месте... х.з. еще, что придумать, было бы проще если знать откуда он эти данные получает, и именно оттуда и формировать набор.


 
Kostafey ©   (2008-07-06 19:28) [26]

> [24] Enge1   (06.07.08 18:24)
> Ну сложно, не сложно, а у меня самого ничего не получается.

Давай последовательно.
C record-ом определился?
Демонстрируй.


> [25] sniknik ©   (06.07.08 19:02)

В данном случае скорее из файла (ибо LoadSavedGame :))
Хотя я рекордсет без СУБД не делал...


 
Тын-Дын ©   (2008-07-06 19:32) [27]


> Enge1

Вот грубый пример:
http://89.223.39.99/files/slots.zip


 
Enge1   (2008-07-06 19:54) [28]

Тын-Дын, превосходно. Спасибо ещё раз огромное.
Без решения этой проблемы весь проект на месте стоял.
Всем спасибо за помощь


 
Рамиль ©   (2008-07-07 10:16) [29]

Это последнее, что надо было решить?:)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.007 c
9-1172434704
Mr.Vlad
2007-02-25 23:18
2008.08.10
Изображение с прозрачным фоном


4-1194246203
Sunshine
2007-11-05 10:03
2008.08.10
Программная имитация COM порта.


2-1215600820
IvanS
2008-07-09 14:53
2008.08.10
TreeNode


2-1215411081
iSODEv
2008-07-07 10:11
2008.08.10
мерцает PaintBox


2-1215681982
Lamer666
2008-07-10 13:26
2008.08.10
Можно ли оттрасировать работу чужого DLL?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский