Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Воздействие методов класса на объекты в Main (http://www.flasher.ru/forum/showthread.php?t=207723)

ZackMercury 04.05.2014 17:31

Сделайте класс, который будет раздавать битмапы всем, а в кнопке напишите следующее:
Код 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, то вышеприведённый код должен делать кнопку светлее при наведении(Однако сейчас он никак не отреагирует при нажатии, и дальше пилите сами)

samana 04.05.2014 17:34

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

------------------------
Но вся эта схема получается запутанной. Вам действительно лучше использовать фабрику для создания кнопок (с помощью статических методов).

2misha 04.05.2014 17:49

samaha
Код AS3:

button.addChild(button.addButton(200, 200));

Когда так сделал, вообще кнопка перестала отображаться.


Код AS3:

var sprite: Sprite = new Sprite();
sprite.addChild(button);
addChild(sprite);

А когда так, то жалуется что функция не возвращается значение, ибо нет ретурна.

ZackMercury 04.05.2014 17:49

В тот же класс кнопки можно прямо в конструктор передавать текст, который должен на кнопке отображаться.

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

Добавлено через 11 минут
Код AS3:

Когда так сделал, вообще кнопка перестала отображаться.

Скорее всего потому, что вы не добавляете в Main екземпляр класса Button(addChild(button));

Добавлено через 12 минут
PHP код:

А когда такто жалуется что функция не возвращается значениеибо нет ретурна

Ну естественно, у вас наверное тип возвращаемого значения установлен Sprite?

2misha 04.05.2014 18:11

Да, Спрайт. Когда 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, время: 20:23.

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