Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не работает stageWidth, stageHeight (http://www.flasher.ru/forum/showthread.php?t=169913)

Шурик_2 14.10.2011 14:36

Не работает stageWidth, stageHeight
 
Код AS3:

package 
{
        import flash.display.Stage
        import flash.display.Sprite;
        public class matrix2 extends Sprite
        {
                public function matrix2()
                {
                        // Получаем размер рабочей области
 
                        var w:int = stage.stageWidth;
                        var h:int = stage.stageHeight;
                        trace("размер по горизонтали = ",h, "размер по вертикали = ", w); // [Fault] exception, information=TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
 
                        }
            }
}

Мануалы читал, экспериментировал. Результат один и тот же.

Inet_PC 14.10.2011 14:38

Нужно дождаться добавления на stage.

stweet 14.10.2011 14:38

Код AS3:

var w:int;
var h:int;
 
if (stage){
        w = stage.stageWidth;
        h = stage.stageHeight;
}
 
trace(w, h);


Inet_PC 14.10.2011 14:39

Код AS3:

addEventListener(Event.ADDED_TO_STAGE, onAdded);
 
//...
private function onAdded(e: Event):void
{
        var w:int = stage.stageWidth;
        var h:int = stage.stageHeight;
        trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
}

Добавлено через 30 секунд
опаздал

Шурик_2 14.10.2011 14:40

Inet_PC, спасибо!

Inet_PC 14.10.2011 14:41

Кстати по горизонтали это w, а не h.

Шурик_2 14.10.2011 14:48

Цитата:

Сообщение от Inet_PC (Сообщение 1039142)
Код AS3:

addEventListener(Event.ADDED_TO_STAGE, onAdded);
 
//...
private function onAdded(e: Event):void
{
        var w:int = stage.stageWidth;
        var h:int = stage.stageHeight;
        trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
}

Добавлено через 30 секунд
опаздал

Ругается!:
Цитата:

// [Fault] exception, information=TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"

t4arty 14.10.2011 14:52

Код AS3:

public function pixScroll():void 
                {
                        if (stage) {
                                init();
                        }else {
                                addEventListener(Event.ADDED_TO_STAGE, init);
                        }
                }
 
                private function init(e:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                }

и будет Вам счастье. (не пишите в кадрах :))

Inet_PC 14.10.2011 14:53

Покажите весь код.

Шурик_2 14.10.2011 14:56

Я пишу в классах, t4arty!
Inet_PC, одну минутку.

Добавлено через 3 минуты
t4arty, принёс мне счастье!:)

Genzo 14.10.2011 15:05

Код AS3:

package 
{
        import flash.display.Stage
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.filters.GlowFilter;
        import flash.geom.Matrix;
        import flash.geom.Point;
 
        public class LEDmatrix extends Sprite
        {
                private var bmpd1:BitmapData;
                private var bmpd2:BitmapData;
                private var LEDobj:LED;
                private var LEDobj2:LED;
                private var w:int;
                private var h:int;
 
                public function LEDmatrix()
                {
                        if(super.stage)
                        {
                                init();
                        }
                        else
                        {
                                // Получаем размер рабочей области
                                this.addEventListener(Event.ADDED_TO_STAGE, init);
                        }
 
 
 
 
                }
                public function init(e:Event = null):void
                {
                        if(this.hasEventListener(Event.ADDED_TO_STAGE))
                        {
                                this.removeEventListener(Event.ADDED_TO_STAGE, onAdded);
                        }
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                        var w:int = stage.stageWidth;
                        var h:int = stage.stageHeight;
                        trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
                        //создаем две звезды и добавляем их в список отображения
                        runProgramm();
                }
                private function runProgramm():void
                {
                // Определяем размер светодиода
                        var size:Number = 3;
 
                        //Зазор между светодиодами
                        var LEDgap:Number = size + 6;
 
                        // Определяем отступы от краев раб.обл.(слева и сверху); размер светодиода делённый надвое
                        var identX:Number = size / 2;
                        var identY:Number = identX;
 
                        // Колличество светодиодов по горизонтали
                        var LEDamtX:Number = Math.ceil(w / LEDgap);
 
                        // Колличество светодиодов по вертикали
                        var LEDamtY:Number = Math.ceil(h / LEDgap);
 
                        LEDobj = new LED(60);//рисунок
                        LEDobj.LEDlight = false;
                        LEDobj.x = 200;
                        LEDobj.y = 100;
                        addChild(LEDobj);
 
                        // Строим сетку из светодиодов:
                        //сначала вертикаль
                        for (var i:int=0; i<LEDamtX; i++)
                        {
                                //затем горизонталь
                                for (var n:int=0; n<LEDamtY; n++)
                                {
                                        //  Создаём светодиодную матрицу из заранне заготовленных мувиклипов
                                        var LEDobj2:LED = new LED(size);
                                        var xn:Number = i * LEDgap + identX;
                                        var yn:Number = n * LEDgap + identY;
                                        LEDobj2.x = xn;
                                        LEDobj2.y = yn;
                                        LEDobj2.LEDlight = false;//выключаем СВЕТОДИОДЫ
                                        addChild(LEDobj2);
 
 
                                }
                        }
 
 
                        // создаем два растровых изображения
                        bmpd1 = new BitmapData(stage.stageWidth,stage.stageHeight,true,0);
                        bmpd2 = bmpd1.clone();
 
                        // очищаем растровые изображения
                        bmpd1.fillRect(bmpd1.rect, 0);
                        bmpd2.fillRect(bmpd2.rect, 0);
 
                        // отрисовываем каждую звезду в своем растровом изображении
                        bmpd1.draw(LEDobj, new Matrix(1, 0, 0, 1, LEDobj.x, LEDobj.y));
                        bmpd2.draw(LEDobj2, new Matrix(1, 0, 0, 1, LEDobj2.x, LEDobj2.y));
 
                        // проверяем столкновение
                        if (bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255))
                        {
                                LEDobj2.graphics.clear();
                                LEDobj2.LEDlight = true;// оранджевый
                        }
                        else
                        {
                                LEDobj.visible = false;
                                LEDobj.LEDlight = false;// серый
                        }
                }
        }
}


