Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   И все-таки как сделать кнопку (http://www.flasher.ru/forum/showthread.php?t=85939)

shaltay 04.10.2006 09:06

И все-таки как сделать кнопку
 
Недавно уже задавал этот вопрос, но меня не совсем поняли.. МНе нужно сделать такую кнопку, область зоны наведения и область зоны нажатия которой несовпадают... Кто-то мне помог и прислал макет кнопки, которая при наведении открывает еще одну кнопку.. Но! Мне надо, что-б если отвести мышь от первой, то вторай кнопка исчезала.
Единственный вариант, который я полагаю должен существовать - это сделать две кнопки с граничащими зонами нажатия. И сделать на первой кнопке такой код, что-б при наведении на нее вылезала вторая и можно перемещать мышку с одной на вторую (и в итоге нажать на вторую и перейти по ссылке), а при отведении мыши от первой и от второй вторая должна исчезнуть.........
Вот.. Никто случаем не в курсе, как реализовать мою больную идею?

Juice_Green 04.10.2006 10:33

может быть это подойдет?
Код:

function drawButton(clip:MovieClip, coords:Object, color:Number):Void {
        clip.beginFill(color, 100);
        clip.lineStyle(1, 0x000000, 100);
        clip.moveTo(coords._x1, coords._y1);
        clip.lineTo(coords._x2, coords._y1);
        clip.lineTo(coords._x2, coords._y2);
        clip.lineTo(coords._x1, coords._y2);
        clip.endFill();
        }

this.createEmptyMovieClip("but1", this.getNextHighestDepth());
this.createEmptyMovieClip("but2", this.getNextHighestDepth());
this['but2']._visible = false;

drawButton(this['but1'], {_x1: 100, _y1:100, _x2: 300, _y2: 300}, 0xCCCCCC);
drawButton(this['but2'], {_x1: 150, _y1:150, _x2: 250, _y2: 250}, 0xFF0000);

this['but1'].onRollOver = function():Void {
        this._parent['but2']._visible = true;
        }
       
this['but1'].onRollOut = function():Void {
        this._parent['but2']._visible = false;
        }

this['but2'].onRollOver = function():Void {
        this._visible = true;
        }

this['but2'].onPress = function():Void {
        trace("Кнопка нажата");
        }


shaltay 04.10.2006 11:14

что-то я не очень понимаю. а куда первые коды вписывать??

Juice_Green 04.10.2006 11:16

вставьте весь код в главный фрейм и посмотрите результаты работы

shaltay 04.10.2006 12:45

Не, в вашем файле вторая кнопка находится в области первой, а мне хотелосьбы, что-б она была сама по себе. Но все равно спасибо за код, я его попробую применить..
И кстати, можно-ли сделать так, что-б при наведении на первую кнопку (если ее сделать мувиком) стрелка не менялась на руку?

Juice_Green 04.10.2006 13:01

по поводу руки смотреть свойство useHandCursor.
вторая кнопка находится не в первой, а над ней.

shaltay 04.10.2006 13:48

Вложений: 1
Ну а надо, что-б отдельно была. В этом и сложность. Надо, что-б вторая кнопка отображалась при наведении на первую.

Я вот сделал пример, только надо что-б можно было и на вторую кнопку нажать...

shaltay 04.10.2006 14:30

а где это свойство useHandCursor??

Juice_Green 04.10.2006 14:37

собственно у самого объекта мувиклип

shaltay 04.10.2006 15:04

у меня такого нет.. у меня 2004 флэш. может, там нет такого?
а что с кнопкой?

iNils 04.10.2006 15:31

Цитата:

Сообщение от shaltay
у меня такого нет.. у меня 2004 флэш. может, там нет такого?
а что с кнопкой?

Это и в mx было.

shaltay 04.10.2006 15:44

и можно и с кнопкой и с клипом такое вытворять? Или с кнопкой нельзя? Просто не могу нигде найти эту функцию. Правда у меня Флэш русифицирован, может как-то странно называется...

Juice_Green 04.10.2006 15:58

2 shaltay:
в хелпе же все расписано до нельзя хорошо:

формат такой
Код:

my_instance_btn.useHandCursor = true/false;
my_instance_movieclip.useHandCursor = true/false;


shaltay 04.10.2006 16:36

и куда это засовывать?....
Вы уж меня извините все, я AS вторую неделю изучаю.. Но вроде получается. Значит талант))

Хемуль 04.10.2006 17:05

2 shaltay:
Посмотрите моё последнее сообщение в этой теме:
http://flasher.ru/forum/showthread.php?t=85683&page=3

shaltay 04.10.2006 17:14

Спасибо Хемуль! Как раз то, что я искал уже 3 дня)))))). Только там все так сложно. Неужели проще не написать....

Хемуль 04.10.2006 17:48

2 shaltay:
Ну... Почему же сложно? Вы если что-то там сложным считаете, спрашивайте. Вот увидите, когда начнёте понимать каждую строчку кода, всё не будет казаться таким большим по размеру кода и сложным для общего восприятия.
И вы вообще учтите, что этот пример делался для динамического формирования кнопок выпадающего меню. Я не знаю, какие цели вы перед собой ставите в конечном итоге. Может вам и не нужен такой сложный код... Я просто дал ссылку, поскольку подумал, что вас интересуют проблемы, которые поднимались в той теме.
Вы спрашивайте, если что-то непонятно...

