Форум: "Игры";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];
ВнизОрганизация OnClick у спарйта? Найти похожие ветки
← →
CMOS © (2007-06-29 21:51) [0]Как отследить клик мышкой по спрату?
Можно "поместить" спрайт в прямоугольник и отслеживать диапазон координат (x1<=X<=x2, y1<=Y<=y2).
В этом случае если я кликну мимо, я могу все равно попасть.
Можно взять массив с размером экрана (800х600, например). Занулить его. Далее запоминать точки, принадлежащие спрайту в этот массив (Если есть цвет в этой точке то заполняем номером). Спрайты не будут менять координаты. Но при удалении спрайта массив нужно заполнять снова. Да и при динамическом создании спрайта тоже массив заполнять.
Как можно сделать еще?
← →
grouzd)ev © (2007-06-29 22:37) [1]а где происходит действие? как реализованы спрайты?
если мышь попала в прямоугольник (хотя можно и не), посмотреть точку в которую попали на спрайте - прозрачная или нет
---
... we are walking on a thin line and you better avoid the risk ...
← →
ElectriC © (2007-06-30 01:17) [2]Спрайт в пространстве или на плоскости?
← →
@!!ex © (2007-06-30 09:17) [3]Самый элементарный и дебильный способ:
Рисуешь спрайти, получаешь проекциии координат четырех координат на экран, по этим 4 точкам получаешь четыре уравнения прямых, подставляешь в каждое из уравнений координаты мыши, если все четыре постановки дали отрицательное число - мыша на спрайте. Понятно что уравнение надо строить по часовой стрелке, если против часовой, то мышь внутри, если числа положительные.
← →
CMOS © (2007-06-30 22:28) [4]Спрайты реализованы через Asphyre (2D). Отрисовка AsphyreCanvas.Draw
Прямоуголник сразу не пойдет! Допустим, такой спрайт:
ОООООО
ООО
Х ООО
O - сам спрайт. Х - клик мышки в этом месте.
Получилось, я не попал на спрайт, но ОнКлик сработает, т.к. я попал в прямоугольник.
Проверить точку тоже не пойдет. Если на экране проверять - под спрайтами подложен фон. Если на спрайте проверять - спрайты рисуются под случайным углом и отображенными. А точку можно проверить только у AsphyreImage, которая хранится в исходном состоянии. А отображается повернутой.
Фишка с уравнениями прямых - получится четырехоугольник. Не пойдет также как и прямоугольник
← →
@!!ex © (2007-06-30 22:31) [5]> [4] CMOS © (30.06.07 22:28)
Бред вы городите. Как спрайт не врщай, всегда получается четырехугольник. Ферштейн?
← →
@!!ex © (2007-06-30 22:33) [6]Другое дело, если имеется ввиду, клик не по спрайту, а по видимой части спрайта. Это не одно и тоже.
Тогда самое простое - ALPHA_TEST+STENCIL_TEST.
← →
Домик (2007-06-30 22:52) [7]Еще как варинат: можно задавать для спрайта зону чувствительности многоугольником, а потом лишь проверять вхождение точки (курсора мыши) в этот многоугольник.
← →
Li-ion (2007-07-01 02:45) [8]Самый простой вариант. Создаешь для курсора спрайт 1х1 пиксель. Прикрепляешь чтоб он был постоянно в конце курсора. Потом в процедуре OnClick формы пишешь if <спрайт курсора> collisioned <со спрайтом который надо отследить> then <все шо тебе надо>
← →
Li-ion (2007-07-01 02:45) [9]И ненадо никаких уравнений прямых и т.д.
← →
@!!ex © (2007-07-01 09:00) [10]> [9] Li-ion (01.07.07 02:45)
гы-гы-гы. ЛОЛ. Ништяк.
А как вы будете считать коллизию без уравнений прямых и плосковстей, когда вся CD написана на этих уравнениях??? :))))
← →
Li-ion (2007-07-02 00:39) [11]to @!!ex
автор же написал что использует Asphyre, там уже за него CD все написано. Он же не спрашивал как написать CD, а просто как отследить клик мыши по спрайту.
← →
@!!ex © (2007-07-02 22:27) [12]>
> [11] Li-ion (02.07.07 00:39)
Ок.
ПРавда если яего правильно понял, это все равно не его вариант.
Хотя автор исчез и ни на что не реагирует, можно предположить, что проблему решил.
← →
Li-ion (2007-07-03 09:42) [13]хоть бы написал тут как он решил )
← →
CMOS © (2007-07-03 21:27) [14]Проблему почти решил.
Создал 1-битовую копию спрайта, далее...
Слышали что-нибудь про модули FastDIB, FastFX, FastDraw и т.д.?
Процедура
procedure Rotozoom(Src,Dst:TFastDIB;Angle:Double;Zoom:Integer;Smooth:Boolean);
Берет первую картинку, поворачивает, масштабирует, и присваевает полученное другой картинке.
Дальше проверяю цвет 1 или 0. Все это не на поверхности, а на самой картинке. Картинка увеличена и повернута.
Только один минус у этой процедуры она не работает с монохромными картинками (не предусмотренно). Не хочется держать в памяти еще одну 32-битную картинку, да еще увеличенную.
Проблема сводится к повороту и масштабированию 1-битовой картинки и СОХРАНЕНИЮ ее в Bitmap.
← →
Li-ion (2007-07-04 01:20) [15]Оригинально. Но мне кажется мой пример был намного проще и быстрее.
← →
CMOS © (2007-07-04 07:09) [16]А как организована коллизия в Asphyre? Проверка пересечения прямоугольников
← →
Li-ion (2007-07-04 14:18) [17]там есть 3 вида:
1) Прямоугольник
2) круг
3) Полигон, но его не реализовали :)
← →
CMOS © (2007-07-04 16:40) [18]>Проблема сводится к повороту и масштабированию 1-битовой картинки и СОХРАНЕНИЮ ее в Bitmap.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c