Inet_PC 14.10.2011 15:08

Код AS3:

package 
{
        import flash.display.Stage
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.filters.GlowFilter;
        import flash.geom.Matrix;
        import flash.geom.Point;
 
        public class LEDmatrix extends Sprite
        {
                private var bmpd1:BitmapData;
                private var bmpd2:BitmapData;
                private var LEDobj:LED;
                private var LEDobj2:LED;
                private var w:int;
                private var h:int;
 
                public function LEDmatrix()
                {
                        super();
                        addEventListener(Event.ADDED_TO_STAGE, onAdded);
                }
 
                private function onAdded(e: Event):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, onAdded);
 
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
 
                        //создаем две звезды и добавляем их в список отображения
 
 
                        // Получаем размер рабочей области
 
 
                        var w:int = stage.stageWidth;
                        var h:int = stage.stageHeight;
                        trace("размер по горизонтали = ",h, "размер по вертикали = ", w);
 
                                // Определяем размер светодиода
                        var size:Number = 3;
 
                        //Зазор между светодиодами
                        var LEDgap:Number = size + 6;
 
                        // Определяем отступы от краев раб.обл.(слева и сверху); размер светодиода делённый надвое
                        var identX:Number = size / 2;
                        var identY:Number = identX;
 
                        // Колличество светодиодов по горизонтали
                        var LEDamtX:Number = Math.ceil(w / LEDgap);
 
                        // Колличество светодиодов по вертикали
                        var LEDamtY:Number = Math.ceil(h / LEDgap);
 
                        LEDobj = new LED(60);//рисунок
                        LEDobj.LEDlight = false;
                        LEDobj.x = 200;
                        LEDobj.y = 100;
                        addChild(LEDobj);
 
                        // Строим сетку из светодиодов:
                        //сначала вертикаль
                        for (var i:int=0; i<LEDamtX; i++)
                        {
                                //затем горизонталь
                                for (var n:int=0; n<LEDamtY; n++)
                                {
                                        //  Создаём светодиодную матрицу из заранне заготовленных мувиклипов
                                        var LEDobj2:LED = new LED(size);
                                        var xn:Number = i * LEDgap + identX;
                                        var yn:Number = n * LEDgap + identY;
                                        LEDobj2.x = xn;
                                        LEDobj2.y = yn;
                                        LEDobj2.LEDlight = false;//выключаем СВЕТОДИОДЫ
                                        addChild(LEDobj2);
 
 
                                }
                        }
 
 
                        // создаем два растровых изображения
                        bmpd1 = new BitmapData(stage.stageWidth,stage.stageHeight,true,0);
                        bmpd2 = bmpd1.clone();
 
                        // очищаем растровые изображения
                        bmpd1.fillRect(bmpd1.rect, 0);
                        bmpd2.fillRect(bmpd2.rect, 0);
 
                        // отрисовываем каждую звезду в своем растровом изображении
                        bmpd1.draw(LEDobj, new Matrix(1, 0, 0, 1, LEDobj.x, LEDobj.y));
                        bmpd2.draw(LEDobj2, new Matrix(1, 0, 0, 1, LEDobj2.x, LEDobj2.y));
 
                        // проверяем столкновение
                        if (bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255))
                        {
                                LEDobj2.graphics.clear();
                                LEDobj2.LEDlight = true;// оранджевый
                        }
                        else
                        {
                                LEDobj.visible = false;
                                LEDobj.LEDlight = false;// серый
                        }
                }
        }
}



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

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