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

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

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

Регистрация: Sep 2007
Сообщений: 82
Attention Закрасить объекты, протащив по ним курсор

Задача: есть много мувиклипов разной формы, все проименованы от q1 ... q500. По клику они должны закрашиваться в определенный цвет. Чтобы было удобнее, можно зажать конпку мыши протащить курсор по нужным объектам.

Исходник и swf в аттаче.

Я сделал это, но нельзя закрасить все сразу, только по 10 за раз. Жмем пробел, счетчик увеличивается на 10, и мы можем закрасить еще 10 штук. Это ограничение я поставить не могу. Функция работает через onMouseDown, проверяет на hitTest, поэтому декремент срабатывает даже когда я двигаю мышь в пределах одного и того же мувиклипа, и все "заряды" с легкостью уходят на один мувик. Есть идеи как это исправить?



Код AS1/AS2:
numOfSq = 10;
function fillColor()
{
	for (i = 1; i < 87; i++)
	{
		if (_root['q' + i].hitTest(_root._xmouse, _root._ymouse, true) && numOfSq != 0)
		{
			_root['c' + i].setRGB(color);
			//numOfSq--;
		}
	}
}
// Вешаем цвета на кнопки
keyer = new Object();
keyer.onKeyDown = function()
{
	if (Key.getAscii() == ord('q'))
	{
		color = 0xff0000;
	}
	if (Key.getAscii() == ord('w'))
	{
		color = 0x00ff00;
	}
	if (Key.getAscii() == ord('e'))
	{
		color = 0x0000ff;
	}
	if (Key.getCode() == Key.SPACE)
	{
		numOfSq+=10;
	}
};
Key.addListener(keyer);
// Создаем переменные вида c_1, c_2... для объектов q_1, q_2...
for (i = 0; i < 87; i++)
{
	this['c' + i] = new Color(this['q' + i]);
}
// Запускаем нашу функцию по клику мышью
onMouseDown = function ()
{
	fillColor();
	onMouseMove = function ()
	{
		fillColor();
	};
};
//Убираем закрашивание, если кнопка мыши отпущена
onMouseUp = function ()
{
	delete onMouseMove;
};
Вложения
Тип файла: zip color.zip (11.2 Кб, 39 просмотров)
Тип файла: swf color.swf (1.5 Кб, 40 просмотров)
__________________
Прежде чем создавать новый трэд, лучше лишний раз глянуть в дебаггер

Старый 19.08.2010, 16:27
S.Petrov вне форума Посмотреть профиль Отправить личное сообщение для S.Petrov Найти все сообщения от S.Petrov
  № 2  
Ответить с цитированием
S.Petrov

Регистрация: Jul 2010
Сообщений: 13
Думаю можно по нажатию на кнопку мыши вызвать setInterval и потом проверять к примеру каждые 100 миллисекунд находится ли курсор над клипом и закрашивать этот клип. По отпусканию кнопки - clearInterval. Не уверен, что это лучшее решение, но можно попробовать.


Последний раз редактировалось S.Petrov; 19.08.2010 в 17:18.
Старый 19.08.2010, 22:52
dlinnii вне форума Посмотреть профиль Отправить личное сообщение для dlinnii Найти все сообщения от dlinnii
  № 3  
Ответить с цитированием
dlinnii
 
Аватар для dlinnii

Регистрация: Sep 2007
Сообщений: 82
Я не мог определить с каким именно объектом хиттестит мышка, потому что вешаю функцию через цикл сразу на много объектов (с классами толком работать не умею).

Сейчас придумал ввести новую переменную, которая содержит текущий объект, который легко найти по i внутри hitTest - там уже нужный мне, а не 1-86, т.к. хиттестится с одним объектом одновременно. Вот измененная функция, если кому то потребуется похожая:
Код AS1/AS2:
function fillColor() {
	for (i=1; i<87; i++) {
		if (this['q'+i].hitTest(_root._xmouse, _root._ymouse, true) && numOfSq != 0) {
			_root['c'+i].setRGB(color);
			if ('q'+i != temp) {
				numOfSq--;
			}
			trace (numOfSq);
			temp = 'q'+i;
		}
	}
}
__________________
Прежде чем создавать новый трэд, лучше лишний раз глянуть в дебаггер

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

Регистрация: Jun 2008
Сообщений: 205
а сохранять предыдущий объект который был уже закрашен религия не позволяет? и при чем тут ваше умение или неумение работать с классами?

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

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

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


 


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


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