shaltay 04.10.2006 17:59

меня интересует пока только что-б было так, как я показал в своем файле (выше).
Но мне нужно и с динамическим формированием. Я попробую проанализировать весь код, модет что и пойму. Буду обращаться, обязательно)))

shaltay 04.10.2006 18:05

Хемуль, в таком случае может подскажите, можно ли сделать так, что-б при наведении на первую кнопку стрелка не менялась на рук, а уже при наведении на вторую менялась. И если можно, то как?
И если не сложно, может подредактируете мой файл..

Хемуль 04.10.2006 18:14

2 shaltay:
В том варианте, который предложил я, не так всё просто. По сути рука появляется, когда курсор наводится на мувиклип. На мувиклипы выпадающих кнопок рука не наводится. Мы попадание в них проверяем не событиями ихними. Но сделать можно, хоть и не очень красиво... Новый код будет иметь вид:
Код:

var buttonHeight:Number = 24;
var buttonCaption:String = "НАВОДИТЬ СЮДА"
var buttonX:Number = 100;
var buttonY:Number = 100;

var dropDowns:Array = new Array();
dropDowns.push("ПУНКТ 1");
dropDowns.push("ПУНКТ 2");
dropDowns.push("ПУНКТ 3");
var dropDownHeight:Number = 24;

var dropDownTextColor:Number = 0x000000;
var dropDownHoverTextColor:Number = 0xFF0000;

this.attachMovie("button", "button", this.getNextHighestDepth(), {_x:buttonX, _y:buttonY});
this.button.label.caption.text = buttonCaption;
this.button.useHandCursor = false;
setColor(this.button.label, dropDownTextColor);

function setColor(MC:MovieClip, colorToSet:Number)
{
        var newColor:Color = new Color(MC);
        newColor.setRGB(colorToSet);       
}

this.button.onRollOver = function()
{
        setColor(this.label, dropDownHoverTextColor);
        var dropDownsLength:Number = dropDowns.length;
        for (var index:Number = 0; index < dropDownsLength; index++)
        {
                var newDropDownName:String = "dropDown" + index;
                var dropDownClip:MovieClip = this.attachMovie("dropDown", newDropDownName, this.getNextHighestDepth(), {_x:0, _y:buttonHeight + index * dropDownHeight});
                setColor(dropDownClip.label, dropDownTextColor);
                dropDownClip.label.caption.text = dropDowns[index];
                dropDownClip.id = index;
        }
}

this.button.onRollOut = this.button.onReleaseOutside = function()
{
        setColor(this.label, dropDownTextColor);
        var dropDownsLength:Number = dropDowns.length;
        for (var index:Number = 0; index < dropDownsLength; index++)
        {
                var dropDownName:String = "dropDown" + index;
                this[dropDownName].removeMovieClip();
        }
}

this.button.onMouseMove = function()
{
        var dropDownsLength:Number = dropDowns.length;
        var onDropDownButton:Boolean = false;
        for (var index:Number = 0; index < dropDownsLength; index++)
        {
                var dropDownName:String = "dropDown" + index;
                var dropDownTextNewColor:Number;
                if (this[dropDownName].hitTest(this._parent._xmouse, this._parent._ymouse, true))
                {
                        dropDownTextNewColor = dropDownHoverTextColor;
                        onDropDownButton = true;
                }
                else
                {
                        dropDownTextNewColor = dropDownTextColor;
                }
                setColor(this[dropDownName].label, dropDownTextNewColor);
        }
        if (onDropDownButton)
        {
                this.useHandCursor = true;
        }
        else
        {
                this.useHandCursor = false;               
        }

}

this.button.onPress = function()
{
        var dropDownsLength:Number = dropDowns.length;
        for (var index:Number = 0; index < dropDownsLength; index++)
        {
                var dropDownName:String = "dropDown" + index;       
                if (this[dropDownName].hitTest(this._parent._xmouse, this._parent._ymouse, true))
                {
                        trace("Pressed: " + dropDowns[this.id]);
                }
        }
}

Жирным выделил то, что добавилось.

shaltay 04.10.2006 18:38

вот это класс! Хемуль, пожалуста, впишите облегченную версию к моему клипу! Я сам не справлюсь...

shaltay 05.10.2006 02:03

я что-то такое аписал, но не понимаю теперь, как из второй кнопки сделать мувик... Что-б он выезжал, мерцал и тд...

Хемуль 05.10.2006 12:27

2 shaltay:
В моём примере вторая кнопка и так является мувиклипом...

rols 20.01.2007 13:40

Всем привет!
У меня такой вопрос.
Сделанно у меня так = две кнопки в одной, но правильно не хотят работать.
Суть кнопки: сначала открывается первая большая кнопка (с дорожками s1 - s2 и без ссылки) и поверх первой большой, открывается вторая кнопка (с дорожками s1 - s2 и ссылкой). Но при наведении мышкой на вторую кнопку первая перестаёт работать, так как она становится в зоне недосягаемости (перекрыта второй кнопкой).
Как сделать, чтоб при наведении работали все две кнопки?

код при наведении у меня
Код:

on (rollOver)
{
    this.gotoAndPlay("s1");
}
on (releaseOutside, rollOut)
{
    this.gotoAndPlay("s2");
}



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

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