ninth | Дата: Вторник, 30.08.2011, 17:02 | Сообщение # 1 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
|
Пример использования (копия примера в архиве)
Code # -*- coding: utf-8 -*- from panda3d.core import * import direct.directbase.DirectStart from inventory import Inventory
inv_settings = {'background-size': (-base.getAspectRatio(), base.getAspectRatio(), -1, 1), 'background-image': 'res/back.png', 'slot-size': (0.34, 0.34), 'item-size': (0.32, 0.32), 'slot-margin': 0.001, 'informer-popup-delay': 0.5, 'default-slot-image': 'res/base_slot.png', 'informer-font': 'res/arial.ttf', 'informer-bg-color': (0.15, 0.067, 0.035, 0.92), 'informer-text-color': (1, 1, 1, 1), 'use-transparency': True }
slot_info = [('HAND1', (-1.1, 0, 0.15), u'Hand', 'res/base_slot.png'), ('HAND2', (-0.4, 0, 0.05), u'Hand', 'res/base_slot.png'), ('HEAD', (-0.74, 0, 0.7), u'Head', 'res/head_slot.png'), ('BODY', (-0.74, 0, 0.32), u'Body', 'res/body_slot.png'), ('LEGS', (-0.74, 0, -0.65), u'Legs', 'res/leg_slot.png'), ('TRASH', (-0.2, 0, -0.6), u'Trash', 'res/trash_slot.png')] items = [(('INVENTORY', 'TRASH', 'HAND1', 'HAND2'), 'weapon', 'res/glok.png', 'Glok 17', 1, 1, 0, 8), (('INVENTORY', 'TRASH', 'BODY'), 'armor', 'res/armor.png', 'Light armor', 1, 1, 10), (('INVENTORY', 'TRASH', 'HEAD'), 'armor', 'res/helmet.png', 'Helmet', 1, 1, 5), (('INVENTORY', 'TRASH', 'LEGS'), 'armor', 'res/boots.png', 'Boots', 1, 1, 2), (('INVENTORY', 'TRASH'), '9x19lu', 'res/bullets.png', '9x19 luger', 20, 30), (('INVENTORY', 'TRASH'), '9x19lu', 'res/bullets.png', '9x19 luger', 6, 30)] class Item(): """ Класс, описывающий предмет инвентаря. Легко переделывается под ваши нужды, но обязательно должен содержать следующие вещи: slot_id: поле - ID слота, в котором находится предмет count: поле - количество предметов в слоте get_icon: функция - должна вернуть имя файла-картинки get_info: функция - должна вернуть текст для всплывающей подсказки get_slots: функция - должна вернуть список с типами слотов в которых можно размещать предмет get_max_count: функция - должна вернуть максимальное количество предметов данного типа, которые можно разместить в одном слоте get_type: функция - должна вернуть тип предмета. Предметы с одинаковым типом могут совмещаться в ячейках инвентаря, если get_max_count возвращает кол-во больше 1. """ def __init__(self, data): self.slot_id = -1 self.count = data[4] self.data = data def get_icon(self): return self.data[2] def get_info(self): txt = '' if self.data[1] == 'armor': txt = '%s\nArmor: %i' % (self.data[3], self.data[6]) elif self.data[1] == 'weapon': txt = '%s\nDamage: %i' % (self.data[3], self.data[7]) else: txt = self.data[3] return txt def get_slots(self): return self.data[0] def get_max_count(self): return self.data[5] def get_type(self): return self.data[1] inv = Inventory(inv_settings) # Инициализация класса inv.custom_inv_slots(slot_info) # Создаём нестандартные слоты inv.fill_inv_slots(3, 3, 0.35, 0.5) # Стандартные слоты - поле 3х3, левый верхний угол (0.35;0.5) for item in items: inv.add_item(Item(item)) # Добавляем предметы inv.make() # Генерируем визуальное представление инвентаря base.accept('mouse3-up', inv.stop_drag) # Вешаем на правую кнопку отмену перетаскивания base.accept('i', inv.switch) # По клавише I - показать/скрыть инвентарь
# Обработка генерируемого классом события # в нашем случае мы будем удалять предмет, помещённый в слот с типом # 'TRASH' def on_item_move(*args): iid, s_from, s_to = args if inv.slots[s_to].type == 'TRASH': inv.remove_item(iid) base.accept('inventory-item-move', on_item_move)
# Добавление предмета в уже созданный инвентарь item = (('INVENTORY', 'TRASH'), '9x19lu', 'res/bullets.png', '9x19 luger', 15, 30) inv.add_item(Item(item)) inv.refresh_items()
run()
|
|
| |
Dimon3D | Дата: Среда, 31.08.2011, 08:46 | Сообщение # 3 |
Полковник
Группа: Проверенные
Сообщений: 202
Награды: 1
Репутация: 4
Статус: Offline
| При переходе с ячейки на ячейку, например. Есче бы ячейку, на которой находится курсор, подсветить
|
|
| |