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

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

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

Регистрация: Nov 2016
Сообщений: 4
По умолчанию динамические текстовые поля, зависящие друг от друга

Добрый вечер. Помогите, пожалуйста) Очень долго пытаюсь понять, что не так. не удивлюсь, если все не так. У меня 3 текстовых поля t1, t2, t3. При клике на каждое из них загорается циферка. если на сцене нет цифер (все поля пустые) - тогда на поле, на котором щелкнули, загорается единичка. если единичка уже занята, на след. поле загорается двойка и т.д. Если щелкнуть по цифре, то она исчезает. ока написала только для t1, но и то не работает. Ужас какой-то.



import flash.display.DisplayObject;
import flash.events.Event;


var X:int=new int();



t1.addEventListener(MouseEvent.MOUSE_DOWN, clickT1);

function clickT1(e:Event):void
{
if( isBiggestX() )
{
t1.text = String(X+1)
}
}

this.addEventListener(Event.ENTER_FRAME, isBiggestX);
function isBiggestX():Boolean
{
for (var i:int=0; i < stage.numChildren; i++)
{
this.getChildAt(i);

if (this.getChildAt is TextField)
{
this.addEventListener(Event.ENTER_FRAME, textX);
function textX(e:Event):void
{
if (this.getChildAt.text == X);
{
return true();
}

else
{
return false();
}

}

}
}
}

Старый 29.06.2018, 00:35
RedHead90 вне форума Посмотреть профиль Отправить личное сообщение для RedHead90 Найти все сообщения от RedHead90
  № 2  
Ответить с цитированием
RedHead90

Регистрация: Apr 2018
Сообщений: 32
ulia0208, во-первых, твой код совершенно не читаем, так как нет форматирования. Когда пишешь сообщение, сверху есть кнопочка AS3. Выдели код и нажми на эту кнопочку, чтобы сохранить форматирование.

Во-вторых,
Цитата:
Очень долго пытаюсь понять, что не так
Что конкретно ты делаешь, чтобы понять "что не так"? Этот код точно не скомпилируется и компилятор выдаст тебе сообщения о том "что не так" и даже скажет "где не так".

В-третьих,
Цитата:
все не так

Старый 29.06.2018, 03:23
ZergMaster вне форума Посмотреть профиль Отправить личное сообщение для ZergMaster Найти все сообщения от ZergMaster
  № 3  
Ответить с цитированием
ZergMaster
 
Аватар для ZergMaster

Регистрация: May 2008
Адрес: Питер
Сообщений: 350
Отправить сообщение для ZergMaster с помощью ICQ Отправить сообщение для ZergMaster с помощью Skype™
Уля, жесть. Пытаешься попасть пальцем в небо, перемешивая фрагменты недокода в рандомном порядке)) но так не получится)) Почитай книжечки. Пожалуйста.
И, божечки, неужели так сложно оформить код в сообщении в теги ??
Ладно, попробуем снова и по порядку.

Разберем твою задачу, озвученную в теме.

Дано:
Цитата:
У меня 3 текстовых поля t1, t2, t3. При клике на каждое из них загорается циферка. если на сцене нет цифер (все поля пустые) - тогда на поле, на котором щелкнули, загорается единичка. если единичка уже занята, на след. поле загорается двойка и т.д. Если щелкнуть по цифре, то она исчезает
Что мы имеем:
- Текстовые поля t1, t2 и t3.
- переменную X (та самая "циферка"), которая по умолчанию равна 0.
- при клике на одно из текстовых полей происходит следующее:
1. если поле пустое, то вписываем в него X+1.
2. если поле не пустое, то оно становится пустым. Также, если его значение было = X, то делаем X-1
Вроде как все, исходя из тобой написанного.

Ок. Создаем переменную, а которой будем хранить "циферку". Она у нас целое.
Код AS3:
var X:int = 0;
далее, слушаем клики по текстовым полям в одной функции
Код AS3:
t1.addEventListener(MouseEvent.CLICK, textFieldHandler);
t2.addEventListener(MouseEvent.CLICK, textFieldHandler);
t3.addEventListener(MouseEvent.CLICK, textFieldHandler);
после чего пишем непосредственно саму функцию слушателя

Код AS3:
function textFieldHandler(event:MouseEvent):void
        {
            //достанем из события event target - поле, на которое целкнули
            //и положим его в отдельную переменную, чтобы было удобней работать и читабельней
            var tf:TextField = event.target as TextField;
 
            //если текстовое поле, покоторому кликнули пустое, то
            if(tf.text == '')
            {
                //выражение ++ перед переменной сначала прибавляет 1 к X, а потом созвращает его значение
                //то есть, если X был = 0, то программа сначала прибавит к нему 1, после чего
                //вернет уже результат сложения. Таким образом, если Х был равен 0, то в текстфилд
                //по которому мы кликнули, запишется 1. И Х уже будет равен 1, так что в следующий раз,
                //когда мы кликнем по другому текстовому полю, произойдет все тоже самое, но уже с Х равняющимся 1, 
                //и во второе поле запишется уже 2.
                tf.text = ++X;
 
            } else //если поле не пустое, то есть "если кликнули по циферке"
            {
                //сотрим: если значение поля равно Х, то есть самое большое число из имеющихся, то авчитаем из Х 1.
                //кстати, выражение -- после переменно сначала возвращает её значение, а уже потом изменяет её на -1. 
                //так что, важно помнить разницу между ++X и X++
                if(tf.text == String(X)) X--;
                //ну и все, присваиваем этому полю пустую строку
                tf.text = '';
            }
        }
Итого, если убрать комменты, весь код будет выглядеть так
Код AS3:
import flash.text.TextField;
import flash.events.MouseEvent;
 
var X:int = 0;
 
t1.addEventListener(MouseEvent.CLICK, textFieldHandler);
t2.addEventListener(MouseEvent.CLICK, textFieldHandler);
t3.addEventListener(MouseEvent.CLICK, textFieldHandler);
 
function textFieldHandler(event:MouseEvent):void
        {
            var tf:TextField = event.target as TextField;
 
            if(tf.text == '')
            {
                tf.text = ++X;
 
            } else
            {
                if(tf.text == String(X)) X--;
                tf.text = '';
            }
        }
__________________
while(live()) { hope(); }


Последний раз редактировалось ZergMaster; 29.06.2018 в 10:39.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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