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

Orgy 16.09.2007 16:43

Картинки в ряд. Нужна помощь.
 
Здравствуйте. Я только начинаю изучать FLASH и у меня возникла проблема. Помогите, пожалуйста решить ее.

Допустим, у меня есть картинки q1,q2,q3,q4,q5
Есть текстовое поле text_pole
Картинки нужно загрузить в ряд. А потом, при нажатии на определенную картинку в текстовом поле выводится текст "Вы нажали на N картинку".
Я написал такую вещь.

Код:

var myclip_name:Array = [];

for (i=1; i == 5; i++) {
  myclip_name[i] = "clip"+i;
  _root.createEmptyMovieClip (myclip_name[i], i+10);
  _root.myclip_name[i]._x = i*100;
  _root.myclip_name[i]._y = 20;
  _root.myclip_name[i].loadMovie ("q"+i+".jpg");
 
  _root.myclip_name[i].onRelease = function () {
      _root.text_pole = "Вы нажали на "+i+" Картинку"
  }
}

Но, к сожалению ничего не работает. Я очень плохо в этом разбираюсь. Наверное этот код покажется вам смешным и нелепым, но я уже ничего не могу поделать.
Подскажите, пожалуйста, как сделать правильно.
Заранее спасибо!

udaaff 16.09.2007 17:14

Код:

var myclip_name:Array = [];
//
for (i=1; i<5; i++) {
        _root.createEmptyMovieClip("clip"+i, i+10);
        myclip_name[i] = _root["clip"+i];
        _root["clip"+i]._x = i*100;
        _root["clip"+i]._y = 20;
        _root["clip"+i].loadMovie("q"+i+".jpg");
        _root["clip"+i].onRelease = function() {
                _root.text_pole.text = "Вы нажали на "+i+" Картинку";
        };
}


Mnilionic 16.09.2007 17:37

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

udaaff 16.09.2007 18:00

Необязательно их все загружать сначала, а потом выстраивать, можно и в процессе:
Код:

x0 = 0;
for (i=0; i<5; i++) {
        _root.createEmptyMovieClip("clip"+i, i+10);
        _root["clip"+i].loadMovie("q"+i+".jpg");
        _root["clip"+i]._x = x0;// лажанулся слегка
          // загрузка асинхронна
        x0 += _root["clip"+i]._width;
}

Но все равно можно и сразу их выстраивать: http://www.flasher.ru/forum/showpost...8&postcount=13

Orgy 17.09.2007 12:23

Не работает нажатие на Мувик. :(
Как же быть, чтоже делать?

Mnilionic 17.09.2007 13:47

Добавь в библиотеку кнопку с идентификатором "btn" (её будем ставить поверх картинок)
Код:

var myclip_name:Array = [];
//
for (i=1; i<5; i++) {
        var mc = this.createEmptyMovieClip("clip"+i, i+10);
        myclip_name[i] = mc;
        mc._x = i*100;
        mc._y = 20;
        var img = mc.createEmptyMovieClip("img", 0);
        img.loadMovie("q"+i+".jpg");
        var btn = mc.attachMovie("btn", "btn", 1);
        btn.onRelease = function() {
                _root.text_pole.text = "Вы нажали на "+i+" Картинку";
                trace("Вы нажали на "+i+" Картинку")
        };
}


udaaff 17.09.2007 21:42

Код:

var myclip_name:Array = [];
//
for (i=1; i<5; i++) {
        _root.createEmptyMovieClip("clip"+i, i+10);
        myclip_name[i] = _root["clip"+i];
        _root["clip"+i]._x = i*100;
        _root["clip"+i]._y = 20;
        _root["clip"+i].loadMovie("q"+i+".jpg");
        _root["clip"+i].onRelease = function() {// сносится
                _root.text_pole.text = "Вы нажали на "+i+" Картинку";
        };
}

Действительно, этот вариант будет работать не так как ожидается, так как контейнером, после загрузки в него содержимого, наследуются только некоторые свойства (_x, _y, _xscale, _yscale, _rotation), т.е. onRelease сносится после загрузки, таким образом, можно или использовать вариант Mnilionic'а, или определять это событие после загрузки содержимого:
Код:

loader(0, 1);
//
function loader(x0:Number, i:Number):Void {
        //
        var container:MovieClip = this.createEmptyMovieClip("tester_mc"+i, this.getNextHighestDepth());
        container._x = x0;
        //
        var mclListener:Object = new Object();
        mclListener.onLoadInit = function(target_mc:MovieClip) {
                //
                target_mc.onRelease = function() {
                        trace(this);
                };
                // --- рекурсия
                loader(container._x+target_mc._width, ++i);
                //
        };
        var image_mcl:MovieClipLoader = new MovieClipLoader();
        image_mcl.addListener(mclListener);
        image_mcl.loadClip("image_"+i+".jpg", "tester_mc"+i);
}


Kikasso 17.09.2007 22:17

..или повесить код на клип, внутри клипа создать еще пустой и грузить уже в него.

Mnilionic 18.09.2007 00:11

Kikasso, точняг! что-то я сразу не сообразил
Код:

var myclip_name:Array = new Array();
//
for (i=1; i<5; i++) {
        var mc = this.createEmptyMovieClip("clip"+i, i+10);
        mc._x = i*100;
        mc._y = 20;
        var img = mc.createEmptyMovieClip("img", 0);
        img.loadMovie("q"+i+".jpg");
        mc.num = i;
        mc.onRelease = function(){
                trace("Вы нажали на "+this.num+" Картинку")
        }
}



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

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