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

Heidy 10.07.2013 17:56

Создание галереи изображений
 
Подскажите, как создать небольшую галерею изображений по такому типу приложения ВК(начало, где объявление разных игр):
https://vk.com/app2857249_3028443?ref=9
То есть, имеется 8 картинок, по клику левой\правой стрелки они меняются (сдвигаются влево\вправо соответственно)

накидал код, но меняются они не совсем так(сдвигаются они лентой, и нижний и верхний уровень, одна за другой, да еще и первый элемент остается на месте. пока два раза не отработает)
Код AS3:

package
{
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.text.TextField;
 
        /**
        * ...
        * @author Heidy
        */

        public class GameContainer extends Sprite
        {
                private var _oneelement:Array = new Array();
                private var _bitmapElement:Array = [new Bitmap(new Balls), new Bitmap(new Balda), new Bitmap(new Bubbles), new Bitmap(new Chess), new Bitmap(new Domino), new Bitmap(new Dots), new Bitmap(new Lines), new Bitmap(new Sudoku)];
                private var _elementButton:Button;
                private var _myText:TextField;
 
                //private var _currentPage:int = 0;
 
                public function GameContainer()
 
                {
                        var bg:Bitmap = new Bitmap(new Backgroundgame);
 
                        addChild(bg);
 
                        for (var i:int = 0; i < 6; ++i)
                        {
                                _elementButton = new Button();
                                _myText = new TextField();
 
                                _oneelement[i] = new Sprite();
                                _oneelement[i].addChild(_bitmapElement[i]);
                                addChild(_oneelement[i]);
 
                                _oneelement[i].x = 120 + i % 3 * 200;
                                _oneelement[i].y = 150 + int(i / 3) * 150;
 
                                _elementButton.x = (_oneelement[i].width - _elementButton.width) / 2;
                                _elementButton.y = (_oneelement[i].height - _elementButton.height) / 2;
 
                                var myTextFormat:flash.text.TextFormat = new flash.text.TextFormat("Times New Roman", 16, 0x000000, true);
 
                                _myText.defaultTextFormat = myTextFormat;
                                _myText.text = "Войти";
 
                                _myText.selectable = false;
                                _myText.x = (_oneelement[i].width - _elementButton.width) / 2;
                                _myText.y = (_oneelement[i].height - _elementButton.height) / 2;
 
                                _oneelement[i].addChild(_elementButton);
                                _oneelement[i].addChild(_myText);
                        }
 
                        var arrowLeft:Arrowleft = new Arrowleft;
                        arrowLeft.x = 10;
                        arrowLeft.y = 250;
 
                        arrowLeft.addEventListener(MouseEvent.MOUSE_DOWN, onMouseLeft);
 
                        addChild(arrowLeft);
 
                        var arrowRight:Arrowright = new Arrowright;
                        arrowRight.x = 760;
                        arrowRight.y = 250;
 
                        arrowRight.addEventListener(MouseEvent.MOUSE_DOWN, onMouseRight);
 
                        addChild(arrowRight);
 
                }
 
                private function onMouseRight(e:MouseEvent):void
                {
                        /*_currentPage++;
                          for (var i:int = 0; i < 6; i++)
                          {
 
 
 
                          _oneelement[i].addChildAt(_bitmapElement[i + _currentPage], 0);
                          //_bitmapElement[i].removeChildAt(0);
                        }*/

 
                        // удаляем нулевой элемент и сразу потом пушим на его место другой
                        var k:Bitmap = _bitmapElement[i];
                        _bitmapElement.splice(0, 1);
                        _bitmapElement.push(k);
                        for (var i:int = 0; i < _oneelement.length; i++)
                        {
                                _oneelement[i].addChildAt(_bitmapElement[i], 0);
                                addChild(_oneelement[i]);
                                trace(i);
                        }
                }
 
                private function onMouseLeft(e:MouseEvent):void
                {
                        /*_currentPage++;
                          for (var i:int = 0; i < 6; i++)
                          {
 
 
                          _oneelement[i].addChildAt(_bitmapElement[i + _currentPage], 0);
                          //_bitmapElement[i].removeChildAt(0);
                        }*/

 
                        var f:Bitmap = _bitmapElement[i];
                        _bitmapElement.splice(0, 1);
                        _bitmapElement.push(f);
                        for (var i:int = 0; i < _oneelement.length; i++)
                        {
                                _oneelement[i].addChildAt(_bitmapElement[i], 0);
                                addChild(_oneelement[i]);
                                trace(i);
                        }
 
                }
 
        }
 
}


AlexCooper 10.07.2013 21:13

Примерно так... Писал на скорую руку, но суть не в коде а в алгоритме.
Код AS3:

