Среда, 25 Декабря 2024, 15:58

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
проблема с инвентарем
vsDaTavsДата: Четверг, 13 Января 2011, 16:15 | Сообщение # 1
почетный гость
Сейчас нет на сайте
сразу замечу, чтоб не возникало лишних вопросов что у меня не совсем инвентарь как в понимание в РПГ "рюкзак"
и при переходе в мое подобие инвентаря у меня грузится отдельная комната

для реализации задачки у меня имеется 3 объекта item_1, item_2, item_3 которые представляют собой предметы инвентаря
есть также объект родитель для последних item в котором содержатся следующий код

в событие creat
image_speed = 0
image_index = 0
select = 0 // не обращать внимания

в событие step
if(image_index=1) { x = mouse_x y = mouse_y} // если объект выделен( 0 спрайт -нет, 1 - да), то он двигается за мышкой

в событие pressed mouse на объект item

В принципе код работает - я нажимаю на предмет - он выделяется и далее движется за мышой, аналогично я его могу положить, заменить. Вот тут-то беда, часто замена проходит гладко, но иногда оба предмета вдруг цепляются за мышь.
я нарошно в коде mose pressed код написал в 1 действие через else. но каким то образом программка иногда это препятствие обходит.
Прошу высказывать у кого какие есть предположения, даж самые абсурдные, ибо изучая этот движок методом тыка я убедился что частенько абсурдные ошибки и получаются


http://farchive.jino.ru/

Сообщение отредактировал vsDaTavs - Четверг, 13 Января 2011, 16:35
Dva_KotaДата: Четверг, 13 Января 2011, 16:57 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Есть вариант: разбей код на две части: клади предмет при нажатии клавиши, а бери - при отпускании.

Добавлено (13.01.2011, 16:57)
---------------------------------------------
ну не совсем так... это работать тоже будет не правильно, но, возможно, с этим можно что-то придумать...


Новый пример инвентаря! /20.06.2012/

Energy Wars
vsDaTavsДата: Четверг, 13 Января 2011, 17:27 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Запасной план у меня есть всегда.
Так например добавить в посторонний объект переменную-контроллер, которая не будет допускать 2 выделенных объекта(image_index=1) и хранить значения 0 и 1. + объект временной памяти, который будет отвечать за заменяемый объект. а каждый шаг будет проверка контроллера и через преме памяти смена кадра для второго объекта.

Так я ж бьюсь чтоб код был короче

Добавлено (13.01.2011, 17:27)
---------------------------------------------
а в вашем случа я бы не советовал так делать т.к. может возникнуть много багов, например при перетаскивание нажатой кнопке. ну и код проверок получится объемным


http://farchive.jino.ru/

Сообщение отредактировал vsDaTavs - Четверг, 13 Января 2011, 17:27
Dva_KotaДата: Четверг, 13 Января 2011, 18:44 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Сделай так:
Quote (Dva_Kota)
Так например добавить в посторонний объект переменную-контроллер, которая не будет допускать 2 выделенных объекта(image_index=1) и хранить значения 0 и 1. + объект временной памяти, который будет отвечать за заменяемый объект. а каждый шаг будет проверка контроллера и через преме памяти смена кадра для второго объекта.

Только проверяй не каждый шаг, а только в событии нажатия клавиши мышки.


Новый пример инвентаря! /20.06.2012/

Energy Wars
vsDaTavsДата: Четверг, 13 Января 2011, 22:56 | Сообщение # 5
почетный гость
Сейчас нет на сайте
я все равно не собираюсь идти на попятную. мне надо разобраться почему глючит написанный мной код

Добавлено (13.01.2011, 18:57)
---------------------------------------------
у меня другого объяснения не находится кроме как:

if(image_index = 1)
{...image_index =0....}
и затем этот же объект выполняет часть кода помле
else мол потому что image_index уже равен нулю.
Хотя я думал что при выполнении первого условия оператор завершается
несмотря на вторую проверку что нах-ся в варианте else

И забавно что это происходит не всегда. в большинстве же своем как я уже сказал код работает как я и планировал

Добавлено (13.01.2011, 22:56)
---------------------------------------------
в общем я сам нашел недочет


http://farchive.jino.ru/

Сообщение отредактировал vsDaTavs - Четверг, 13 Января 2011, 18:59
Dva_KotaДата: Пятница, 14 Января 2011, 11:04 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
А в чем был недочет?

Новый пример инвентаря! /20.06.2012/

Energy Wars
vsDaTavsДата: Пятница, 14 Января 2011, 13:49 | Сообщение # 7
почетный гость
Сейчас нет на сайте
шаг step. мало того что у меня объект держался углом за мышку(ну я там с коорд подправил на всяк случай)., так еще использовал стандартный шаг в условии.
кароч зачастую объект не успевал бежать за мышкой и когда я нажимал на объект нах-ся в ячейке, объект прикрепленный к мыше был проигнорирован. потому и оказывалось что в итоге оба выделены.

В этом случае надо использовать только начальный шаг и никаких проблем не будет
Теперь мой инвентарь полностью работает исправно.


http://farchive.jino.ru/

Сообщение отредактировал vsDaTavs - Пятница, 14 Января 2011, 13:49
Dva_KotaДата: Пятница, 14 Января 2011, 13:59 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
привязка объектов к мышке или друг к другу в событии Step - распространенная ошибка. smile

Новый пример инвентаря! /20.06.2012/

Energy Wars
vsDaTavsДата: Пятница, 14 Января 2011, 14:17 | Сообщение # 9
почетный гость
Сейчас нет на сайте
кстати описанный ранее код затрагивал в основном визуальный эффект инвентаря.
если интересно вот полный код, и если вдуматься он достаточно прост
объект item -родитель, содержит код манипуляций с предметами в инвентаре
объект item_0 - содержит инфу о инвентаре.(массив отвечающий за наличие объектов и их раскладку, при старте комнаты создает соответствующие элементам массива объекты - итемы в инвентаре)
и объекты - предметы item_1, item_2, item_3 ..... - дочерние к item-у
Item

объект item_0

объекты item_1,2,3,4,5,....


+ также во избежание багов в объекте выходе из комнаты-инвентаря написать следующее
в событие любого нажатия кнопки
if(item_0.cel ==0){room_goto(нужная комната)}

следует также добавить что при переходе с 1 комнаты в другую негглобальные данные использовать неполучится.
поэтому в данном примере можно пойти 2 путями. Либо массив jaika[n,k] сделать глобальным: везде в коде заменить на global.jaika[n,k] либо не делать его глобальным но при переходе использовать списки для перепеси данных из массива.(а в новой комнате лучше записать из списка в нов массив и удалить список). хотя последний олее емкий(списки сами по себе глобальны+ доп код. но у меня так и сделано по особой причине)
аналогично делается магазин


http://farchive.jino.ru/

Сообщение отредактировал vsDaTavs - Пятница, 14 Января 2011, 15:10
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг