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

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

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

Регистрация: May 2011
Сообщений: 4
Question Помогите с работой с текущими объектами

Не знала, как точно назвать эту проблему, но суть такова: я создаю объект (квадрат) с помощью функции, передавая в неё параметры из другой функции, которая вызывается при клике на т.н. панель инструментов внизу экрана.
Как это всё выглядит: http://img0.liveinternet.ru/images/a...0031_task4.swf
Если происходит нажатие на квадрат, всплывает меню с опциями поворота и перекрашивания.
Так вот вопрос: При выборе пункта "поворот" или "перекрасить" должен перекраситься текущий объект (я чую, что необходимо использовать this), но у меня поворачиваются все квадраты на экране( Как модифицировать код, чтобы поворачивался текущий объект?

Пробовала делать повторение одного и того же куска кода семь раз, но с разными размерами квадрата, однако это решение какое-то совсем не изящное.
Буду благодарна за помощь, т.к. в as3 работаю всего ничего и самой мне так сразу не разобраться.

Кусок кода
Код AS3:
function Cube1Tool(e:MouseEvent):void
{
	CubeTool(1,12.5,acube1);			
}
function Cube2Tool(e:MouseEvent):void
{
	CubeTool(2,25,acube2);			
}
function Cube3Tool(e:MouseEvent):void
{
	CubeTool(3,50,acube3);			
}
function Cube4Tool(e:MouseEvent):void
{
	CubeTool(4,75,acube4);			
}
function Cube5Tool(e:MouseEvent):void
{
	CubeTool(5,100,acube5);			
}
function Cube6Tool(e:MouseEvent):void
{
	CubeTool(6,150,acube6);			
}
function Cube7Tool(e:MouseEvent):void
{
	CubeTool(7,200,acube7);			
}
 
 
function CubeTool(a:int,siz:Number,acube:Object):void
{
	acube.visible=true;
	var rect:Sprite = new Sprite();
	rect.graphics.lineStyle(2,0xffffff);
	rect.graphics.beginFill(0x000000);
	rect.graphics.drawRect(-siz/2,-siz/2,siz,siz);
	rect.graphics.endFill();
	rect.x+=282.5;
	rect.y+=150;
	addChild(rect);
	board.addChild(rect);
	acube.addEventListener(MouseEvent.MOUSE_UP, AcubeTool);
	rect.addEventListener(MouseEvent.MOUSE_DOWN, Popup);
	rect.addEventListener(MouseEvent.MOUSE_DOWN, drag);
	rect.addEventListener(MouseEvent.MOUSE_UP, stopdrag);
 
	function drag(e:MouseEvent):void 
	{
		rect.startDrag();
	}
 
	function stopdrag(e:MouseEvent):void 
	{
		rect.stopDrag();
	}	
 
	function Popup(e:MouseEvent):void
	{
		popupmenu.visible=true;
		popupmenu.rollright.addEventListener(MouseEvent.MOUSE_UP, RollR);
		popupmenu.rollleft.addEventListener(MouseEvent.MOUSE_UP, RollL);
		popupmenu.repaintTool.addEventListener(MouseEvent.MOUSE_UP, RepaintTool);
 
		function RollR(e:MouseEvent):void
		{
			rect.rotation += 15;
			popupmenu.visible=false;
		}
		function RollL(e:MouseEvent):void
		{
			rect.rotation -= 15;
			popupmenu.visible=false;
		}
 
		function RepaintTool(e:MouseEvent):void
		{
			var colorInfo:ColorTransform = rect.transform.colorTransform;
			colorInfo.color = 0x123456;
			rect.transform.colorTransform = colorInfo;
			popupmenu.visible=false;
		}
	}
 
	function AcubeTool(e:MouseEvent):void
	{
		acube.visible=false;
		RemoveObject.remove(rect);
		addChild(rect);
		RemoveObject.remove(rect); 	
	}
}


Последний раз редактировалось udaaff; 06.06.2011 в 02:31.
Старый 06.06.2011, 13:30
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 2  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Здесь на мой взгляд лучше будет сохранять ссылку на выбранный объект и вертеть уже её.
Код AS3:
package  {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	public class NewClass extends Sprite {
		private var sprite:Sprite;
		private var spriteVar:Object;
 
		public function NewClass() {
			var button:Sprite = new Sprite(); //Круглая кнопка вращения
			button.graphics.lineStyle(0);
			button.graphics.beginFill(0x883355);
			button.graphics.drawCircle (50, 50, 25);
			button.graphics.endFill();
			addChild(button);
			button.buttonMode = true;
			button.addEventListener(MouseEvent.CLICK, rotateSprite);
			createRect(50, 100, 70, 58);
			createRect(150, 100, 80, 68);
			createRect (250, 100, 90, 78);	
		}
 
		private function createRect(xPosition:Number, yPosition:Number, width:Number, height:Number):void {
			sprite = new Sprite();
			sprite.graphics.lineStyle(2);
			sprite.graphics.beginFill(0x668800);
			sprite.graphics.drawRect(0, 0, width, height);
			sprite.graphics.endFill();
			addChild(sprite);
			sprite.x = xPosition;
			sprite.y = yPosition;
			sprite.buttonMode = true;
			sprite.addEventListener(MouseEvent.CLICK, onClick);
		}
 
		private function onClick(event:MouseEvent):void {
			spriteVar = event.target; //при нажатии на квадрат, сохраняем на него ссылку
		}
 
		private function rotateSprite(event:MouseEvent):void {
			if (spriteVar != null) {
				trace (spriteVar);
				spriteVar.rotation += 15; //крутим ссылку
			} else {
				trace ("Please, select rectangle first.");
			}
		}
	}
}
__________________
Нормально делай — нормально будет!


Последний раз редактировалось tsarapkabel; 06.06.2011 в 13:32.
Старый 06.06.2011, 13:44
MAPUTO вне форума Посмотреть профиль Отправить личное сообщение для MAPUTO Найти все сообщения от MAPUTO
  № 3  
Ответить с цитированием
MAPUTO
 
Аватар для MAPUTO

Регистрация: Mar 2011
Сообщений: 38
В функцию вращения не мешало бы добавить ссылку на объект и обращение уже будет идти не к rect, а к нужному имени объекта через ссылку.

А лучше использовать не rect, а acube
Код AS3:
		function RollR(e:MouseEvent):void
		{
			acube.rotation += 15;
			popupmenu.visible=false;
		}
		function RollL(e:MouseEvent):void
		{
			acube.rotation -= 15;
			popupmenu.visible=false;
		}


Последний раз редактировалось MAPUTO; 06.06.2011 в 13:52.
Старый 06.06.2011, 20:13
alkven вне форума Посмотреть профиль Отправить личное сообщение для alkven Найти все сообщения от alkven
  № 4  
Ответить с цитированием
alkven
 
Аватар для alkven

Регистрация: May 2011
Сообщений: 4
tsarapkabel, ооо.
Цитата:
Сообщение от tsarapkabel Посмотреть сообщение
Здесь на мой взгляд лучше будет сохранять ссылку на выбранный объект и вертеть уже её.
Ммм, я думала про нечто подобное, пыталась имена присваивать спрайтам, но до ссылок я не додумалась, всё-таки очень тяжело идёт ещё флэш)
Спасибо большое за подсказку, всё получилось! Изменила так:

Код AS3:
function CubeTool(a:int,siz:Number,acube:Object):void
{
	acube.visible=true;
	var rect:Sprite = new Sprite();
	rect.graphics.lineStyle(2,0xffffff);
	rect.graphics.beginFill(0x000000);
	rect.graphics.drawRect(-siz/2,-siz/2,siz,siz);
	rect.graphics.endFill();
	rect.x+=282.5;
	rect.y+=150;
	addChild(rect);
	board.addChild(rect);
	acube.addEventListener(MouseEvent.MOUSE_UP, AcubeTool);
	rect.addEventListener(MouseEvent.MOUSE_DOWN, Popup);
	rect.addEventListener(MouseEvent.MOUSE_DOWN, drag);
	rect.addEventListener(MouseEvent.MOUSE_UP, stopdrag);
	rect.buttonMode = true;
	rect.addEventListener(MouseEvent.CLICK, onClick);
 
	function onClick(event:MouseEvent):void 
	{
		spriteVar = event.target; //при нажатии на квадрат, сохраняем на него ссылку
	}
 
	function drag(e:MouseEvent):void 
	{
		rect.startDrag();
	}
 
	function stopdrag(e:MouseEvent):void 
	{
		rect.stopDrag();
	}	
 
	function Popup(e:MouseEvent):void
	{
		popupmenu.visible=true;
		popupmenu.rollright.addEventListener(MouseEvent.MOUSE_UP, RollR);
		popupmenu.rollleft.addEventListener(MouseEvent.MOUSE_UP, RollL);
		popupmenu.repaintTool.addEventListener(MouseEvent.MOUSE_UP, RepaintTool);
 
		function RollR(e:MouseEvent):void
		{
			if (spriteVar != null) 
			{
				trace (spriteVar);
				spriteVar.rotation += 15; //крутим ссылку
			}
			else 
			{
				trace ("Please, select rectangle first");
			}
			//rect.rotation += 15;
			popupmenu.visible=false;
		}
		function RollL(e:MouseEvent):void
		{
			if (spriteVar != null) 
			{
				trace (spriteVar);
				spriteVar.rotation -= 15; //крутим ссылку
			}
			else 
			{
				trace ("Please, select rectangle first");
			}
			//rect.rotation -= 15;
			popupmenu.visible=false;
		}
 
		function RepaintTool(e:MouseEvent):void
		{
			var colorInfo:ColorTransform = rect.transform.colorTransform;
			if (spriteVar != null) 
			{
				trace (spriteVar);
				colorInfo.color = 0x123456;
				spriteVar.transform.colorTransform = colorInfo;// apply the change to the display object
				popupmenu.visible=false;
			}
			else 
			{
				trace ("Please, select rectangle first");
			}
 
		}
	}
 
	function AcubeTool(e:MouseEvent):void
	{
		acube.visible=false;
		RemoveObject.remove(rect); 
		addChild(rect); 
		RemoveObject.remove(rect); 		
	}
}
MAPUTO, дада, ссылки были здравым решением. Кстати объект acube - это квадраты с галочками на панели инструментов. Они в принципе не связаны с rect.

Спасибо ещё раз за помощь!
__________________
Всего понемножку

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

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

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


 


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


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