PDA

Просмотр полной версии : Смена динамического текста по наведению курсора


antalopata
29.01.2012, 15:50
подскажите пожалуйста..
у меня несколько кнопок и одно динамическое текстовое поле в мувике,
мне нужно что бы при наведении курсора на на любую из кнопок
текст в этом поле менялся в соответствии с названием кнопки

mooncar
29.01.2012, 16:03
var texts:Array = ['Текст 1', 'Текст 2', 'Текст 3']; //массив с текстами для кнопок

for (i = 1; i <= 3; i++)
{
this['btn' + i].onRollOver = btnOver;
this['btn' + i].onRollOut = btnOut;
this['btn' + i].num = i; //запоминаем номер кнопки внутри нее самой
}

function btnOver()
{
var num:Number = this.num; //"вспоминаем" номер кнопки, на которую навели
my_text.text = texts[num - 1]; //назначаем нужный текст в з-ти от номера
}

function btnOut()
{
my_text.text = ''; //при уведении с кнопки поле очищается
}

Рабочий пример во вложении.
В качестве кнопок используются мувики.

PS. В примере поле не в мувике, пропустил. Просто добавьте правильный путь к полю:
somemc.my_text.text = texts[num - 1];, где somemc - имя мувика на сцене

antalopata
29.01.2012, 16:26
Спасибо большое ! буду разбираться...

Добавлено через 8 часов 31 минуту
как говорится аппетит во время еды приходит... Можно ли как то на основе(ваших) предыдущего кода и этого

import mx.transitions.Tween; //иморт класса Tween
var onSpeed:Number = 0.5; // количество секунд для возрастания альфы
var offSpeed:Number = 1; // количество секунд для убывания альфы
var tweenContainer:Object = new Object(); //хранилище для объектов - Tween'ов

function upAlpha () { //функция возрастания альфы
//this - это и есть мувик, для которого вызывается функция
tweenContainer[this]['off'].stop(); //если все еще продолжается убывание альфы, то его останавливаем
tweenContainer[this]['on'] = new Tween(this, '_alpha', mx.transitions.easing.None.easeNone, this._alpha, 100, onSpeed, true);
}

function downAlpha () { //функция возрастания альфы
//this - это и есть мувик, для которого вызывается функция
tweenContainer[this]['on'].stop();//если все еще продолжается возрастание альфы, то его останавливаем
tweenContainer[this]['off'] = new Tween(this, '_alpha', mx.transitions.easing.None.easeNone, this._alpha, 0, offSpeed, true);
}

function setAlphaManage (mc:MovieClip) {
tweenContainer[mc] = new Array(); //для хранения твинов, для каждого мувика - свой массив
mc.onRollOver = upAlpha;
mc.onRollOut = downAlpha;
}

//используем:
for (i = 1; i <= 5; i++) {
var item:MovieClip = _root['town' + i];
item._alpha = 0;
setAlphaManage(item);
}


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

Сделать так что бы ещё при наведении на кнопку( в одном ряду кнопок)
менялась прозрачность другой кнопки(в другом ряду кнопок).
И пуще того так же без написания кода на кнопке( ну в крайнем случае на ней)
при наведении курсора на кнопку подгружать муви-клипы в конкретную координату ?
Пока что они у меня вставлены внутрь кнопки на "Over" . Спасибо...

Добавлено через 31 час 12 минут
надеюсь на скорый ответ

Keeper
31.01.2012, 18:35
Можно так: разместить на сцене мувиклипы с именами от b1 до b6, мувик, который нужно подгружать в координату где-нибудь за рабочей областью (у меня он с именем toy) и повесить код, приведённый ниже, на первом фрейме на таймлайне. Исходник прилагается.
b_alphas = 100;
b1.onRollOver = function() {
toy._x = 133;
toy._y = 230;
onEnterFrame = function() {
b2._alpha = b3._alpha = b4._alpha = b5._alpha = b6._alpha = b_alphas -= 10;
if (b_alphas < 50) {
b_alphas = 50;
}
}
}
b1.onRollOut = function() {
toy._x = -100;
toy._y = 100;
onEnterFrame = function() {
b2._alpha = b3._alpha = b4._alpha = b5._alpha = b6._alpha = b_alphas += 10;
if (b_alphas > 100) {
b_alphas = 100;
}
}
}
b2.onRollOver = function() {
toy._x = 266;
toy._y = 230;
onEnterFrame = function() {
b1._alpha = b3._alpha = b4._alpha = b5._alpha = b6._alpha = b_alphas -= 10;
if (b_alphas < 50) {
b_alphas = 50;
}
}
}
b2.onRollOut = function() {
toy._x = -100;
toy._y = -100;
onEnterFrame = function() {
b1._alpha = b3._alpha = b4._alpha = b5._alpha = b6._alpha = b_alphas += 10;
if (b_alphas > 100) {
b_alphas = 100;
}
}
}
b3.onRollOver = function() {
toy._x = 400;
toy._y = 230;
onEnterFrame = function() {
b2._alpha = b1._alpha = b4._alpha = b5._alpha = b6._alpha = b_alphas -= 10;
if (b_alphas < 50) {
b_alphas = 50;
}
}
}
b3.onRollOut = function() {
toy._x = -100;
toy._y = -100;
onEnterFrame = function() {
b2._alpha = b1._alpha = b4._alpha = b5._alpha = b6._alpha = b_alphas += 10;
if (b_alphas > 100) {
b_alphas = 100;
}
}
}
b4.onRollOver = function() {
toy._x = 183;
toy._y = 150;
onEnterFrame = function() {
b2._alpha = b3._alpha = b1._alpha = b5._alpha = b6._alpha = b_alphas -= 10;
if (b_alphas < 50) {
b_alphas = 50;
}
}
}
b4.onRollOut = function() {
toy._x = -100;
toy._y = -100;
onEnterFrame = function() {
b2._alpha = b3._alpha = b1._alpha = b5._alpha = b6._alpha = b_alphas += 10;
if (b_alphas > 100) {
b_alphas = 100;
}
}
}
b5.onRollOver = function() {
toy._x = 266;
toy._y = 150;
onEnterFrame = function() {
b2._alpha = b3._alpha = b4._alpha = b1._alpha = b6._alpha = b_alphas -= 10;
if (b_alphas < 50) {
b_alphas = 50;
}
}
}
b5.onRollOut = function() {
toy._x = -100;
toy._y = -100;
onEnterFrame = function() {
b2._alpha = b3._alpha = b4._alpha = b1._alpha = b6._alpha = b_alphas += 10;
if (b_alphas > 100) {
b_alphas = 100;
}
}
}
b6.onRollOver = function() {
toy._x = 400;
toy._y = 150;
onEnterFrame = function() {
b2._alpha = b3._alpha = b4._alpha = b5._alpha = b1._alpha = b_alphas -= 10;
if (b_alphas < 50) {
b_alphas = 50;
}
}
}
b6.onRollOut = function() {
toy._x = -100;
toy._y = -100;
onEnterFrame = function() {
b2._alpha = b3._alpha = b4._alpha = b5._alpha = b1._alpha = b_alphas += 10;
if (b_alphas > 100) {
b_alphas = 100;
}
}
}

