Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null" (http://www.flasher.ru/forum/showthread.php?t=175231)

razer89 12.02.2012 23:45

Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"
 
Всем привет!
Помогите с решением вопроса, а то я уже целый день не могу понять, в чем моя ошибка.
Значит, главный класс создает экземпляр класса Aim:
Код AS3:

public class Main extends Sprite
        {
 
                var actors:Array = [];
 
                var aim:Aim;
 
 
                public function Main()
                {
                        setupWorld();
 
                        createBall();
 
                        aim = new vkSnook_Aim (new Point(actors[1].body.GetPosition().x, actors[1].body.GetPosition().y),
                        new Point (Input.mouseX, Input.mouseY));
                }
        }

Далее описание класса Aim:
Код AS3:

        public class Aim extends Sprite
        {
 
                private var aimSprite:Sprite;
 
                public function Aim(ballPosition:Point, mousePosition:Point)
                {
                        aimSprite = new Sprite();
 
                        aimSprite.graphics.lineStyle(1, 0xFFFFFF, 1);
 
                        aimSprite.graphics.lineTo(ballPosition.x, ballPosition.y);
                        aimSprite.graphics.lineTo(mousePosition.x, mousePosition.y);
 
                        parent.addChild(aimSprite); //вот здесь, судя по всему, происходит ошибка
                }
 
        }

Подскажите, в чем именно моя ошибка?
Заранее благодарен!

MikroAcse 12.02.2012 23:52

Код AS3:

public class Aim extends Sprite
        {
 
                private var aimSprite:Sprite;
 
                public function Aim(ballPosition:Point, mousePosition:Point)
                {
                                addEventListener(Event.ADDED_TO_STAGE,function(){
                        aimSprite = new Sprite();
 
                        aimSprite.graphics.lineStyle(1, 0xFFFFFF, 1);
 
                        aimSprite.graphics.lineTo(ballPosition.x, ballPosition.y);
                        aimSprite.graphics.lineTo(mousePosition.x, mousePosition.y);
 
                        stage.addChild(aimSprite);
                            })
                }
 
        }

Добавлять нужно в stage.

---------------
Не советую использовать анонимные функции

razer89 12.02.2012 23:55

что-то не совсем понял... как-то вы даже структуру кода не сохранили...))

MikroAcse 13.02.2012 00:03

Нужно ждать, пока станет доступным stage и как раз в него добавлять объекты.

razer89 13.02.2012 00:19

Спасибо, конечно, код заработал, но я чего-то все равно не понял своей ошибки))
Кстати, линии, которые должен рисовать класс Aim так и не рисуются... вообще... Такое чувство, что спрайт не добавился в stage, или что-то в этом роде... Не подскажешь?)
...
Точно! вставил трейс в функцию, которую вызывает слушатель событий - ничего не выводится...

MikroAcse 13.02.2012 00:22

razer89, извини, не подскажу, потому что пишу код на кадрах (я - кадроман).

razer89 13.02.2012 00:24

MikroAcse, мда, тяжелый случай))

elder_Nosferatu 13.02.2012 00:49

Код AS3:

public class Aim extends Sprite {
        private var aimSprite:Sprite;
 
        public function Aim(ballPosition:Point, mousePosition:Point) {
                ...
                parent.addChild(aimSprite); //вот здесь, судя по всему, происходит ошибка
        }
}

Никак не пойму зачем в контейнере создавать Объект и вместо того, чтобы его в этот же контейнер поместить, вы его выкидываете верхнему родителю...

А ошибка в том, что при выполнении конструктора у екземпляра класса Aim еше нет парента, а появится он лиш тогда, когда его ктото addChild-ом пригласит.

razer89 13.02.2012 22:00

elder_Nosferatu, все, понял свой косяк))))
Код AS3:

public class Main extends Sprite
        {
 
                var actors:Array = [];
 
                var aim:Aim;
 
 
                public function Main()
                {
                        setupWorld();
 
                        createBall();
 
                        aim = new vkSnook_Aim (this, new Point(actors[1].body.GetPosition().x, actors[1].body.GetPosition().y),
                        new Point (Input.mouseX, Input.mouseY));
                }
        }

Забыл указать парент в параметрах, принимаемых классом Aim!!!

Код AS3:

public class Aim extends Sprite
        {
 
                private var aimSprite:Sprite;
 
                public function Aim(parent:ObjectDisplayCantainer, ballPosition:Point, mousePosition:Point)
                {
                        aimSprite = new Sprite();
 
                        aimSprite.graphics.lineStyle(1, 0xFFFFFF, 1);
 
                        aimSprite.graphics.lineTo(ballPosition.x, ballPosition.y);
                        aimSprite.graphics.lineTo(mousePosition.x, mousePosition.y);
 
                        parent.addChild(aimSprite); //вот здесь, судя по всему, происходит ошибка
                }
 
        }


Nikem79 11.12.2013 16:04

В моём ролике постоянно вылазиют ошибки

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at _2014_fla::Timeline_37/frame22()

подскажите где искать, что спровоцировало ошибку?.. 22-х кадров у меня много всяких в разных мувиках... Как вы ищите инициаторов таких ошибок?


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

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