Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Каким проверить нажата ли кнопка? (http://www.flasher.ru/forum/showthread.php?t=144429)

gerasim13 12.09.2010 01:19

Как проверить нажата ли кнопка?
 
Есть у меня класс с помощью которого я создаю кнопки внутри флешки. Все работает хорошо,но необходимо сделать так что бы после нажатия кнопки она окрашивалась в другой цвет и после этого не реагировала на hover и клики. Если же нажать другую кнопку, та что была неактивна окрашивалась в исходный цвет и становилась опять активной. Знаю что все это решается через флаги, но вот как в моей ситуации поступить даже не представляю. Где их прописывать, внутри класса кнопок или в теле флешки?

вот так выглядит главный as скрипт(он находится в первом и единственном кадре моей флешки) :
Код AS3:

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));
        }
}

а вот так класс кнопок:
Код AS3:

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});
                        }
                }
        }
}


Obi 12.09.2010 07:24

Ну что за дурацкая привычка выкладывать простыни кода, из которого 90% к делу не относится? Делать больше нечего, как сидеть и ломать глаза, пытаясь ваш код прочитать.

Код AS3:

 
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();
    }
}

З.Ы.: Если в представленом коде есть какие-то косяки, то спишите это на утро субботы.


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

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