Форум 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=144718)

alex001 19.09.2010 17:08

нажатие и нажатие с перетаскиванием
 
move clip, в нем содержутся еще клипы.
при нажатии и перетаскивании они должны вертикально перемещаться. здесь никаких проблем.
но при нажатии и отпускании (без перетаскивания) должен происходить уже другой код. но однаременно не работает. что посоветуете?

mooncar 19.09.2010 17:22

Допустим, таскаем (или не таскаем) мувик mc. Тогда:
Код AS1/AS2:

var y0:Number ;
 
mc.onPress = function  ()
{
        this.startDrag(); // + ваши параметры таскания
        y0 = this._y ;
};
 
mc.onRelease = function  ()
{
        this.stopDrag();
        if (y0 - this._y == 0)
        {
                someFunc();
        }
};
 
function someFunc()
{
        trace('Не было перемещения');
}


Для нескольких мувиков с произвольными именами, содержащимися внутри мувика-контейнера cont_mc:
Код AS1/AS2:

var y0:Number ;
 
for (i in cont_mc)
{
        var mc:MovieClip = cont_mc[i];
        mc.onPress = mcOnPress;
        mc.onRelease = mcOnRelease;
}
 
 
function mcOnPress()
{
        this.startDrag();// + ваши параметры таскания
        y0 = this._y ;
}
 
function mcOnRelease()
{
        this.stopDrag();
        if (y0 - this._y == 0)
        {
                someFunc(this);
        }
}
 
function someFunc(mc:MovieClip)
{
        trace('Трогали ' + mc + ' но перемещения не было');
}


alex001 19.09.2010 19:10

я не совсем понял что значит это:
Код AS1/AS2:

for (i in cont_mc) 
{
        var mc:MovieClip = cont_mc[i];
        mc.onPress = mcOnPress;
        mc.onRelease = mcOnRelease;
}


mooncar 19.09.2010 19:17

Это значит, что мы перебираем циклом все мувики внутри контейнера cont_mc, они перебираются автоматически без указания имени. Удобно, если в контейнере кроме них ничего нет, и на все нужно повесить какие-то обработчики или задать свойства.
Такая запись позволяет не думать об именах и количестве, чистое удобство.
Эквивалентно простому циклу, например, если имена мувиков конкретно mc1, mc2..., а количество, например, 10:
Код AS1/AS2:

for (i = 1; i <=  10; i++) 
{
        var mc:MovieClip = cont_mc['mc' + i];
        mc.onPress = mcOnPress;
        mc.onRelease = mcOnRelease;
}


alex001 19.09.2010 19:32

Код AS1/AS2:

onClipEvent (enterFrame) {
        var y0:Number;
 
        for (i = 1; i <= 12; i++)
        {
                var mc:MovieClip = this['ch' + i];
                mc.onPress = mcOnPress;
                mc.onRelease = mcOnRelease;
        }
 
        function mcOnPress()
        {
                this.startDrag(false,this._x,168.05,this._x,-2500);
                y0 = this._y;
        }
 
        function mcOnRelease()
        {
                this.stopDrag();
                if (y0 - this._y == 0)
                {
                        someFunc(this);
                }
        }
 
        function someFunc(mc:MovieClip)
        {
                trace('Трогали ' + mc + ' но перемещения не было');
        }
}

все работает кроме таскания. при таскании он видет, что это таскание, а не нажимание, но таскания не происходит. я что-то не так делаю?

mooncar 19.09.2010 19:58

Вложений: 1
Запись кода на объекте - это уже нонсенс, в результате пути не те.
Многократное назначение функций с помощью onClipEvent (enterFrame). Ужас.
Смотрите пример.

mooncar 19.09.2010 20:09

Вот еще что. Строку замените на такую:
Код AS1/AS2:

mc.onRelease = mc.onReleaseOutside = mcOnRelease;

Иначе после нажатия на мувике и отпускание мыши вне мувика не остановит драг.

alex001 19.09.2010 23:08

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

mooncar 20.09.2010 00:10

Вложений: 1
Не заметил. Нету такого, если правильно задать пределы. startDrag работает точно по заданным пределам.
Укажите условия, при которых "пользователь может потащить выше чем можно".

alex001 20.09.2010 23:01

я наверное неточно выразился.
если дотощить клип до самого верха, и начать тащить еще выше(а он разумеется дальше не поедет) то 'Трогали mc но перемещения не было' все равно вылезет.
Цитата:

пользователь может потащить выше чем можно
я имел в виду, что он может этого захтеть и тогда сработает someFunc().


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

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