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

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

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

Регистрация: Jul 2008
Сообщений: 35
По умолчанию Как проверить нажата ли кнопка?

Есть у меня класс с помощью которого я создаю кнопки внутри флешки. Все работает хорошо,но необходимо сделать так что бы после нажатия кнопки она окрашивалась в другой цвет и после этого не реагировала на 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});
			}
		}
	}
}


Последний раз редактировалось gerasim13; 12.09.2010 в 03:56. Причина: Опечатка в заголовке
Старый 12.09.2010, 07:24
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 2  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Ну что за дурацкая привычка выкладывать простыни кода, из которого 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();
    }
}
З.Ы.: Если в представленом коде есть какие-то косяки, то спишите это на утро субботы.
__________________
#flasher@irc.trg.ru:6667

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

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

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


 


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


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