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

C0ffe1n 30.07.2010 14:30

Неверный размер объекта при создании экземпляра
 
Здраствуйте уважаемые флешеры! Поясните пожалуйста, в чем проблема.
Я описал класс module.as, в котором я отрисовываю картинку pic.png, размер которой 32х32. В основном классе Main.as, при создании экземпляра класса module.as размеры данного объекта равны 101. Проблема в том что я ставлю на этот объект событие OVER и OUT, которые должны срабатывать при попадании курсора мыши на картинку(размер которой 32), а события эти срабатыват когда курсор еще не вошел на картинку. Это важно потому что таких объектов будет несколько и стоять они будут рядом, тогда получается что последний добавленный объект будет закрывать предыдущий.
Если я пытаюсь изминить размер данного объекта на 32х32, то в этом случае искажается картинка (она ужимается). А это очень не хорошо =(.

Подскажите как решить проблему?

скрипт Module.as

Код AS3:

package modelObjects
 
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        import flash.display.Bitmap;
        import flash.media.Sound;
 
        public class Module extends MovieClip
        {
                [Embed (source = "../images/pic.png")] [Bindable] public var Img:Class;
 
                public function Module(type:String)
                {
                        var pic:Bitmap;
                        pic = new Img();
                        this.addChild(pic);
                        this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
                        this.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
                }
 
                private function mouseOverHandler(e:MouseEvent):void
                {       
                        trace("IN");
                }
 
                private function mouseOutHandler(e:MouseEvent):void
                {       
                        trace("OUT");
                }
        }
}

основной скрипт Main.as

Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import modelObjects.Module;
 
        public class Main extends MovieClip
        {
                public var mdl:Module; //объект игра
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        mdl = new Module();
                        mdl.x = 300;
                        mdl.y = 300;
                        this.addChild(mdl);
                }
        }
}


Хемуль 30.07.2010 14:47

2 C0ffe1n:
Цитата:

В основном классе Main.as, при создании экземпляра класса module.as размеры данного объекта равны 101.
Картинка точно-точно 32х32, а trace выдаёт 101?

Zebestov 30.07.2010 14:51

ты конечно разберись, что за фигня, но пока, может, просто повесишь обработчики мыша не на мувик, содержащий Bitmap, а на сам Bitmap?

gloomyBrain 30.07.2010 15:15

@Zebestov
Класс Bitmap не является InteractiveObject (иначе говоря, не реагирует на пользовательские события ввода)

C0ffe1n 30.07.2010 15:19

Хемуль
да картинка точно 32х32
а если к примеру напишу в main.as
Код AS3:

trace(mdl.width)

то выдает 101. При чем я проверял, размер 101 у всех создаваемых объектов (я так понимаю что размер 101х101 определяется по умолчанию)
Если добавить трайсе в Module.as
Код AS3:

trace(pic.width)

то выводит значение 32.

Zebestov
Может быть это и выход, надо пробывать, но все же это концептуальная проблема.

P.S. Я использую FlashDevelop и Flex SDK

gloomyBrain 30.07.2010 15:24

Ну по-быстрому тогда можно оверрайдить
Код AS3:

override public function get width():Number {
return this._pic.width;
}


PgeorgyV 30.07.2010 15:25

у меня все ок, тут ошибка
Код AS3:

public function Module(type:String)

уж тогда так
Код AS3:

public function Module(type:String=null)

ну или передавать параметр type

C0ffe1n 30.07.2010 15:34

gloomyBrain
чет не понял тебя, переведи

PgeorgyV
а ты попробуй наводить курсор мышки на картинку рядом (справа или снизу), и ты увидешь что обработчик события OVER и OUT все равно срабатывают

Zebestov 30.07.2010 15:38

Цитата:

Сообщение от gloomyBrain (Сообщение 925924)
@Zebestov
Класс Bitmap не является InteractiveObject (иначе говоря, не реагирует на пользовательские события ввода)

точно.

PgeorgyV 30.07.2010 15:41

Цитата:

Сообщение от C0ffe1n (Сообщение 925930)
а ты попробуй наводить курсор мышки на картинку рядом (справа или снизу), и ты увидешь что обработчик события OVER и OUT все равно срабатывают

Ну я как бы попробовал, sdk 4.1.0.16076 + у нас разные картинки, может заюзать какую-нить другую?


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

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