Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Есть ли такой объект из перечня всех объектов?... (http://www.flasher.ru/forum/showthread.php?t=71388)

Fr@ddy 03.11.2005 20:32

Есть ли такой объект из перечня всех объектов?...
 
Условие выполняется, если только все 5 объектов находятся в 1 яйчейке, а мне надо, чтобы проверялось, находится-ли ОДИН объект из этого перечня(с 1 до 5). Помогоите ПЛЗ!!! :(

Кодик:
for (n=1; n<6; n++) {
if (itemSlot1.hitTest(_root["obj"+n]))
{
statysSlot1=1;
}else{
statysSlot1=0;
}
}

Crafter 03.11.2005 20:48

for (n=1; n<6; n++) {
if (itemSlot1.hitTest(_root["obj"+n]))
{
statysSlot1=1;
}
}

seifip 03.11.2005 21:43

uberaj statysSlot1=0

Fr@ddy 04.11.2005 20:52

Спасибо :) , но тут самое главное не проверяется "а если ячейка пустая(ниодин объект не касается), то
statysSlot1=0" т.е. эти объекты можно убирать и вставлять в ячейку сколько захочется. Может это тоже
вам не проблемно?:))

Конечно, если написать:
for (n=1; n<6; n++) {
if (itemSlot1.hitTest(obj1))
{
statysSlot1=1;
}else{
statysSlot1=0;
}
}
то всё пучком, но у меня может быть не мало объектов...

Dima_DPE 04.11.2005 21:30

Я бы помог! Но не в обиду, я не понял ЧЁ ТЕ НАДО!

Fr@ddy 04.11.2005 22:15

Вложений: 1
Цитата:

Сообщение от Dima_DPE
Я бы помог! Но не в обиду, я не понял ЧЁ ТЕ НАДО!

Я пытаюсь проработать систему инвентаря:(я создавал топик, но всё почему-то проигноировали)
Вот прикрепляю файл.
Суть: колобок бегает(управление стрелками) и собирает "объекты", их у меня пока 5, но возможно и больше. Когда колобок подбирает "объект" он пихается в инвентарь.
Но пихаться должно правильно:
В свободную ячейку!!! проверяя с первой ячейки.

Вот.

Fr@ddy 05.11.2005 17:17

Ну может, какой-то другой выход есть??? По-другому решить эту проблему можно?Помогите плиз.

Буньков Максим 06.11.2005 00:17

Цитата:

Сообщение от Fr@ddy
Спасибо :) , но тут самое главное не проверяется "а если ячейка пустая(ниодин объект не касается), то
statysSlot1=0" т.е. эти объекты можно убирать и вставлять в ячейку сколько захочется. Может это тоже
вам не проблемно?:))

Конечно, если написать:
for (n=1; n<6; n++) {
if (itemSlot1.hitTest(obj1))
{
statysSlot1=1;
}else{
statysSlot1=0;
}
}
то всё пучком, но у меня может быть не мало объектов...

Попробуй так:
Код HTML:

for (n=1; n<6; n++) {
if (itemSlot1.hitTest(obj1))
{
        statysSlot1=1;
        [b]break;[/b]
}else{
        statysSlot1=0;
}
}

ps вдруг пропрет...

iNils 06.11.2005 01:17

Не фига не понял что не работает. Бегать бегает, собирать собирает, в пустые ячейки пихает. Что еще нужно?

Fr@ddy 06.11.2005 16:08

Цитата:

Сообщение от iNils
Не фига не понял что не работает. Бегать бегает, собирать собирает, в пустые ячейки пихает. Что еще нужно?

Нужно чтоб, если предмет убрали (мышкой объекты можно перетаскивать)
Вот. переташили, ячейка становится пустой, но если подобрать предмет, он пихается в последующую-свободную.
А мне надо, если, например, первые пять заполнены, и я убираю из второй ячейки объект, снова подбираю, пихается в шестую ячейку, а надо во второю, т.к. она свободна.
Надо, чтоб последовательно проверялось, с первой ячейки.

Fr@ddy 06.11.2005 16:20

Цитата:

Сообщение от Буньков Максим
Попробуй так:
Код HTML:

for (n=1; n<6; n++) {
if (itemSlot1.hitTest(obj1))
{
        statysSlot1=1;
        [b]break;[/b]
}else{
        statysSlot1=0;
}
}

ps вдруг пропрет...

