Показать сообщение отдельно
Старый 21.06.2016, 00:28
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 8  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Берём это:
Цитата:
function onMouseDown(event:MouseEvent):void {
//brushPosition.x = event.stageX;
//brushPosition.y = event.stageY;
canvas.graphics.moveTo(event.stageX, event.stageY);
canvas.graphics.lineStyle(40, 0xff0000);

stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpOrLeave);
stage.addEventListener(Event.MOUSE_LEAVE, onMouseUpOrLeave);
}
Выносим в константу(так положено):
Код AS3:
const BRUSH_COLOR:uint = 0xFF0000;
Код AS3:
function onMouseDown(event:MouseEvent):void {
	//brushPosition.x = event.stageX;
	//brushPosition.y = event.stageY;
	canvas.graphics.moveTo(event.stageX, event.stageY);
	canvas.graphics.lineStyle(40, BRUSH_COLOR);
 
	stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
	stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpOrLeave);
	stage.addEventListener(Event.MOUSE_LEAVE, onMouseUpOrLeave);
}
Смотрим, что возвращает метод histogram:
Цитата:
This method returns a Vector object containing four Vector.<Number> instances (four Vector objects that contain Number objects). The four Vector instances represent the red, green, blue and alpha components in order. Each Vector instance contains 256 values that represent the population count of an individual component value, from 0 to 255.
Значит, мы можем брать статистику конкретного цвета, а не сравнивать отдельные компоненты.
Код AS3:
var ratio:Number = (rectToFill.histogram()[0][BRUSH_COLOR >> 16 & 0xFF] / (rectToFill.width*rectToFill.height) * 100;
var ratio2:Number = (rectToFill.histogram()[1][BRUSH_COLOR >> 8 & 0xFF] / (rectToFill.width*rectToFill.height)) * 100;
var ratio3:Number = (rectToFill.histogram()[2][BRUSH_COLOR & 0xFF] / (rectToFill.width*rectToFill.height)) * 100;
if (ratio == 100 && ratio2 == 100 && ratio3 == 100) {
	tf.text = int(ratio) + '% (готово!)';
} else if (ratio  >= 90 && ratio2 >= 90 && ratio3 >= 90) {
	tf.text = int(ratio) + '% (почти)';
} else if (ratio  >= 70 && ratio3 >= 70 && ratio4 >= 70) {
	tf.text = int(ratio) + '% (еще немножечко)';
} else {
	tf.text = int(ratio) + '%';
}
К сожалению, у меня нет сейчас Flash-среды нужной версии, в которой я смог бы протестировать код.
Ну и да, конечно в таком случае лучше вынести результат выполнения histogram в отдельную переменную.
UPD: забыл поменять с инверсии, сча...
__________________
There is no thing in this world that is not simple.