Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   нумерация ячеек сетки (http://www.flasher.ru/forum/showthread.php?t=201438)

funkypanky 16.06.2013 16:52

нумерация ячеек сетки
 
Пытаюсь пронумеровать в цикле ячейки сетки и выравнить их относительно центра каждого из мувиклипов сетки.
Текст вставлен внутрь мувика с цифрой один. Название мувика mRect, а текста numText.
Не получается следущие моменты:
1)нумерация получается сверху вниз вместо справа налевоо.
2)при наведении мышки пропадает текст, хотя я по сути меняю только цвет квадрата мувиклипа.
Или как-то надо иначе прописывать глубину текста клипа?

http://gyazo.com/cfb34422a860de234a95efcee59ea402.png

вот мой код и исходник:

Код AS3:

import flash.events.Event;
import flash.filters.GlowFilter;
var itemCount:int=0;
for (var i:int = 0;i<5;i++){
        for (var j:int=0;j<5;j++){
                var mRect:cube = new cube();
                mRect.x =100+ i*45
                mRect.y =100+ j*45
                addChild(mRect)
                itemCount++;
 
                mRect.numText.text = itemCount.toString();
                var txtFormat:TextFormat = new TextFormat();
        txtFormat.align = TextFormatAlign.CENTER;
                mRect.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
        mRect.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
 
        }
}
 
stage.addEventListener(Event.ENTER_FRAME, loop)
 
function loop (e:Event):void {
        mText.text = "Xcor: " + mouseX.toString()+ " Ycor: "+ mouseY.toString()       
}
 
 
 
 
function onMouseOver (event:MouseEvent):void {
 
        var ct:ColorTransform = new ColorTransform();
        ct.color = 0x666666;
        event.target.transform.colorTransform = ct;
 
 
}
 
function onMouseOut (event:MouseEvent):void {
 
        var ct:ColorTransform = new ColorTransform();
        ct.color = 0x333333;
        event.target.transform.colorTransform = ct;
 
}


Ёлочка 16.06.2013 18:07

1. Поменяй местами i и j.
Код AS3:

mRect.x =100+ j*45
mRect.y =100+ i*45

2. ColorTransform изменяет цвет и квадрата, и текста, поэтому текст никуда не пропадает, а просто сливается с квадратом. Создай внутри cube еще один мувиклип для фона, пропиши ему имя и работай уже отдельно с его колорТрансформом.

П.С.: event.target - это ссылка на текущий объект события, а не на тот объект, на который был назначен слушатель. То есть, даже если слушатель назначен на mRect, то event.target может вернуть любой дочерний элемент mRect. Например, event.target может вернуть numText. Напиши trace(event.target) и увидишь. Поэтому, чтобы получить ссылку именно на тот объект, на который был назначен слушатель, нужно писать event.currentTarget. event.currentTarget всегда будет возвращать только mRect.

funkypanky 17.06.2013 00:26

Вложений: 1
Цитата:

Сообщение от Ёлочка (Сообщение 1138246)
1. Поменяй местами i и j.
Код AS3:

mRect.x =100+ j*45
mRect.y =100+ i*45

2. ColorTransform изменяет цвет и квадрата, и текста, поэтому текст никуда не пропадает, а просто сливается с квадратом. Создай внутри cube еще один мувиклип для фона, пропиши ему имя и работай уже отдельно с его колорТрансформом.

П.С.: event.target - это ссылка на текущий объект события, а не на тот объект, на который был назначен слушатель. То есть, даже если слушатель назначен на mRect, то event.target может вернуть любой дочерний элемент mRect. Например, event.target может вернуть numText. Напиши trace(event.target) и увидишь. Поэтому, чтобы получить ссылку именно на тот объект, на который был назначен слушатель, нужно писать event.currentTarget. event.currentTarget всегда будет возвращать только mRect.

Спасибо! много интересного узнал):)
Осталась всё же проблема с наведением мышки на любой из квадратов. При наведении меняется цвет фона, но когда мышка попадет на цифры, эта область никак не реагирует( как бы цифры мешают тому, чтобы подсвечивался фон, область цифры при этом закрывает треть квадрата)
Я создал внутренний мувиклип внутри клипа mRect, назвал его mBack.

далее создал слушатели для этого вложенного клипа:

Код AS3:

mRect.mBack.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
      mRect.mBack.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);

в функциях прописал соответственно:

Код AS3:

event.currentTarget.transform.colorTransform = ct;

не понимаю почему текстовое поле мешает наведению на клетку, ведь по идее я обращаюсь именно ко вложенному клипу mBack внутри mRect.:o
если не сложно можно посмотреть мой пример?
ps.: кстати в трейс выводит вместо mBack [object MovieClip], но если вписать trace(event.target.name) то выводит верное название вложенного клипа .

MikroAcse 17.06.2013 01:52

Код AS3:

mRect.mouseChildren = false


funkypanky 17.06.2013 02:04

Цитата:

Сообщение от MikroAcse (Сообщение 1138289)
Код AS3:

mRect.mouseChildren = false


а где это должно быть прописано? в цикле или в теле функции? вставлял и там и там -не помогает.
mBack и numText (фон и цифры соответственно) - это дочерние клипы клипа mRect.

В документации написано, что свойство mouseChildren (flash.display.DisplayObjectContainer.mouseChildren ) позволяет включать и выключать возможность реагировать на события от мышки для всех вложенных мувиклипов.
Получается и фон тоже перестаёт реагировать на мышь.

Добавлено через 53 минуты
Всё) нашёл где собака зарыта):D
нужно было отключить реакцию вложенного в клип текста на мышь):)
всем спасибо за помощь ещё раз!)

gagaga 18.06.2013 10:01

используй событие ROLL_OVER


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

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