antalopata
31.01.2012, 18:59
спасибо большое ! принял к сведению, дома попробую проверить .

DaFive
31.01.2012, 19:14
Keeper, придумали массивы и циклы для этого дела. А если 100 кнопок?

Keeper
31.01.2012, 19:41
Я ими почти (если не совсем) не пользуюсь, да и мне, например, не обломно для кажой кнопки это прописать.

antalopata
31.01.2012, 19:52
у меня их 12 и может устроить и этот вариант . Но я не против варианта и с массивами ?!

dark256
31.01.2012, 20:45
for ( var z=1; z<скока_у_меня_кнопок; z++){
там_где_все["b"+z].onRelease = function(){ ... }
}

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

Функционал функций (сорри) отличается настолько на чуть-чуть, что проще систематизировать это отн. управлаяющих параметров и не плодить копипасту. У вас решение "в лоб". Зачастую - да. Несомненно. Но иногда имеет смысл слегка подумать :)

antalopata
31.01.2012, 22:48
for ( var z=1; z<скока_у_меня_кнопок; z++){
там_где_все["b"+z].onRelease = function(){ ... }
}

Простите за вопрос наивный... а эти правки для какого кода ? для того что в начале топика ?
и "там_где_все" это "this" там ?

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

Но всё равно спасибо за подсказки. Они хотя бы дают понять , что есть отзывчивые люди .

Добавлено через 50 часов 35 минут
вот ещё вопрос -

по клику на кнопке запускается клип

on (release) {
gotoAndStop (m1);
this._root.m1.gotoAndPlay(2);
}

этот клип должен запускаться одной их трёх кнопок при условии, что он уже не запущен.
То есть если уже был запущен одной кнопкой на второй и третьей не должен срабатывать ?

antalopata
08.02.2012, 12:15
Подскажите пожалуйста ...

mooncar
08.02.2012, 12:29
antalopata, одна тема - один вопрос. Тем более, "апать" темы нельзя. Создавайте новую.

antalopata
08.02.2012, 14:03
спасибо учту !

antalopata
21.02.2012, 15:46
Попробовал использовать этот код

var texts:Array = ['Текст 1', 'Текст 2', 'Текст 3']; //массив с текстами для кнопок

for (i = 1; i <= 3; i++)
{
this['btn' + i].onRollOver = btnOver;
this['btn' + i].onRollOut = btnOut;
this['btn' + i].num = i; //запоминаем номер кнопки внутри нее самой
}

function btnOver()
{
var num:Number = this.num; //"вспоминаем" номер кнопки, на которую навели
my_text.text = texts[num - 1]; //назначаем нужный текст в з-ти от номера
}

function btnOut()
{
my_text.text = ''; //при уведении с кнопки поле очищается
}

Если текста - который отображается в динамическом поле больше чем одна строчка, то уже не работает :-(

А также не получается заменить onRollOver на onPress

mooncar
21.02.2012, 15:50
А также не получается заменить onRollOver на onPress
this['btn' + i].onPress = btnOver;
this['btn' + i].onRollOut = this['btn' + i].onDragOut = btnOut;


Если текста - который отображается в динамическом поле больше чем одна строчка, то уже не работает :-(

А как вы задаете строку?

Вот так что ли?
var texts:Array = ['Текст 1
продолжение', 'Текст 2', 'Текст 3']
Так нельзя. Компилятор ошибку выдаст.
Надо либо так
var texts:Array = ['Текст 1\nпродолжение', 'Текст 2', 'Текст 3']
Либо вообще грузить извне.

antalopata
21.02.2012, 15:58
Спасибо. буду разбираться

А то может подскажете, как извне ?

А то там строк десять минимум( в одну строчку если через \n то слишком длинно),
или подскажите по какому алгоритму искать информацию...

mooncar
21.02.2012, 16:20
Используйте класс LoadVars, например.
Или даже другой лучше класс XML .
Примеры поищите в хелпе или на форуме.
Вот тема (http://www.flasher.ru/forum/showthread.php?t=175582) недавняя, там пример есть.

antalopata
21.02.2012, 16:25
Спасибо большое. вы всегда очень помогаете мне !

mooncar
21.02.2012, 16:41
Пожалуйста!
Берите на вооружение XML, LoadVars все же не так удобно пользоваться со структурированной информацией при больших объемах данных.