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

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

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

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


Последний раз редактировалось ZackMercury; 11.08.2017 в 18:32.
Старый 11.08.2017, 18:46
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 32  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 920
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Цитата:
По вашему, клик на уровне плеера обрабатывается с константной сложностью?
Следующий код выдаёт одинаковое время обработки клика как для 10-и, так и для 1 000 000 спрайтов.

Код AS3:
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
 
var sprite:Sprite = new Sprite();
var tf:TextField = new TextField();
var lastTime:Number = 0;
 
init();
 
function init():void {
	addChild(sprite);
	tf.background = true;
	addChild(tf);
 
	for (var i = 0; i < 10; i++) {
		sprite.addChild(make());
	}
 
	stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler, true);
	sprite.addEventListener(MouseEvent.CLICK, clickhandler);
}
 
function make():Sprite {
	var sprite:Sprite = new Sprite();
	sprite.graphics.beginFill(Math.random() * 0xFFFFFF);
	sprite.graphics.drawCircle(0, 0, 10);
	sprite.graphics.endFill();
	sprite.x = Math.random() * 550;
	sprite.y = Math.random() * 400;
	return sprite;
}
 
function mouseDownHandler(e:MouseEvent):void {
	lastTime = getTimer();
}
 
function clickhandler(e:MouseEvent):void {
	tf.text = (getTimer() - lastTime).toFixed(0);
}
__________________
ЛОДКИ

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Может потому, что MOUSE_DOWN УЖЕ находит объект, на который нажимается, включается в обработку клика, и записывает объект, который потом при получении MOUSE_UP дёргает? Есть явная разница в скорости реакции отображения данных в текстовом поле с разным кол-вом спрайтов, явно, что задержка происходит до MOUSE_DOWN.
Просто это как-то неправдоподобно совсем.
Ещё раз, я невероятнейше сомневаюсь, что каждый пиксель ссылается на объект.


Ага, а ещё интересней, если нажать и подержать мышку.
Таки да, при отпускании мыши некая разница в скорости есть при отображении данных. На цифры можно не смотреть, они ничего не значат.
Если очень быстро нажимать, то у меня выходит, что цифры различаются, с увеличением кол-ва объектов увеличивается и отклик.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 11.08.2017 в 19:48.
Старый 11.08.2017, 20:04
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 34  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 920
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Мне там следовало взять тоже MOUSE_DOWN. Задержка происходит из-за разницы во времени между DOWN и UP.
Доберусь до компа - ещё найду способы проверить.
Может даже в исходниках тамарина ковырну.
__________________
ЛОДКИ

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

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

Старый 11.08.2017, 20:42
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 36  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
скорее всего fp использует что-нибудь типа quad tree для поиска пересечений, поэтому тут сложность скорее не линейная, а логарифмическая.

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

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

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

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

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


 


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


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