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

Neirol 05.10.2009 19:35

Указание центра объекта
 
Загружаю изображение:
Код AS3:

var pic:Loader = new Loader();
pic.load(new URLRequest("1.jpg"));
addChild(pic);

Далее использую его в своих целей.
Возник вопрос. Как для pic указать его центр?
Просто если, например, вращать его без указания центра, то он будет вращаться по относительным к pic координатам 0 и 0, а нужно width / 2, height / 2

cybercub 05.10.2009 19:44

можно в контейнер засунуть а там уже отпозиционировать после загрузки в
-width / 2, -height / 2

Neirol 05.10.2009 19:46

А нет мануальчика по контейнерам?

cybercub 05.10.2009 19:54

Код AS3:

container = new Sprite();
addChild(container);
 
var pic:Loader = new Loader();
pic.load(new URLRequest("1.jpg"));
pic.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadImageComplete);
conteiner.addChild(pic);
 
private function onLoadImageComplete(event:Event):void {
        //позиционирование -width / 2, -height / 2
}


Neirol 05.10.2009 19:55

Огромное спасибо.
Контейнер как раз таки решил и мой второй вопрос о start и stop Drag.

Добавлено через 25 минут
Вот, кому интересно, доделал класс.
Загружает указанное изображение, и делает его "draggable" :)
Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.net.URLRequest;
        import flash.display.Loader;
 
        public class Image extends Sprite
        {
                private var pic:Loader = new Loader();
 
                public function Image(imgsrc:URLRequest, xpos:Number=0, ypos:Number=0)
                {               
                        pic.load(imgsrc);
                        pic.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadImageComplete);
                        this.addChild(pic);
 
                        x = xpos;
                        y = ypos;
 
                        addEventListener(MouseEvent.MOUSE_DOWN, dragingS);
                        addEventListener(MouseEvent.MOUSE_UP, dragingE);
                }
 
                public function onLoadImageComplete(e:Event):void
                {
                        pic.x = -width / 2;
                        pic.y = -height / 2;
                }
 
                public function dragingS(e:MouseEvent):void {
                        startDrag();
                }
 
                public function dragingE(e:MouseEvent):void {
                        stopDrag();
                }
        }
}


cybercub 05.10.2009 23:20

пару коментариев:
линейные размеры теоретически лучше у pic брать
листенеры должны быть приватными

ну и именования вроде imgsrc, pic, xpos и dragingE немного глаза режут..
на крайняк imgSrc но помому достаточно url,
xpos -> x или positionX
draggingE -> onMouseUp (это если следовать именованию onLoadImageComplete)
хотя может частично это у меня уже такие привычки 8)

Neirol 06.10.2009 15:53

Да, ты прав.
Просто код сделал как для примера, и взял кусок из твоего, для скорости.
Не привык пока все на автомате писать в корректном стиле.
А вот насчет линейных размеров не очень понял, поясни пожалуйста.

cybercub 06.10.2009 19:23

Думаю логичнее:
Код AS3:

pic.x = -pic.width / 2;
pic.y = -pic.height / 2;


elfon 06.10.2009 20:20

Когда Loader'ом загружается картинка, она становится его единственным потомком( притом Bitmap'ом). Дак вот, подвигать можно его(loader.content.x/y).
Про класс, лучше передавай String с адресом, а уже внутри создавай URLRequest.

Neirol 06.10.2009 21:23

elfon, спасибо за еще один вариант, но с вариантом контейнера ввиде спрайта, возможностей для различных манипуляций объектом гораздо больше чем просто лоадер.
В итоге, с вашими подсказками:
Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.net.URLRequest;
        import flash.display.Loader;
 
        public class Image extends Sprite
        {
                private var pic:Loader = new Loader();
 
                public function Image(url:String, positionX:Number=0, positionY:Number=0)
                {               
                        pic.load(new URLRequest(url));
                        pic.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadImageComplete);
                        this.addChild(pic);
 
                        x = positionX;
                        y = positionY;
 
                        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);
                        addEventListener(MouseEvent.MOUSE_UP, onMouseUPHandler);
                }
 
                public function onLoadImageComplete(e:Event):void
                {
                        pic.x = -pic.width / 2;
                        pic.y = -pic.height / 2;
                }
 
                public function onMouseDownHandler(e:MouseEvent):void {
                        startDrag();
                }
 
                public function onMouseUpHandler(e:MouseEvent):void {
                        stopDrag();
                }
        }
}



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

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