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

flasher2011 28.06.2011 18:52

Доступ к картинке, выводимой в цикле
 
Здравствуйте!
Надо при клике на картинке (выводимой в цикле) изменить ее размеры.
Получается только меняется самая последняя, по какой ни кликни.
В программировании не силен.
Прошу помочь.
Код AS3:

package {
        import ...
 
        public class Main extends Sprite {
 
                private var countImages:uint = 20; //Количество картинок
                private var imageURLArray:Array = new Array(); //Массив URL-адресов картинок
                private var spriteArray:Array = new Array(); //Массив со всеми контейнерами картинок
                private var loadedImages:Number = 0; //Cколько картинок загружено
                private var rows:Number = 5; //Число колонок и строк
                private var columns:Number = 8;
                private var imageWidth:Number = 40; //Запоминаем ширину и высоту картинки (40x40)
                private var imageHeight:Number = 40;
                private var padding:Number = 1.3; //Расстояние между картинками
                private var left:Number = 0; //Отступ с левого края
 
                private var loaderImage:Loader; //Загрузчик картинок
                private var spriteRIGHT:Sprite; //Контейнер справа для картинок
                private var sprite:Sprite;
 
                public function Main():void {
 
//Контейнер справа ///////////////////////////////////////////////////////////////////
 
                        spriteRIGHT = new Sprite(); //Контейнер справа
                        spriteRIGHT.x = 300;
 
                        var shapeRight:Shape = new Shape();
                        shapeRight.graphics.beginFill(0x00ff00);
                        shapeRight.graphics.drawRoundRect(0, 0, 450, 300, 10, 10);
                        shapeRight.graphics.endFill();
 
                        spriteRIGHT.addChild(shapeRight);
                        addChild(spriteRIGHT);
 
                        for (var n:uint = 0; n < countImages; n++){ //Добавим все наши URLs картинок в массив
                                imageURLArray.push("images/jpg/" + n + ".jpg");
                        }
                        for (var i:int = 0; i < rows; i++){ //Создаем контейнеры картинок и располагаем их на сцене в контейнере spriteRIGHT
                                for (var j:int = 0; j < columns; j++){
                                        sprite = new Sprite(); //Создаем новый контейнер
                                        sprite.x = left + j * imageWidth * padding; //позиционируем контейнер
                                        sprite.y = i * imageHeight * padding;
 
                                        spriteRIGHT.addChild(sprite); //Добавляем контейнер картинки в контейнер spriteRIGHT
                                        spriteArray.push(sprite); //Добавляем контейнер в массив spriteArray
                                }
                        }
 
                        sprite.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownSpriteListener);
 
                        loadImage(); // Функция загружает картинку, первую картинку в массиве imageURLArray
                }
 
 
                //Эта функция загружает первую картинку в массиве imageURLArray
                private function loadImage():void {
                        loaderImage = new Loader(); //Создаем загрузчик
                        var urlRequest:URLRequest = new URLRequest(imageURLArray[0]); //Получаем URL для загрузки
 
                        loaderImage.contentLoaderInfo.addEventListener(Event.INIT, initListenerImage);
 
                        loaderImage.load(urlRequest); //Загружаем картинку
                        imageURLArray.splice(0, 1); //Удаляем первый URL в массиве imageURLArray так как мы начали загружать эту картинку
                }
 
 
                private function initListenerImage(e:Event):void {
 
                        var image:Bitmap = Bitmap(e.target.content); //Сохраняем загруженный битмап в локальную переменную
 
                        sprite = spriteArray[loadedImages]; //Сохраняем контейнер картинки в локальную переменную
                        sprite.addChild(image); //Добавляем картинку в контейнер
 
                        sprite.width = imageWidth; //Масштабируем загруженные картинки
                        sprite.scaleY = sprite.scaleX;
                        if (sprite.height > imageHeight){
                                sprite.height = imageHeight;
                                sprite.scaleX = sprite.scaleY;
                        }
                        sprite.x = sprite.x + (imageWidth - sprite.width) / 2;
                        sprite.y = sprite.y + (imageHeight - sprite.height) / 2;
 
                        loadedImages++; //Изменяем счетчик загруженных картинок
 
                        if (imageURLArray.length > 0){ //загружаем следующую картинку, если в массиве существуют еще  URL-адреса
                                loadImage();
                        }
 
 
                }
 
                private function mouseDownSpriteListener(e:MouseEvent):void {
                        trace("e.currentTarget : " + e.currentTarget);
                        trace("e.target : " + e.target);
                        sprite.scaleX += .3; // изменяем  размер картинки по клику на ней
 
                }
 
 
 
        }
}


S-ed 29.06.2011 04:45

У Вас масштаб только по одной оси...
Код AS3:

private function mouseDownSpriteListener(e:MouseEvent):void {
        trace("e.currentTarget : " + e.currentTarget);
        trace("e.target : " + e.target);
        currentTarget.scaleX += .3; // изменяем  размер картинки по клику на ней
}


spooner 29.06.2011 08:26

S-ed, все равно не пркатит. Контейнеры добавляются в цикле, а на событие подписывается только последний:
Код AS3:

for (var i:int = 0; i < rows; i++){ //Создаем контейнеры картинок и располагаем их на сцене в контейнере spriteRIGHT
        for (var j:int = 0; j < columns; j++){
                sprite = new Sprite(); //Создаем новый контейнер
                sprite.x = left + j * imageWidth * padding; //позиционируем контейнер
                sprite.y = i * imageHeight * padding;
 
                spriteRIGHT.addChild(sprite); //Добавляем контейнер картинки в контейнер spriteRIGHT
                spriteArray.push(sprite); //Добавляем контейнер в массив spriteArray
        }
}
 
sprite.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownSpriteListener);


flasher2011 29.06.2011 15:16

Добавлял непосредственно в цикл, тот же результат.
Код AS3:

for (var i:int = 0; i < rows; i++){ //Создаем контейнеры картинок и располагаем их на сцене в контейнере spriteRIGHT
        for (var j:int = 0; j < columns; j++){
                sprite = new Sprite(); //Создаем новый контейнер
                sprite.x = left + j * imageWidth * padding; //позиционируем контейнер
                sprite.y = i * imageHeight * padding;
 
                spriteRIGHT.addChild(sprite); //Добавляем контейнер картинки в контейнер spriteRIGHT
                spriteArray.push(sprite); //Добавляем контейнер в массив spriteArray
 
                      sprite.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownSpriteListener);
        }
}

S-ed, спасибо, но в обе стороны не знаю как. Получилось только вправо и вниз по осям
Код AS3:

private function mouseDownSpriteListener(e:MouseEvent):void {
                        trace("e.currentTarget : " + e.currentTarget);
                        trace("e.target : " + e.target);
                        sprite.scaleX = sprite.scaleY += .3; // изменяем  размер картинки по клику на ней
 
                }

Добавлено через 1 час 2 минуты
Почти весь код цикла взят со страницы demiart.ru.


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

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