Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.08.2017, 16:03
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 21  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ловите клики от stage, и затем определяйте, на что нажал пользователь.
1) Проходимся по дисплей листу от ближайших до самых дальних элементов.
2) Если текущий пиксель существует на текущем элементе и он прозрачный - пропускаем элемент, иначе - возвращаем элемент.
__________________
There is no thing in this world that is not simple.

Старый 11.08.2017, 16:12
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 22  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
2 не совсем понял. Да и наличие битмапы можно не рассматривать.

Итак. Вот схема:
1 грузится картинка с прозрачностью. 100% альфа там где прозрачно, полутонов нет.
2. Создается bitmapData с прозрачностью. В неё рисуется наша картинка
(отсутпая от схемы подозреваю здесь костыль, который рисует как бы второй слой альфы я хз как это выразить)
3. создается bitmap с предыдушей -датой (шаг 2).
4. битмап помещается в спрайт.
5. слушается клик на спрайте
ну а дальше само решение должно быть.

на сцене создается несколько экземпляров этого класса с перекрытием но работает только верхние не закрытые. Может конечный контейнер работает, может еще что честно мозг выкипел давно и уже не соображаю. но по схеме же что раньше рисовал все должно быть понятно. Оба круга кликабельны должны быть то есть зависит от пользователя. И да твоё первое утверждение верно. в общем как так

Добавлено через 1 минуту
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
Ловите клики от stage, и затем определяйте, на что нажал пользователь.
то есть изобрести велосипед? аналогичный существующему MouseEvent.Click?

Добавлено через 4 минуты
на самом деле думал на эту тему, только не бегать по листу а ловить это событие внутри отдельного элемента и проверять его ли территория была под воздействием и какая она, но тогда боюсь что клики на пересечениях картинок будут вызывать событие во всех кто в данной точке не прозрачен.

Добавлено через 8 минут
То как я описываю построение не критично предложите свой рабочий вариант, может просто перекрою проект. Обязательное требование чтобы прокликивалось насквозь все прозрачное, а реагировать должен только предмет где клик пошел в непрозрачную область, и только один, по умолчанию верхний.

Старый 11.08.2017, 16:23
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 23  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Изобрести велосипед.
Нет, нужно проходиться по элементам от ближайшего до самого дальнего, находить первый, попавший в точку и затем диспатчить у него клик.
__________________
There is no thing in this world that is not simple.

Старый 11.08.2017, 16:27
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 24  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
это придется делать на уровне контейнера всех элементов, разве нет?

Старый 11.08.2017, 16:29
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 25  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Именно. Я бы быстро написал пример, если бы у меня были какие-то прозрачные битмапы под рукой.
__________________
There is no thing in this world that is not simple.

Старый 11.08.2017, 16:32
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 26  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 920
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Цитата:
Нет, нужно проходиться по элементам от ближайшего до самого дальнего, находить первый, попавший в точку и затем диспатчить у него клик.
Сделать из задачи константной сложности линейную?)

Вот, собственно чуть-чуть модифицированный вариант, если он вам подходит, то всё что там реализовано - я писал раннее здесь и здесь.
Вложения
Тип файла: swf example.swf (26.7 Кб, 61 просмотров)
__________________
ЛОДКИ

Старый 11.08.2017, 16:38
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 27  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Цитата:
Сообщение от FlashRus Посмотреть сообщение
Сделать из задачи константной сложности линейную?)

Вот, собственно чуть-чуть модифицированный вариант, если он вам подходит, то всё что там реализовано - я писал раннее здесь и здесь.
Даже не знаю с одной стороны вроде бы оно, но кажется не оно. Сейчас посмотрю еще раз ваши ответы и начну сначала писать. Хотя кажется ничего не выйдет.
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
Именно. Я бы быстро написал пример, если бы у меня были какие-то прозрачные битмапы под рукой.
Это вообще не приемлемо. Реагировать должен 1 элемент и реагировать на своей стороне а не контролировать его с другого контейнера и заставлять среагировать.

Добавлено через 2 минуты
FlashRus, кажется я понимаю в чем наше недопонимае. твоя Битмапа уже с дырками, а у меня их нет. Как-то так

Добавлено через 3 минуты
и еще. Если mouseenable = false разве такой обьект примет потом движение мыши, чтобы снова стало тру?

Добавлено через 14 минут
что и следовало ожидать
Код AS3:
import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.display.BlendMode;
	import flash.net.URLRequest;
	import flash.display.PixelSnapping;
	/**
	 * ...
	 * @author @PsYcHoTeChNiK
	 */
	public class Circles extends Sprite 
	{
		private var loadImage: Loader = new Loader();
		private var imgbtm: Bitmap;
		private var imgbtmdt: BitmapData;
		public function Circles() 
		{
			super();
			loadImage.contentLoaderInfo.addEventListener(Event.COMPLETE, onlocad);
			loadImage.load(new URLRequest("circle.png"));
 
		}
		private function onlocad(e:Event):void {
			imgbtmdt = new BitmapData(loadImage.content.width, loadImage.content.height, true,0);
			imgbtmdt.draw(loadImage.content);
			imgbtm = new Bitmap(imgbtmdt);
			//this.mouseEnabled = false;
			this.addChild(imgbtm);
			this.addEventListener(MouseEvent.CLICK, onClick);
			this.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
		}
		private function onMove(e:MouseEvent):void {
			var color32:uint = imgbtm.bitmapData.getPixel32(imgbtm.mouseX, imgbtm.mouseY);
			var a:uint = color32 >> 24 & 0xFF;
			this.mouseEnabled = a != 0;
		}
		private function onClick(e: MouseEvent):void
		{
			var color32:uint = imgbtm.bitmapData.getPixel32(imgbtm.mouseX, imgbtm.mouseY);
			var a:uint = color32 >> 24 & 0xFF;
			if (a == 0) {
 
				return;
			}
			this.x += 10;;
			e.updateAfterEvent();
		}
 
	}
Добавлено через 15 минут
движение мыши полностью деактивирует элемент.

Старый 11.08.2017, 17:07
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 28  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 920
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Цитата:
FlashRus, кажется я понимаю в чем наше недопонимае. твоя Битмапа уже с дырками, а у меня их нет. Как-то так
Это не важно. В той битмапе можно родить дырки в рантайме и ничего не изменится.

Цитата:
и еще. Если mouseenable = false разве такой обьект примет потом движение мыши, чтобы снова стало тру?
Маусмув надо вешать например, на стейдж. Вместо this напишите stage
__________________
ЛОДКИ

Старый 11.08.2017, 17:12
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 29  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Error: Call to a possibly undefined method addEventListener through a reference with static type Class.

Добавлено через 40 секунд
все равно ничего не меняется.

Добавлено через 3 минуты
вопрос на засыпку. А какого черта маска не дает никакого результата? разве она не должна продырявить как раз альфу? а она способна дырявить только изображение в моем случае

Старый 11.08.2017, 17:46
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 30  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 920
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Вот текстовые исходники.
Два квадрата, на которые можно кликнуть "сквозь" битмапу и один, на который кликнуть нельзя.
Как сделать битмапу с прозрачными пикселями в рантайме - это уже отдельная тема.
Вложения
Тип файла: zip Example.zip (450.0 Кб, 13 просмотров)
__________________
ЛОДКИ

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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