![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2008
Сообщений: 35
|
Есть у меня класс с помощью которого я создаю кнопки внутри флешки. Все работает хорошо,но необходимо сделать так что бы после нажатия кнопки она окрашивалась в другой цвет и после этого не реагировала на hover и клики. Если же нажать другую кнопку, та что была неактивна окрашивалась в исходный цвет и становилась опять активной. Знаю что все это решается через флаги, но вот как в моей ситуации поступить даже не представляю. Где их прописывать, внутри класса кнопок или в теле флешки?
вот так выглядит главный as скрипт(он находится в первом и единственном кадре моей флешки) : import flash.display.Sprite; import flash.display.MovieClip; import flash.events.Event; import flash.events.ProgressEvent; import com.greensock.*; import com.greensock.dataTransfer.*; import com.usesystems.*; var pre:Preload; var xmlManager:XMLManager = new XMLManager(); xmlManager.addEventListener(Event.COMPLETE, onComplete); xmlManager.load("banner.xml"); var imgName:Array=new Array ; var btnName:Array=new Array ; var descTxt:Array=new Array ; var bgColor:Array=new Array ; var imgLink:Array=new Array ; var pictPos:Array=new Array ; function onComplete(event:Event):void { var objArray:Array=xmlManager.parsedObject.item; for (var i:int=0; i<objArray.length; i++) { imgName.push(objArray[i].img); btnName.push(objArray[i].btnname); descTxt.push(objArray[i].desc); bgColor.push(objArray[i].bgcolor); imgLink.push(objArray[i].href); } pre=new Preload(imgName); pre.addEventListener("preloadProgress", onPreloadProgress); pre.addEventListener("preloadComplete", onPreloadComplete); //trace("current image is: "+imgName[0]); } function onPreloadProgress(e:Event) { textfield.text=e.target.percLoaded+"% loaded"; this.loaderBar.width=e.target.percLoaded*2; } function onPreloadComplete(e:Event) { this.loaderBar.width=100*2; textfield.text="Loading complete"; pre.removeEventListener("preloadProgress", onPreloadProgress); pre.removeEventListener("preloadComplete", onPreloadComplete); //trace(pre.objects); showImages(pre.objects); showButtons(); } function showImages(o:Array) { var photoContainer:MovieClip = new MovieClip(); var imgWidth=600; var imgHeight=stage.stageHeight; photoContainer.x=295; photoContainer.y=0; //photoContainer.alpha=0; addChild(photoContainer); for (var i:int=0; i<o.length; i++) { o[i].width=imgWidth; o[i].height=imgHeight; o[i].y=imgHeight*i; pictPos.push(imgHeight*i); photoContainer.addChild(o[i]); } //trace(pictPos[1]); } function showButtons() { var btn:uButton; var btnHeight=stage.stageHeight/btnName.length; for (var i:int=0; i<btnName.length; i++) { addChild(btn=new uButton(btnName[i],0xb72947,0x6b6d75,0x545660,294,btnHeight-1,"Arial",11,0xffffff,btnHeight*i)); } } package com.usesystems{ import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; import flash.events.MouseEvent; import flash.text.TextFormatAlign; import flash.text.TextFieldAutoSize; import flash.ui.Mouse; import com.greensock.*; public class uButton extends Sprite { public var text:TextField; public function uButton(label:String,activeColor:int=0xddbbff,color:int=0xbbddff, hoverColor:int=0xffddbb,width:int=200,height:int=200, font:String="Helvetica",fontSize:Number=24,fontColor:int=0x333333, buttonY:Number=0,buttonX:Number=0):void { var box:Sprite=new Sprite ; box.graphics.beginFill(color); box.graphics.drawRect(0,0,width,height); box.mouseChildren=false; x=buttonX; y=buttonY; text=new TextField ; text.selectable=false; var newTextFormat:TextFormat=new TextFormat(font,fontSize,fontColor); text.defaultTextFormat=newTextFormat; text.text=label.toUpperCase(); text.autoSize=TextFieldAutoSize.LEFT; text.y=height/2-text.textHeight/2; addChild(box); addChild(text); addEventListener(MouseEvent.MOUSE_DOWN, buttonOnClick); addEventListener(MouseEvent.MOUSE_UP, buttonOutClick); addEventListener(MouseEvent.ROLL_OVER, buttonOnHover); addEventListener(MouseEvent.ROLL_OUT, buttonOutHover); function buttonOnHover(e:MouseEvent = null):void { Mouse.cursor="button"; changeColor(box,hoverColor); } function buttonOutHover(e:MouseEvent = null):void { Mouse.cursor="arrow"; changeColor(box,color); } function buttonOnClick(e:MouseEvent):void { addEventListener(MouseEvent.ROLL_OUT, buttonOutRoll); } function buttonOutRoll(e:MouseEvent):void { removeEventListener(MouseEvent.ROLL_OUT, buttonOutRoll); } function buttonOutClick(e:MouseEvent):void { changeColor(box,activeColor); removeEventListener(MouseEvent.ROLL_OUT, buttonOutRoll); } function changeColor(object:Object,color:int):void { TweenMax.to(object, 0.2, {tint:color}); } } } } Последний раз редактировалось gerasim13; 12.09.2010 в 03:56. Причина: Опечатка в заголовке |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Ну что за дурацкая привычка выкладывать простыни кода, из которого 90% к делу не относится? Делать больше нечего, как сидеть и ломать глаза, пытаясь ваш код прочитать.
class ButtonExamle { private var _selectedButton:MyButton; public function ButtonExample() { var btn1:MyButton = new MyButton(); btn1.addEventListener(MouseEvent.CLICK, buttonClickHandler); var btn2:MyButton = new MyButton(); btn2.addEventListener(MouseEvent.CLICK, buttonClickHandler); } private function buttonClickHandler(event:MouseEvent):void { var pressedButton:MyButton = event.currentTarget as MyButton; if(_selectedButton && pressedButton != _selectedButton) { _seletedButton.selected = false; pressedButton.selected = true; } } } class MyButton extends Sprite { private var _selected:Boolean; public function MyButton():void { // draw button } public function set selected(value:Boolean):void { if(value != _selected) { value = _selected; mouseEnabled = !_selected; drawButton(_selected); } } private function drawButton(selected:Boolean):void { selected ? drawSelectedState() : drawDefaultState(); } }
__________________
#flasher@irc.trg.ru:6667 |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:43. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|