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

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

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Сделайте класс, который будет раздавать битмапы всем, а в кнопке напишите следующее:
Код AS3:
package com.ui
{
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.ColorTransform;
 
	public class Button extends Sprite
	{
		private var _bitmap:Bitmap;
		private var _originalColorTransform:ColorTransform;
		private var _onClick:Function;
 
		public function Button(onClick:Function)
		{
			this._onClick = onClick;
 
			if (super.stage)
				this.init();
			else 
				super.addEventListener(Event.ADDED_TO_STAGE, this.init);
		}
 
		private function init(e:Event = null):void
		{
			_bitmap = Images.getImage(Images.BUTTON);
			super.addChild(_bitmap);
 
			super.addEventListener(MouseEvent.ROLL_OVER, colorTransformEnable);
			super.addEventListener(MouseEvent.CLICK, clickHandler);
		}
 
		private function clickHandler(e:MouseEvent):void
		{
			_onClick();
		}
 
		private function colorTransformEnable(e:MouseEvent):void
		{
			_originalColorTransform = super.transform.colorTransform;
			var colorTransform:ColorTransform = new ColorTransform(_originalColorTransform.redMultiplier + 0.2, _originalColorTransform.greenMultiplier + 0.2, _originalColorTransform.blueMultiplier + 0.2);
			super.transform.colorTransform = colorTransform;
 
			super.removeEventListener(MouseEvent.ROLL_OVER, colorTransformEnable);
			super.addEventListener(MouseEvent.ROLL_OUT, colorTransformDisable);
		}
 
		private function colorTransformDisable(e:MouseEvent):void
		{
			super.transform.colorTransform = _originalColorTransform;
 
			super.removeEventListener(MouseEvent.ROLL_OUT, colorTransformDisable);
			super.addEventListener(MouseEvent.ROLL_OVER, colorTransformEnable);
		}
	}
}
А в классе-раздатчике битмапов просто сделайте простой метод, отдающий изображение по свитчу и по константе на каждое изображение(константы с числовым индексом, так красивее).
Естественно, в коде
Код AS3:
_bitmap = Images.getImage(Images.BUTTON);
- Пример получения битмапы.

A Main типа такого:
Код AS3:
package 
{
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.Event;
	public class Main extends Sprite
	{
		public function Main()
		{
			if (super.stage)
				this.init();
			else
				super.addEventListener(Event.ADDED_TO_STAGE, this.init);
		}
 
		private function init(e:Event = null):void
		{
			var button:Button = new Button(clickHandler);
			button.x = (stage.stageWidth - button.width) / 2;
			button.y = (stage.stageHeight - button.height) / 2;
			addChild(button);
		}
 
		private function clickHandler():void
		{
			trace("button is clicked");
		}
	}
}
Насчёт ColorTransform, то вышеприведённый код должен делать кнопку светлее при наведении(Однако сейчас он никак не отреагирует при нажатии, и дальше пилите сами)
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 04.05.2014 в 17:49.
Старый 04.05.2014, 17:34
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
2misha, cмотрите, у вас логическая ошибка получилась, там где вы создаёте кнопку. В вашу кнопку не добавляется ничего. Как и сказали выше, она у вас пустая. Почему же?
Код AS3:
var button: Button = new Button;
addChild(button.addButton(200, 200));
button.addEventListener(MouseEvent.CLICK, funButton);
----------------------
Код AS3:
addChild(button.addButton(200, 200));
Здесь вы добавляете на сцену (а не в кнопку button) некий спрайт с картинкой. Ведь в методе addButton ясно видно, что он создаёт спрайт и возвращает его
Код AS3:
public function addButton(x: int, y: int): Sprite
		{
			var button: Bitmap;
 
			button = new Embed();
 
			button.x = x;
			button.y = y;
 
			var sprite: Sprite = new Sprite();
			sprite.addChild(button);
 
			return sprite;
		}
Здесь нет ни намёка на то, что этот спрайт добавляется в кнопку.
------------------------
Вам нужно либо добавить при создании кнопки на сцене
Код AS3:
button.addChild(button.addButton(200, 200));
либо в методе addButton не возвращать спрайт, а просто добавить его в кнопку там же
Код AS3:
var sprite: Sprite = new Sprite();
sprite.addChild(button);
addChild(sprite);
------------------------
Но вся эта схема получается запутанной. Вам действительно лучше использовать фабрику для создания кнопок (с помощью статических методов).

Старый 04.05.2014, 17:49
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 3  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
samaha
Код AS3:
button.addChild(button.addButton(200, 200));
Когда так сделал, вообще кнопка перестала отображаться.


Код AS3:
var sprite: Sprite = new Sprite();
sprite.addChild(button);
addChild(sprite);
А когда так, то жалуется что функция не возвращается значение, ибо нет ретурна.

Старый 04.05.2014, 17:49
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 4  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
В тот же класс кнопки можно прямо в конструктор передавать текст, который должен на кнопке отображаться.

Добавлено через 5 минут
2misha, да хватит уже всякую фигню писать!
Пора бы уже задуматься над тем, что вам пишут и над тем, что пишите вы.

Добавлено через 11 минут
Код AS3:
Когда так сделал, вообще кнопка перестала отображаться.
Скорее всего потому, что вы не добавляете в Main екземпляр класса Button(addChild(button));

Добавлено через 12 минут
PHP код:
А когда такто жалуется что функция не возвращается значениеибо нет ретурна
Ну естественно, у вас наверное тип возвращаемого значения установлен Sprite?
__________________
There is no thing in this world that is not simple.

Старый 04.05.2014, 18:11
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 5  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
Да, Спрайт. Когда void поставил, тогда не работало тоже.

Добавлено через 2 минуты
Код AS3:
var button: Button = new Button;
addChild(button.addButton(200, 200));
button.addChild(button.addButton(200, 200));
button.addEventListener(MouseEvent.CLICK, funButton);
Добавляю.

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

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

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


 


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


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