Просмотр полной версии : Есть ли такой объект из перечня всех объектов?...
Условие выполняется, если только все 5 объектов находятся в 1 яйчейке, а мне надо, чтобы проверялось, находится-ли ОДИН объект из этого перечня(с 1 до 5). Помогоите ПЛЗ!!! :(
Кодик:
for (n=1; n<6; n++) {
if (itemSlot1.hitTest(_root["obj"+n]))
{
statysSlot1=1;
}else{
statysSlot1=0;
}
}
for (n=1; n<6; n++) {
if (itemSlot1.hitTest(_root["obj"+n]))
{
statysSlot1=1;
}
}
Спасибо :) , но тут самое главное не проверяется "а если ячейка пустая(ниодин объект не касается), то
statysSlot1=0" т.е. эти объекты можно убирать и вставлять в ячейку сколько захочется. Может это тоже
вам не проблемно?:))
Конечно, если написать:
for (n=1; n<6; n++) {
if (itemSlot1.hitTest(obj1))
{
statysSlot1=1;
}else{
statysSlot1=0;
}
}
то всё пучком, но у меня может быть не мало объектов...
Dima_DPE
04.11.2005, 21:30
Я бы помог! Но не в обиду, я не понял ЧЁ ТЕ НАДО!
Я бы помог! Но не в обиду, я не понял ЧЁ ТЕ НАДО!
Я пытаюсь проработать систему инвентаря:(я создавал топик, но всё почему-то проигноировали)
Вот прикрепляю файл.
Суть: колобок бегает(управление стрелками) и собирает "объекты", их у меня пока 5, но возможно и больше. Когда колобок подбирает "объект" он пихается в инвентарь.
Но пихаться должно правильно:
В свободную ячейку!!! проверяя с первой ячейки.
Вот.
Ну может, какой-то другой выход есть??? По-другому решить эту проблему можно?Помогите плиз.
Буньков Максим
06.11.2005, 00:17
Спасибо :) , но тут самое главное не проверяется "а если ячейка пустая(ниодин объект не касается), то
statysSlot1=0" т.е. эти объекты можно убирать и вставлять в ячейку сколько захочется. Может это тоже
вам не проблемно?:))
Конечно, если написать:
for (n=1; n<6; n++) {
if (itemSlot1.hitTest(obj1))
{
statysSlot1=1;
}else{
statysSlot1=0;
}
}
то всё пучком, но у меня может быть не мало объектов...
Попробуй так:for (n=1; n<6; n++) {
if (itemSlot1.hitTest(obj1))
{
statysSlot1=1;
break;
}else{
statysSlot1=0;
}
}
ps вдруг пропрет...
Не фига не понял что не работает. Бегать бегает, собирать собирает, в пустые ячейки пихает. Что еще нужно?
Не фига не понял что не работает. Бегать бегает, собирать собирает, в пустые ячейки пихает. Что еще нужно?
Нужно чтоб, если предмет убрали (мышкой объекты можно перетаскивать)
Вот. переташили, ячейка становится пустой, но если подобрать предмет, он пихается в последующую-свободную.
А мне надо, если, например, первые пять заполнены, и я убираю из второй ячейки объект, снова подбираю, пихается в шестую ячейку, а надо во второю, т.к. она свободна.
Надо, чтоб последовательно проверялось, с первой ячейки.
Попробуй так:for (n=1; n<6; n++) {
if (itemSlot1.hitTest(obj1))
{
statysSlot1=1;
break;
}else{
statysSlot1=0;
}
}
ps вдруг пропрет...
Так-то попрет. Но тут-то один объект. А их может 20 или 50, вот представь, какой код писать надо... :eek: :)
Если бы делал я то, состояние ячейки хранил бы массиве.
Пустая ячейка - значение 0, заполнил - 1. Убрал, снова 0.
И проходил бы по массиву в поисках первой свободной ячейки.
Если бы делал я то, состояние ячейки хранил бы массиве.
Пустая ячейка - значение 0, заполнил - 1. Убрал, снова 0.
И проходил бы по массиву в поисках первой свободной ячейки.
Спасибо! :) Щас буду пробовать.
Буньков Максим
09.11.2005, 07:36
Если бы делал я то, состояние ячейки хранил бы массиве.
Пустая ячейка - значение 0, заполнил - 1. Убрал, снова 0.
И проходил бы по массиву в поисках первой свободной ячейки.
да тоды это, я тоже думаю самый рациональный способ... я то думал тебе нафиг не надо другие ячейки проверять если уже одна не сошлась.
Ну вот, облом... :(
Массив сделал, получилась та же проблема, как ты сможешь проверить, не касается-ли ячейка с одним из 5-ти предметов?
И скажите, iNils, пожайлуста, какая функция проверяет, точнее, при промощи какой функции, ты бы искал первую попавшуюся свободную ячейку в массиве?
Если ячеек немного (в пределах разрядности) то быстрее всего использовать двоичные флаги.
Имеем:
//константы, есть степени двойки
cell1 = 1;
cell2 = 2;
cell3 = 4;
cell4 = 8;
cell5 = 16;
//строго говоря, max(cell)*2 - 1;
chksum = 1+2+4+8+16;
//начальное состояние рюкзака:
items = 0;
//Проверка наличия свободной (хотя бы одной) ячейки :
if (chksum ^ items != 0) {trace('есть места');}
//добавление вещи, чуть сложнее...
items += Math.pow(2, Math.floor(Math.log(chksum ^ mas) / Math.LN2));
//тут Math.pow(2, Math.floor(Math.log(chksum ^ mas) / Math.LN2)) - это "вес" итема, а Math.floor(Math.log(chksum ^ mas) / Math.LN2) - номер ячейки, в которую его поместили.
Величина chksum^mas = 0 при полном рюкзаке, поэтому теоретически логарифм должен дать ошибку, но выдает он минус бесконечность во флэше, поэтому pow(2, логарифм) выдает 0 при полностью заполненном рюкзаке.
Блин, спасибочки. :)
Но я в программировании не такой уж сильный...
Поясни, плиз, зачем константы в степени двойки задавать?
Видно Skubent, вне поля обозрения :), может кто-нибудь, знает для чего степени двойки задавать?
Kyber Anton
13.11.2005, 21:30
В чём проблема?
for (var j = 1; j<MaxSlot; ++j) {
_root["statysSlot"+j] = 0;
for (n=1; n<6; n++) {
if (_root["itemSlot"+j].hitTest(_root["obj"+n])) {
_root["statysSlot"+j] = 1;
}
}
}
Maxslot - кол-во слотов.
Kyber Anton
13.11.2005, 21:34
Вот исправленное файло.
Задавать степень двойки... Рассказываю по слогам.
1. Состояний ячейки у тебя сколько ? Ровно два - пустая и полная. Сколько Единиц информации нужно, чтобы описать объект с двумя состояниями ? Ровно 1 бит.
2. Битовые поля во флэше есть ? Только неявно выраженно, через bitwise операторы.
3. Смотрим внимательно на двоичное представление степеней двойки:
1 = 0001
2 = 0010
4 = 0100
8 = 1000
Итого, каждой ячейке соответствует одна единичка на строго определенном месте.
4. Ну а дальше чистая математика.
В чём проблема?
for (var j = 1; j<MaxSlot; ++j) {
_root["statysSlot"+j] = 0;
for (n=1; n<6; n++) {
if (_root["itemSlot"+j].hitTest(_root["obj"+n])) {
_root["statysSlot"+j] = 1;
}
}
}
Maxslot - кол-во слотов.
О-о-о-о-о!!! Большое СПАСИБО!!! Мне уж показылось, что это невозможно сделать на флеше. Ещё раз спасибо. :) :p
Задавать степень двойки... Рассказываю по слогам.
1. Состояний ячейки у тебя сколько ? Ровно два - пустая и полная. Сколько Единиц информации нужно, чтобы описать объект с двумя состояниями ? Ровно 1 бит.
2. Битовые поля во флэше есть ? Только неявно выраженно, через bitwise операторы.
3. Смотрим внимательно на двоичное представление степеней двойки:
1 = 0001
2 = 0010
4 = 0100
8 = 1000
Итого, каждой ячейке соответствует одна единичка на строго определенном месте.
4. Ну а дальше чистая математика.
Но заметь Kyber Anton полегче способ нашел... Спасибо за совет и внимание. ;)
ну способы можно сказать равноценные только у Skubent на 8 ячеек тратиться 1 байт а у Антона - 8
Kyber Anton
17.11.2005, 15:23
8 байтов... пойду повешусь...
8 байтов... пойду повешусь...
Эй, стоп, не надо!!! ещё пригодишься! :D
Kyber Anton
19.11.2005, 15:23
Если речь пошла об экономии ресурсов, то это всё фигня. Проверять каждый кадр, чего там касается или не касается - это нехорошо. Проверять надо тока когда объект добавляется или переносится. Т. е. всю лабуду с проверкой в функцию - и вызывать когда надо.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.