![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2011
Сообщений: 4
|
Не знала, как точно назвать эту проблему, но суть такова: я создаю объект (квадрат) с помощью функции, передавая в неё параметры из другой функции, которая вызывается при клике на т.н. панель инструментов внизу экрана.
Как это всё выглядит: http://img0.liveinternet.ru/images/a...0031_task4.swf Если происходит нажатие на квадрат, всплывает меню с опциями поворота и перекрашивания. Так вот вопрос: При выборе пункта "поворот" или "перекрасить" должен перекраситься текущий объект (я чую, что необходимо использовать this), но у меня поворачиваются все квадраты на экране( Как модифицировать код, чтобы поворачивался текущий объект? Пробовала делать повторение одного и того же куска кода семь раз, но с разными размерами квадрата, однако это решение какое-то совсем не изящное. Буду благодарна за помощь, т.к. в 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. |
|
|||||
|
Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
|
Здесь на мой взгляд лучше будет сохранять ссылку на выбранный объект и вертеть уже её.
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. |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 38
|
В функцию вращения не мешало бы добавить ссылку на объект и обращение уже будет идти не к rect, а к нужному имени объекта через ссылку.
А лучше использовать не rect, а acube Последний раз редактировалось MAPUTO; 06.06.2011 в 13:52. |
|
|||||
|
Регистрация: May 2011
Сообщений: 4
|
tsarapkabel, ооо.
Цитата:
Спасибо большое за подсказку, всё получилось! Изменила так: 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); } } Спасибо ещё раз за помощь!
__________________
Всего понемножку |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|