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

GreatRash 14.02.2008 17:15

Помогите сделать движение в галерее
 
Прошу помощи. Чет никак врубиться не могу.
Есть у меня такой код:
Код:

var my_xml:XML = new XML();
my_xml.ignoreWhite = true;

my_xml.onLoad = function(success:Boolean) {
        if (success) {
                var total = my_xml.firstChild.childNodes.length;
            for (var i=0; i<total; i++) {
                        var container:MovieClip = _root.createEmptyMovieClip("cont"+i+"_mc", i);
                        var image:MovieClip = container.createEmptyMovieClip("image"+i+"_mc", 1);
                        image.loadMovie(my_xml.firstChild.childNodes[i].attributes.small);
                        container._x = eval("cont"+(i-1)+"_mc")._x+150;
                        container._y = Stage.height/2 - (113/2);
                        container.onEnterFrame = mover;
                        container.onRollOver = bigger;
                        container.onRollOut = smaller;
                }
        }
}

function mover() {
        if (_root._xmouse > Stage.width/2) {
                this._x += speed;
        }
        if (_root._xmouse < Stage.width/2) {
                this._x -= speed;
        }
}

function bigger() {
        this._width = 160;
        this._height = 123;
        this.swapDepths(100);
        this._x -= 5;
        this._y -= 5;
}

function smaller() {
        this._width = 150;
        this._height = 113;
        this.swapDepths(100);
        this._x += 5;
        this._y += 5;
}

my_xml.load("images.xml");

А как сделать чтобы движение происходило бесконечно? Т.е. чтобы лента из картинок была бесконечна?

CorC 15.02.2008 09:47

Для этого надо изменить функцию mover() так, что бы картинки, которые ушли вправо, выезжали слева, и наоборот. (Меняется _x) Можно и не mover менять, конечно, но мне кажется, так проще будет.

GreatRash 15.02.2008 13:29

Вложений: 2
Только как это сделать? Дело в том, что у меня в галлерею грузится 10 картинок (вообще может будет и больше, ограничения быть не должно). И соответственно не понятно какой _x ставить? Умножать кол-во картинок на ширину картинки? Хм... надо попробовать

Не получилось ничего, может я неправильно условие пишу или чего не догоняю?

Код функции mover():
Код:

function mover() {
        if (_xmouse >= 150) {
                if (this._x+150 < 0) {
                        this._x = this.tot*150;
                }
                this._x +=10;
        }
        if (_xmouse <= Stage.width-150) {
                this._x -=10;
        }
}

Ой не, я наврал... все получилось. Я просто неправильно условие написал

Все равно неправильно работает:(
Попробуйте подвигать картинки туда-сюда...

Valterrio 18.02.2008 13:47

думаю функция мувер глючит. надо обращаться к каждому элементу по i числу. пробуйте трейсить.

GreatRash 18.02.2008 14:57

Переписал так:
Код:

var my_xml:XML = new XML();
my_xml.ignoreWhite = true;

var speed:Number = 5;

my_xml.onLoad = function(success:Boolean) {
        if (success) {
                var total = my_xml.firstChild.childNodes.length;
            for (var i=0; i<total; i++) {
                        var container:MovieClip = _root.createEmptyMovieClip("cont"+i+"_mc", i);
                        var image:MovieClip = container.createEmptyMovieClip("image"+i+"_mc", 1);
                        image.loadMovie(my_xml.firstChild.childNodes[i].attributes.small);
                        container._x = eval("cont"+(i-1)+"_mc")._x+150;
                        container._y = Stage.height/2 - (113/2);
                        container.tot = total;
                        container.num = i;
                        container.onEnterFrame = mover;
                        container.onRollOver = bigger;
                        container.onRollOut = smaller;
                }
        }
}

function mover() {
        if (_xmouse <= Stage.width-150) {
                if (eval("cont"+this.num+"_mc")._x+150 < 0) {
                        eval("cont"+this.num+"_mc")._x = (this.tot-1)*150;
                }
                eval("cont"+this.num+"_mc")._x -=10;
        }
        if (_xmouse >= 150) {
                if (eval("cont"+this.num+"_mc")._x > Stage.width) {
                        eval("cont"+this.num+"_mc")._x = -150;
                }
                eval("cont"+this.num+"_mc")._x +=10;
        }
}

Эффект тот же.

Не понял что трейсить?
При trace(this); выдает:
level0.cont9_mc
level0.cont8_mc
level0.cont7_mc
level0.cont6_mc
level0.cont5_mc
level0.cont4_mc
level0.cont3_mc
level0.cont2_mc
level0.cont1_mc
level0.cont0_mc
по идее все клипы на месте.
Они почему-то как бы накладываются один на другой. Я не понимаю почему...
Жду помощи.

etc 18.02.2008 15:12

«eval("cont"+(i-1)+"_mc")» — что это? _root["cont"+(i-1)+"_mc"] чем не угодил?
Да и потом, на первой итерации у вас вообще нет предыдущего контейнера.

GreatRash 18.02.2008 15:38

Переписал с учетом ваших советов
Код:

my_xml.onLoad = function(success:Boolean) {
        if (success) {
                var total = my_xml.firstChild.childNodes.length;
            for (var i=0; i<total; i++) {
                        var container:MovieClip = _root.createEmptyMovieClip("cont"+i+"_mc", i);
                        var image:MovieClip = container.createEmptyMovieClip("image"+i+"_mc", 1);
                        image.loadMovie(my_xml.firstChild.childNodes[i].attributes.small);
                        if (i > 0) {
                                container._x = _root["cont"+(i-1)+"_mc"]._x+150;
                        } else {
                                container._x = 0;
                        }
                        container._y = Stage.height/2 - (113/2);
                        container.tot = total;
                        container.onEnterFrame = mover;
                        container.onRollOver = bigger;
                        container.onRollOut = smaller;
                }
        }
}

Только, к сожалению, ничего не изменилось...

Satin 20.02.2008 11:38

Попробуй изменить функцию mover так:
Код:

function mover() {
        if (_xmouse <= Stage.width-150) {
                if (this._x==(-1)*this._width ) {
                        this._x = (this.tot-1)*this._width;
                }
                this._x -=5;
        }
        if (_xmouse >= 150) {
                if (this._x == (this.tot-1)*this._width) {
                        this._x = (-1)*this._width;
                }
                this._x +=5;
        }
}


GreatRash 20.02.2008 14:25

Satin Спасибо огромное работает отлично! А я блин всю голову сломал... Эх не хватает мне еще соображалки...
Спасибо еще раз!


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

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