Отображение вещей (браузерная игра)
|
|
Саааааааааааша | Дата: Понедельник, 21 Ноября 2011, 02:25 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Пишу если можно так сказать клона одной браузерной игры, и не спрашивайте зачем. Интересует как правильно отображаться вещи персонажа в инвентаре/анкете, то есть как производить выборку Все вещи персонажей хранятся в таблице inv где есть тип вещи и ее id (для поиска в таблице вещей), слот вещи, так же одета вещь или нет. если слот занят то выводим одну строке, а если пуст то другую, вообщем как оптимизировать код? что бы обойтись без кучи кода, вот пример кода для проверки одной вещи =)
$sql_helm = mysql_query("SELECT * FROM inv WHERE owner='$user' AND obj_slot='helm' AND active=1"); $helm = mysql_fetch_array($sql_helm); if($helm){ $id = $take_items[id]; $obj_type = $take_items[obj_type]; $obj_id = $take_items[obj_id]; $obj_slot = $take_items[obj_slot]; $take_obj_type_id = mysql_query('SELECT * FROM '.$obj_type.' WHERE id='.$obj_id.''); $display_items = mysql_fetch_array($take_obj_type_id); $img = $display_items[img]; $name = $display_items[name]; print('<a onmouseover="tooltip(this,\''.$name.'\')" onmouseout="hide_info(this)" href="/pers.php?act=unwear&slot='.$obj_slot.'&id='.$id.'"><li class=\'slot slot-'.$n.' '.$st.' tooltip\'><img src='.$img.'></li></a>'); }else{ print("<li class='slot slot-1 helmet helmet-empty tooltip'></li>"); }
и так нужно 30 раз, понимаю что можно через массив, но все попытки прошли безрезультатно где так так думал (без кода, только логика =) ) выбираем данные с таблицы где активность = 1 понадобиться 3 переменные id вещи в инвентаре, тип вещи и ее id в соответствующей таблице, что бы получить, х-ки, имя, и т.д. после каждого прохождения циклом по таблице мы сохраняем переменные с соответствующими данными и выводим вещь через код указанные выше, если не все слоты были заняты то для них выводим "<li class='slot slot-1 helmet helmet-empty tooltip'></li> где вместо helmet будет название вещи, может кто помочь?Добавлено (21.11.2011, 02:20) --------------------------------------------- хотя кажется и тут проблемы, тогда если можно предложите решение для моего случая Добавлено (21.11.2011, 02:25) --------------------------------------------- куча кода, от которого нету толку
|
|
| |
RipDev | Дата: Пятница, 02 Декабря 2011, 16:21 | Сообщение # 2 |
гейм-дизайнер
Сейчас нет на сайте
| Саааааааааааша, не очень понятно. Quote (Саааааааааааша) Интересует как правильно отображаться вещи персонажа в инвентаре/анкете, то есть как производить выборку Тебе все равно придется тупо, всю таблицу рисовать, поэтому по порядку извлекаешь ид и рисуешь. Quote (Саааааааааааша) если слот занят то выводим одну строке, а если пуст то другую, вообщем как оптимизировать код? что бы обойтись без кучи кода, вот пример кода для проверки одной вещи =) Если слот занят то он занят, это одно обращение к конкретному полю? Напиши по понятней чего ты хочеш? Код я не понял т.к пхп не знаю.Quote (Саааааааааааша) и так нужно 30 раз, а это уже жестко.
Взгляни на сей изукрашенный образ, на тело, полное изъянов, составленное из частей, болезненное, исполненное многих мыслей, в которых нет ни определённости, ни постоянства.
|
|
| |
Саааааааааааша | Дата: Вторник, 06 Декабря 2011, 04:00 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Вот так сделал, может кому-то пригодиться В таблице хранятся поля под каждый слот, если слот пуст то значение равно 0, если занят то отображаться id вещи. Сначала отправляю запрос в таблицу, получаю ответ, в переменные сохраняю значение каждого слота, потом:
for($i = 1; $i <=15; $i++){ if($items_array[$i] >= 1){ $obj_type = mysql_query("SELECT inv.obj_type FROM inv WHERE id='$items_array[$i]'"); $obj_type = mysql_fetch_array($obj_type); $sql = mysql_query("SELECT * FROM $obj_type[obj_type] WHERE id IN(SELECT inv.obj_id FROM inv WHERE id='$items_array[$i]')"); $sql = mysql_fetch_array($sql); print("<li class='slot slot-$i $slot[$i] tooltip'><img src='$sql[img]'/></li>"); } else{ print("<li class='slot slot-$i $slot[$i] $slot[$i]-empty tooltip'></li>"); } }
Циклом перебираю каждую переменную (не нужно косо смотреть из-за использования for), если значение >= 1 то мигрирую в таблицу вещей и получаю картинку, название и т.д. Если 0, то отображаю пустой слот, запросов много, как сделать по другому не знаю, да и остановил работу, сложно одному делать все (
|
|
| |
WormixLolPro | Дата: Четверг, 15 Декабря 2011, 17:52 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| чтоооо? что за извращение с циклом for? тут и прекрасно подойдет while а for($i = 1; $i <=15; $i++){ это ни к чему вообще. лишняя нагрузка
|
|
| |
ElDarco | Дата: Пятница, 23 Декабря 2011, 16:02 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| А не проще все сделать в виде класса и все хранить в одной таблице. А возможности предметы вызывать именно из класса? Не?
|
|
| |
jc04 | Дата: Воскресенье, 25 Декабря 2011, 21:22 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| Quote (WormixLolPro) чтоооо? что за извращение с циклом for? тут и прекрасно подойдет while С каких это пор цикл for даёт нагрузку? Сто раз уже проверялось, нет никакой разницы между этими циклами, не вводите людей в заблуждение.
Моя игра: Браузерный Сталкер Игра в разработке: Аномалия
|
|
| |
Avtokrator | Дата: Воскресенье, 05 Февраля 2012, 02:29 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Через ООП реализуйте и будет вам счастье! Зачем такой громозкий код...?
|
|
| |