Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 9
AS 3.0

Система или функция присвоения координат при создании слотов для инвентаря?

16.09.2015, 04:13. Показов 1264. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Делаю небольшую игру в подарок близкому человеку. Сейчас парюсь над системой инвентаря, и вот возникла проблема.
Инвентарь визуально представляет собой открытую коробку, которую игрок видит "сверху". В мувиклипе "коробки" находятся слоты, в которые должны попадать предметы со сцены. Штука в том, что слоты я намеренно расположил хаотично, а передача предмета в инвентарь происходит путём прописывания для него координат слота вот таким образом (не обращайте внимания на закоменченные строки):

ActionScript 3
1
2
3
4
5
6
7
8
9
10
function getItem(e:Event) 
{
var curr_it:MovieClip = MovieClip(e.currentTarget);
//itemsInInventory.push(curr_it);
inventory_mc.addChild(curr_it);
curr_it.x = -15,95;
curr_it.y = -84,00;
curr_it.removeEventListener(MouseEvent.CLICK, getItem);
//item.addEventListener(MouseEvent.CLICK, useItem);
}
Так вот поскольку слотов в "коробке" планируется много (более 20), то хотелось бы присваивать переменной curr_it координаты как-то иначе. Составить какую-то таблицу с указанием "слот N: координата x, координата y", и присваивать их по номеру слота. А вот как это сделать - никак не соображу.

И ещё один вопрос, который к проблеме прямо не относится. Можно ли каким-то образом указать названия в массиве по какому-нибудь префиксу или постфиксу? Например, у меня массив с игровыми предметами [wheel_it, bone_it, pipe_it, и т. д.]. Нельзя ли как-то сократить запись до ["тутлюбаяфигня" +_it], чтобы не прописывать кучу предметов?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.09.2015, 04:13
Ответы с готовыми решениями:

Система инвентаря или как перетащить image1 в panel1
Друзья,ребята помогите пожалуйста.Как сделать так,чтобы можно было сделать что-то вроде инвентаря.У меня на форме есть Panel1 и...

Система инвентаря для игры
В общем, перенёс я код,который писал на движке, в VS и мне нужна помощь. P.S. Ошибки такие же как и в движке. Inventory.cpp #include...

Автоматизированная информационная система «Учет инвентаря на складах предприятия»
Помогите решить пожалуйста. начала делать. связи не получаются. соответственно все остальное сделать не могу. помогите сделать все...

5
 Аватар для Nikto
156 / 138 / 51
Регистрация: 28.11.2009
Сообщений: 460
Записей в блоге: 14
16.09.2015, 12:50
Haraulf, могу предложить два варианта. Создать вектор Поинтов (Point) и хранить в нём координаты. Потом обращаться к этому вектору по номеру слота и он вам вернёт нужные координаты.
ActionScript 3
1
2
curr_it.x = p[numSlot].x;
curr_it.y = p[numSlot].y;
Или сделать вектор Спрайтов (Sprite), расположить их по координатам в коробку. И когда надо отобразить какой-то предмет в каком-то слоте просто добавлять этот предмет на спрайт.
ActionScript 3
1
sprites[numSlot].addChild(curr_it);
Только здесь надо не забывать делать removeChild перед каждым addChild.

Второй ваш вопрос не совсем ясен.
1
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 9
17.09.2015, 03:02  [ТС]
Nikto, спасибо, подумаю над этими вариантами.

А второй вопрос отпадает. Я так понимаю, что контекстный поиск всех имён в массиве по какой-то общей для них части просто невозможен.

Добавлено через 8 часов 31 минуту
Проблему с координатами решил иначе: они теперь задаются рандомно для каждого добавляемого предмета в некотором диапазоне. Также предметы можно свободно перемещать по полю инвентаря, если они вдруг наложатся друг на друга (концепции игры это не повредит).
Но вот тут возникла проблема другого рода: предмет можно сместить за границы инвентаря, чего быть не должно.
Пока решил эту проблему вот так:

ActionScript 3
1
2
3
4
5
6
7
function dragTerm(e:MouseEvent):void
{
if (e.currentTarget.x<-100 || e.currentTarget.x>100 || e.currentTarget.y<-100 || e.currentTarget.y>100)
{
e.currentTarget.stopDrag();
}
}
Проще говоря, если предмет оказывается вне диапазона от -100 до 100 по обеим осям, то передвинуть его становится нельзя. Решение крайне корявое, учитывая что поле инвентаря представляет собой окружность. Хотелось бы сверять координаты перемещаемого предмета с некой точкой на радиусе окружности, дальше которой предмет перенести нельзя, но ума не приложу как это реализовать. Буду благодарен, если кто-то подкинет идею решения проблемы.
0
 Аватар для Nikto
156 / 138 / 51
Регистрация: 28.11.2009
Сообщений: 460
Записей в блоге: 14
17.09.2015, 11:26
Haraulf, уравнение окружности вам в помощь.
ActionScript 3
1
2
3
4
if (e.currentTarget.x*e.currentTarget.x+e.currentTarget.y*e.currentTarget.y > 10000)
{
e.currentTarget.stopDrag();
}
1
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 9
17.09.2015, 18:57  [ТС]
Nikto, в очередной раз выручили. Спасибо!
0
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 9
21.09.2015, 03:10  [ТС]
Снова вопрос по инвентарю...

По ряду причин пришлось вернуться к системе со слотами, и снова с добавлением предметов в них возникла проблема.

Сейчас в инвентаре у меня 3 слота с именами "slot_1", "slot_2", "slot_3". Есть функция, которая создаёт массив этих слотов и устанавливает что они все изначально свободны:

ActionScript 3
1
2
3
4
5
6
7
function invSlots(arrayOfSlots:Array) 
{
for(i=0; i<arrayOfSlots.length; i++) 
{
arrayOfSlots[i].empty = true;
}
}
Исполняется она вот так:

ActionScript 3
1
invSlots([inventory_mc.slot_1, inventory_mc.slot_2, inventory_mc.slot_3]);

А вот добавление в слот должно происходить в другой функции через что-то вроде
ActionScript 3
1
inventory_mc.inv_slot.addChild(item_mc)
. И тут проблема: как объявить для этой строчки кода, что переменная inv_slot является первым доступным слотом с empty = true в массиве arrayOfSlots?


Ранее мне уже был дан совет использовать вектор спрайтов или координат, но я так и не смог разобраться с этим. Буду благодарен за дополнительные разъяснения или за какую-то иную подсказку.
Заранее благодарю и прошу прощения за непонимание тех вещей, которые для кого-то являются простыми и понятными.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2015, 03:10
Помогаю со студенческими работами здесь

Функция присвоения значения 2
Здравствуйте, есть база данных Access - таблица, запрос и форма, а также модуль с функцией nНом. При закрытии формы связь с функции модуля...

Автоматизированная система "Учет инвентаря на складах предприятия"
Помогите решить пожалуйста. начала делать. связи не получаются. соответственно все остальное сделать не могу. помогите сделать все...

CustomView разные изображения для разных экранов - одна система координат - Как?
Есть изображение, карта, на ней я должен в координатах размещать объекты. Изображения разные: hdpi, ldpi, mdpi и так далее. Когда я...

Функция для смещения начала координат
Есть ли функция в WinApi для смещения начала координат?

Почему не вызывается ни конструктор копий, ни функция перегруженного оператора присвоения
Привет. Начал изучать C++, дошел до темы перегрузки операторов. И запарился на одном месте. Есть класс Dog: class Dog { public:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru