![]() |
Есть ли такой объект из перечня всех объектов?...
Условие выполняется, если только все 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; } } |
uberaj statysSlot1=0
|
Спасибо :) , но тут самое главное не проверяется "а если ячейка пустая(ниодин объект не касается), то
statysSlot1=0" т.е. эти объекты можно убирать и вставлять в ячейку сколько захочется. Может это тоже вам не проблемно?:)) Конечно, если написать: for (n=1; n<6; n++) { if (itemSlot1.hitTest(obj1)) { statysSlot1=1; }else{ statysSlot1=0; } } то всё пучком, но у меня может быть не мало объектов... |
Я бы помог! Но не в обиду, я не понял ЧЁ ТЕ НАДО!
|
Вложений: 1
Цитата:
Вот прикрепляю файл. Суть: колобок бегает(управление стрелками) и собирает "объекты", их у меня пока 5, но возможно и больше. Когда колобок подбирает "объект" он пихается в инвентарь. Но пихаться должно правильно: В свободную ячейку!!! проверяя с первой ячейки. Вот. |
Ну может, какой-то другой выход есть??? По-другому решить эту проблему можно?Помогите плиз.
|
Цитата:
Код HTML:
for (n=1; n<6; n++) { |
Не фига не понял что не работает. Бегать бегает, собирать собирает, в пустые ячейки пихает. Что еще нужно?
|
Цитата:
Вот. переташили, ячейка становится пустой, но если подобрать предмет, он пихается в последующую-свободную. А мне надо, если, например, первые пять заполнены, и я убираю из второй ячейки объект, снова подбираю, пихается в шестую ячейку, а надо во второю, т.к. она свободна. Надо, чтоб последовательно проверялось, с первой ячейки. |
Цитата:
|
Если бы делал я то, состояние ячейки хранил бы массиве.
Пустая ячейка - значение 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, вне поля обозрения :), может кто-нибудь, знает для чего степени двойки задавать?
|
В чём проблема?
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 - кол-во слотов. |
Вложений: 1
Вот исправленное файло.
|
Задавать степень двойки... Рассказываю по слогам.
1. Состояний ячейки у тебя сколько ? Ровно два - пустая и полная. Сколько Единиц информации нужно, чтобы описать объект с двумя состояниями ? Ровно 1 бит. 2. Битовые поля во флэше есть ? Только неявно выраженно, через bitwise операторы. 3. Смотрим внимательно на двоичное представление степеней двойки: 1 = 0001 2 = 0010 4 = 0100 8 = 1000 Итого, каждой ячейке соответствует одна единичка на строго определенном месте. 4. Ну а дальше чистая математика. |
Цитата:
|
Цитата:
|
ну способы можно сказать равноценные только у Skubent на 8 ячеек тратиться 1 байт а у Антона - 8
|
8 байтов... пойду повешусь...
|
Цитата:
|
Если речь пошла об экономии ресурсов, то это всё фигня. Проверять каждый кадр, чего там касается или не касается - это нехорошо. Проверять надо тока когда объект добавляется или переносится. Т. е. всю лабуду с проверкой в функцию - и вызывать когда надо.
|
| Часовой пояс GMT +4, время: 12:32. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.