Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как проверить объекты вокруг объекта (http://www.flasher.ru/forum/showthread.php?t=192790)

Dip52 19.01.2013 02:00

Как проверить объекты вокруг объекта
 
Здравствуйте. :)
Такой алгоритм на данный момент.
Есть поле с девятью объектами. Все они стоят по три в три ряда.
Как можно сделать так, чтобы когда я нажимал на объект, который находится по середине, выводилось значение (название или номера) тех объектов, которые находятся вокруг этого объекта?

Я попробовал реализовать такую идею: проверять координаты вокруг объекта (x + ширина и высота объекта). Получилось, но не полностью: в некоторых местах (если уже используется не 9 объектов, а около ста) прибавляются те объекты, которые уж очень далеко от объекта (то есть вокруг объекта A 8 объектов, но условие считает, что и объекты, которые уже и выше этой восьмёрки, тоже находятся в "области" объекта).

alatar 19.01.2013 03:09

Проблема у вас не в алгоритме, а в его реализации.

Dip52 19.01.2013 15:30

Цитата:

Сообщение от alatar (Сообщение 1116595)
Проблема у вас не в алгоритме, а в его реализации.

Код AS3:

                if(iBomb.x > arrayForObjects[i].x - arrayForObjects[i].width * (hitObject + 2) && 
                                iBomb.x < arrayForObjects[i].x + arrayForObjects[i].width * 2&& 
                                iBomb.y > arrayForObjects[i].y - arrayForObjects[i].height * 2 &&
                                iBomb.y < arrayForObjects[i].y + arrayForObjects[i].width * 2)
                {
                        trace(i);
                }

Реализация такова. Можете подтолкнуть меня, куда нужно нужно двигаться?

expl 19.01.2013 16:42

Что для Вас значит "вокруг"? Пересекают объект? Центры объектов ближе определённого расстояния? Зазор между объектами меньше заданного?
Или характеристика "вокруг" появляется только когда объектов больше 2-х и характеризует не положение объекта относительно другого, а характеризует конфигурацию группы объектов?

Dip52 19.01.2013 17:25

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

Сообщение от expl (Сообщение 1116631)
Что для Вас значит "вокруг"? Пересекают объект? Центры объектов ближе определённого расстояния? Зазор между объектами меньше заданного?
Или характеристика "вокруг" появляется только когда объектов больше 2-х и характеризует не положение объекта относительно другого, а характеризует конфигурацию группы объектов?

Объекты вокруг объекта.swf   (9.0 Кб)

Sintesis 19.01.2013 17:42

Поищите как реализуется игра под названием "жизнь" это вот такая штука http://www.youtube.com/watch?v=Bt5MO9Tp2d8, она на данном алгоритме построена, я однажды писал, но код найти не могу и не помню как это делал, давно это было. Но в нете есть полюбому.

AleXXX 19.01.2013 18:13

Как я понял, объекты находятся в сетке некоторой размерностью X*Y элементов, в данном случае 3*3. Следовательно, он имеет координату в этой сетке P(col,row).

Соседями считаются : P1(col-1,row) -левый, P2(col+1,row) - правый, P3(col,row-1) -верхний, P4(col,row+1)-нижний.....ну и диагональные соседи аналогично.

Достаточно проверить, входит ли "сосед" в пределы сетки, т.е. координаты "соседа" P2(col2,row2) удовлетворяют условиям:
1) X>=col2>0,
2) Y>=row2>0

etc 19.01.2013 19:23

Цитата:

Сообщение от Dip52 (Сообщение 1116626)
Код AS3:

                if(iBomb.x > arrayForObjects[i].x - arrayForObjects[i].width * (hitObject + 2) && 
                                iBomb.x < arrayForObjects[i].x + arrayForObjects[i].width * 2&& 
                                iBomb.y > arrayForObjects[i].y - arrayForObjects[i].height * 2 &&
                                iBomb.y < arrayForObjects[i].y + arrayForObjects[i].width * 2)
                {
                        trace(i);
                }

Реализация такова. Можете подтолкнуть меня, куда нужно нужно двигаться?

Скажите, а зачем вы восемь раз повторяете в этом коде выражение arrayForObjects[i]?

Dip52 19.01.2013 19:37

Цитата:

Сообщение от etc (Сообщение 1116651)
Скажите, а зачем вы восемь раз повторяете в этом коде выражение arrayForObjects[i]?

0 0 0
0 1 0
0 0 0

Если я не буду прибавлять или отнимать "ширину" и "высоту" квадрата, то он будет проверять только один квадрат (1).

etc 19.01.2013 19:41

Цитата:

Сообщение от Dip52 (Сообщение 1116655)
0 0 0
0 1 0
0 0 0

Если я не буду прибавлять или отнимать "ширину" и "высоту" квадрата, то он будет проверять только один квадрат (1).

Нет, вы не поняли вопроса. Зачем в исходном коде вы повторяете доступ к i-ому элементу массива целых 8 раз?


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

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