Просмотр полной версии : Смена динамического текста по наведению курсора
antalopata
29.01.2012, 15:50
подскажите пожалуйста..
у меня несколько кнопок и одно динамическое текстовое поле в мувике,
мне нужно что бы при наведении курсора на на любую из кнопок
текст в этом поле менялся в соответствии с названием кнопки
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 минут
надеюсь на скорый ответ
Можно так: разместить на сцене мувиклипы с именами от 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
спасибо большое ! принял к сведению, дома попробую проверить .
Keeper, придумали массивы и циклы для этого дела. А если 100 кнопок?
Я ими почти (если не совсем) не пользуюсь, да и мне, например, не обломно для кажой кнопки это прописать.
antalopata
31.01.2012, 19:52
у меня их 12 и может устроить и этот вариант . Но я не против варианта и с массивами ?!
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
Подскажите пожалуйста ...
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
А также не получается заменить 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 то слишком длинно),
или подскажите по какому алгоритму искать информацию...
Используйте класс LoadVars, например.
Или даже другой лучше класс XML .
Примеры поищите в хелпе или на форуме.
Вот тема (http://www.flasher.ru/forum/showthread.php?t=175582) недавняя, там пример есть.
antalopata
21.02.2012, 16:25
Спасибо большое. вы всегда очень помогаете мне !
Пожалуйста!
Берите на вооружение XML, LoadVars все же не так удобно пользоваться со структурированной информацией при больших объемах данных.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.