package  {
 
        import flash.display.Sprite;
        import flash.display.Bitmap;
        import flash.utils.setTimeout;
        import flash.geom.Point;
        import flash.events.MouseEvent;
 
 
        public class Mains extends Sprite {
 
                private var _viewer:Sprite = new Sprite();
 
                private var _bitmapArray:Vector.<Bitmap> = new Vector.<Bitmap>;
 
                private var _imageList:Array;
                private var _imageOffset:uint = 0;
 
                private var _offsetX:Number = 110;
                private var _offsetY:Number = 110;
 
                private var _showCount:uint = 3;
 
                public function Mains() {
 
                        initface();
 
                        init();
                }
 
                private function initface():void {
 
                        var btnArr:Array = new Array('prev','next');
 
                        var btn:Sprite;
 
                        for each( var btn_name:String in btnArr ) {
 
                                btn = new Sprite();
 
                                btn.name = btn_name;
                                btn.buttonMode = true;
 
                                setGraf(btn);
 
                                btn.x = numChildren*(btn.width+10);
 
                                btn.addEventListener(MouseEvent.CLICK, mouseHandler);
 
                                addChild(btn);
                        }
                }
 
                private function setGraf(spr:Sprite):void {
                        spr.graphics.beginFill(0x333333);
                        spr.graphics.drawRect(0,0,20,20);
                        spr.graphics.endFill();
                }
 
                private function mouseHandler(e:MouseEvent):void {
 
                        var vecOff:Number = (e.target.name=='next') ? _showCount : -_showCount;
 
                        _imageOffset += vecOff;
 
                        if (_imageOffset<0) _imageOffset = 0;
 
                        if (_imageOffset>=_bitmapArray.length) _imageOffset=_bitmapArray.length-1;
 
                        showImage();
                }
 
                private function init():void {
 
                        _viewer.y = .5*stage.stageHeight;
 
                        addChild(_viewer);
 
                        _imageList = new Config().getImageList();
 
                        for each( var url:String in _imageList) new loadPictures(url, new Point(100,100) ).conteiner = _bitmapArray;
 
                        loadHandler();
                }
 
                private function loadHandler():void {
 
                        if (_imageList.length == _bitmapArray.length)
                                showImage();
                        else
                                setTimeout(loadHandler, 100 );
                }
 
                private function showImage():void {
 
                        while ( _viewer.numChildren ) _viewer.removeChildAt(0);
 
 
                        for ( var index:uint = _imageOffset; index < _imageOffset+_showCount; index ++ ) {
 
                                if ( index >= _bitmapArray.length ) break;
 
                                _bitmapArray[index].x = _viewer.numChildren*_offsetX;
 
                                _viewer.addChild(_bitmapArray[index]);
                        }
                }
        }
}
 
internal class Config {
 
        public function Config() {}
 
        public function getImageList():Array {
 
                return new Array('http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
                                                'http://cs9329.vk.me/u968029/l_f7ac0439.png',
                                                'http://img.nnm.uz/images/06jfj.jpg',
                                                'http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
                                                'http://www.flasher.ru/forum/images/russian/flasher_logo_2013.gif',
                                                'http://cs9329.vk.me/u968029/l_f7ac0439.png',
                                                'http://img.nnm.uz/images/06jfj.jpg');
        }
}
 
 
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.utils.ByteArray;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.net.URLRequest;
import flash.display.Sprite;
import flash.geom.Point;
 
internal class loadPictures extends Sprite {
 
        public var bitmap:Bitmap;
 
        public var conteiner:Vector.<Bitmap>;
 
        private var _maxSize:Point;
 
        public function loadPictures($url:String, maxSize:Point = null):void {
 
                if (maxSize) _maxSize = maxSize;
 
                bitmap = new Bitmap();
 
                var req:URLRequest = new URLRequest($url);
                var _picLoader:Loader = new Loader();
                        _picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loader2ByteArray);
 
                _picLoader.load(req);
        }
 
        private function loader2ByteArray(evt:Event):void {
 
                var lInfo:LoaderInfo = LoaderInfo(evt.target);
                var ba:ByteArray = lInfo.bytes;
 
                reloadByteArray(ba);
        }
 
        private function reloadByteArray(ba:ByteArray):void {
 
                var reloader:Loader = new Loader();
                        reloader.loadBytes(ba);
 
                        reloader.contentLoaderInfo.addEventListener(Event.COMPLETE, reloaderComplete);
        }
 
        private function reloaderComplete(evt:Event):void {
 
                var imageInfo:LoaderInfo = LoaderInfo(evt.target);
 
                var bmd:BitmapData = new BitmapData(imageInfo.width,imageInfo.height);
 
                        bmd.draw(imageInfo.loader);
 
                bitmap = new Bitmap(bmd);
                bitmap.smoothing = true;
 
                if (_maxSize) {
                        var k:Number = Math.min(_maxSize.x,_maxSize.y) / Math.max(bitmap.width,bitmap.height);
 
                        bitmap.width *= k;
                        bitmap.height *= k;
                }
 
                if (conteiner) conteiner.push(bitmap);
 
                dispatchEvent(new Event(Event.COMPLETE));
        }
}


Heidy 11.07.2013 17:37

спс, попробую разобраться


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

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