Так-то попрет. Но тут-то один объект. А их может 20 или 50, вот представь, какой код писать надо... :eek: :)

iNils 06.11.2005 18:19

Если бы делал я то, состояние ячейки хранил бы массиве.
Пустая ячейка - значение 0, заполнил - 1. Убрал, снова 0.
И проходил бы по массиву в поисках первой свободной ячейки.

Fr@ddy 06.11.2005 19:25

Цитата:

Сообщение от iNils
Если бы делал я то, состояние ячейки хранил бы массиве.
Пустая ячейка - значение 0, заполнил - 1. Убрал, снова 0.
И проходил бы по массиву в поисках первой свободной ячейки.

Спасибо! :) Щас буду пробовать.

Буньков Максим 09.11.2005 07:36

Цитата:

Сообщение от iNils
Если бы делал я то, состояние ячейки хранил бы массиве.
Пустая ячейка - значение 0, заполнил - 1. Убрал, снова 0.
И проходил бы по массиву в поисках первой свободной ячейки.

да тоды это, я тоже думаю самый рациональный способ... я то думал тебе нафиг не надо другие ячейки проверять если уже одна не сошлась.

Fr@ddy 09.11.2005 15:21

Ну вот, облом... :(
Массив сделал, получилась та же проблема, как ты сможешь проверить, не касается-ли ячейка с одним из 5-ти предметов?
И скажите, iNils, пожайлуста, какая функция проверяет, точнее, при промощи какой функции, ты бы искал первую попавшуюся свободную ячейку в массиве?

Skubent 09.11.2005 16:09

Если ячеек немного (в пределах разрядности) то быстрее всего использовать двоичные флаги.
Имеем:
//константы, есть степени двойки
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 при полностью заполненном рюкзаке.

Fr@ddy 11.11.2005 19:37

Блин, спасибочки. :)
Но я в программировании не такой уж сильный...
Поясни, плиз, зачем константы в степени двойки задавать?

Fr@ddy 13.11.2005 10:47

Видно 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
Вот исправленное файло.

Skubent 14.11.2005 11:19

Задавать степень двойки... Рассказываю по слогам.
1. Состояний ячейки у тебя сколько ? Ровно два - пустая и полная. Сколько Единиц информации нужно, чтобы описать объект с двумя состояниями ? Ровно 1 бит.
2. Битовые поля во флэше есть ? Только неявно выраженно, через bitwise операторы.
3. Смотрим внимательно на двоичное представление степеней двойки:
1 = 0001
2 = 0010
4 = 0100
8 = 1000
Итого, каждой ячейке соответствует одна единичка на строго определенном месте.
4. Ну а дальше чистая математика.

Fr@ddy 16.11.2005 20:53

Цитата:

Сообщение от Kyber Anton
В чём проблема?
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

Fr@ddy 16.11.2005 21:04

Цитата:

Сообщение от Skubent
Задавать степень двойки... Рассказываю по слогам.
1. Состояний ячейки у тебя сколько ? Ровно два - пустая и полная. Сколько Единиц информации нужно, чтобы описать объект с двумя состояниями ? Ровно 1 бит.
2. Битовые поля во флэше есть ? Только неявно выраженно, через bitwise операторы.
3. Смотрим внимательно на двоичное представление степеней двойки:
1 = 0001
2 = 0010
4 = 0100
8 = 1000
Итого, каждой ячейке соответствует одна единичка на строго определенном месте.
4. Ну а дальше чистая математика.

Но заметь Kyber Anton полегче способ нашел... Спасибо за совет и внимание. ;)

__i 16.11.2005 21:06

ну способы можно сказать равноценные только у Skubent на 8 ячеек тратиться 1 байт а у Антона - 8

Kyber Anton 17.11.2005 15:23

8 байтов... пойду повешусь...

Fr@ddy 17.11.2005 21:42

Цитата:

Сообщение от Kyber Anton
8 байтов... пойду повешусь...

Эй, стоп, не надо!!! ещё пригодишься! :D

Kyber Anton 19.11.2005 15:23

Если речь пошла об экономии ресурсов, то это всё фигня. Проверять каждый кадр, чего там касается или не касается - это нехорошо. Проверять надо тока когда объект добавляется или переносится. Т. е. всю лабуду с проверкой в функцию - и вызывать когда надо.


Часовой пояс GMT +4, время: 12:32.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.