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

pspmannikita 19.08.2011 21:03

Вопрос по ошибке
 
Простите, я впервые на этом форуме, да и в ас3 новичок. Видел проблемы, похожие на мою, но решения не нашел.
вот код
Код AS3:

package 
{
        import flash.display.*;
        import flash.sampler.NewObjectSample;
        import flash.events.*;
        import flash.ui.Keyboard;
 
 
        public class main extends Sprite
        {
                public var pl_spawnerX:Number = pl_spawner_inst.x;
                public var pl_spawnerY:Number = pl_spawner_inst.y;
                public var Player1:player1;
                public var pl_speed:int = 2;
                public function main():void
                {
                        trace("This application is initilized");
                        player();
                        addChild(Player1);
                }
                public function player()
                {
                        Player1.X = pl_spawnerX;
                        Player1.Y = pl_spawnerY;
                        Player1 = new player1();
 
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, controlkeyused);
                }
                public function controlkeyused(e:KeyboardEvent):void
                {
                        if (e.keyCode == 38)
                        {
                                addEventListener(Event.ENTER_FRAME,pl_movement_refresh_up);
                                function pl_movement_refresh_up()
                                {
                                        Player1.y = Player1.y - pl_speed;
                                }
                        }
                        if (e.keyCode == 40)
                        {
                                addEventListener(Event.ENTER_FRAME,pl_movement_refresh_down);
                                function pl_movement_refresh_down()
                                {
                                        Player1.y = Player1.y + pl_speed;
                                }
                        }
                        if (e.keyCode == 37)
                        {
                                addEventListener(Event.ENTER_FRAME,pl_movement_refresh_left);
                                function pl_movement_refresh_left()
                                {
                                        Player1.x = Player1.x - pl_speed;
                                }
                        }
                        if (e.keyCode == 39)
                        {
                                addEventListener(Event.ENTER_FRAME,pl_movement_refresh_right);
                                function pl_movement_refresh_right()
                                {
                                        Player1.x = Player1.x + pl_speed;
                                }
                        }
                }
        }
}

на этот код флеш пишет ошибку: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at main()

я понял смысл ошибки, но не знаю,как исправить.. Помогите, если знаете, в чем дело.

andrew911 19.08.2011 21:21

Как раз для вас свежий туториал
http://active.tutsplus.com/tutorials...s3-error-1009/

Дождитесь добавления на stage, а потом к нему обращайтесь.

-De- 19.08.2011 21:30

Не, ему это не поможет ) Ну, т.е. ссылка может и поможет, если английский знает, но там как минимум не только в stage проблема.
Всё просто. Если у вас есть какой-то обьект, который равен null. То если у вас в коде (выполняющемся, когда этот обьект null естессно) есть запись вида "обьект.что-то-неважно-что", то случится 1009.
Подробнее не расскажу, учитесь отлаживать, намного полезнее)

Genzo 19.08.2011 21:38

Код AS3:

package 
{
        import flash.display.*;
        import flash.sampler.NewObjectSample;
        import flash.events.*;
        import flash.ui.Keyboard;
 
 
        public class main extends Sprite
        {
                public var pl_spawnerX:Number;
                public var pl_spawnerY:Number;
                public var Player1:player1;
                public var pl_speed:int = 2;
                public function main():void
                {
                        pl_spawnerX = pl_spawner_inst.x;
                        pl_spawnerY = pl_spawner_inst.y;
                        trace("This application is initilized");
                        player();
                        addChild(Player1);
                }
                public function player()
                {
                        Player1 = new player1();
                        Player1.x = pl_spawnerX;
                        Player1.y = pl_spawnerY;
 
 
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, controlkeyused);
                }
                public function controlkeyused(e:KeyboardEvent):void
                {
                        if (e.keyCode == 38)
                        {
                                addEventListener(Event.ENTER_FRAME,pl_movement_refresh_up);
                                function pl_movement_refresh_up()
                                {
                                        Player1.y = Player1.y - pl_speed;
                                }
                        }
                        if (e.keyCode == 40)
                        {
                                addEventListener(Event.ENTER_FRAME,pl_movement_refresh_down);
                                function pl_movement_refresh_down()
                                {
                                        Player1.y = Player1.y + pl_speed;
                                }
                        }
                        if (e.keyCode == 37)
                        {
                                addEventListener(Event.ENTER_FRAME,pl_movement_refresh_left);
                                function pl_movement_refresh_left()
                                {
                                        Player1.x = Player1.x - pl_speed;
                                }
                        }
                        if (e.keyCode == 39)
                        {
                                addEventListener(Event.ENTER_FRAME,pl_movement_refresh_right);
                                function pl_movement_refresh_right()
                                {
                                        Player1.x = Player1.x + pl_speed;
                                }
                        }
                }
        }
}


pspmannikita 19.08.2011 21:39

я нашел в чем запара: проблема в том,что если убрать считывание координат спаунера-все ок!! вопрос:как лучше сделать считывание координат с объекта?

Добавлено через 1 минуту
.. Genzo, СПАСИБО огромное).. очень помогло и теперь все работает=)


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

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