Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160

RemoveEvent в классе: TypeError: Error #1009: Cannot access a property or method of a null object reference

14.05.2014, 16:48. Показов 1945. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс объекта, в основном классе создается 6 объектов этого класса. Есть ф-ция, которая по таймеру удаляет слушатель, но слушатель удаляется у всех объектов, а надо чтобы удалился только у того, на который наводим мышью
ActionScript 3
1
2
3
private var bg_mob:MovieClip;
 
bg_mob.addEventListener(Event.ENTER_FRAME, mob_obzor);
Это слушатель

ActionScript 3
1
2
3
4
5
6
7
8
private function _sheremob_del(ev:TimerEvent):void
        {
            
            tm_info.stop();
            bg_mob = ev.currentTarget as MovieClip;
            bg_mob.removeEventListener(Event.ENTER_FRAME, mob_obzor);
            
        }
Это собственно удаление слушателя. Но по истечению таймера, вроде как слушатель удаляется у этого объекта, но вызывается ошибка
TypeError: Error #1009: Cannot access a property or method of a null object reference.
Как исправить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2014, 16:48
Ответы с готовыми решениями:

Ошибка [Fault] exception, information=TypeError: Error #1009: Cannot access a property or method of a null object reference
Есть Библиотека fl_package.swc. Среда Flash Develop Код: ... import fl.controls.RadioButton; import...

Cannot access a property or method of a null object reference для TextField в классе
private var text_dialog:MovieClip; text_dialog = new bg_dialog(); text_dialog.x = 0; text_dialog.y = - 200; ...

Cannot access a property or method of a null object reference
TanaTiX, огромное спасибо! Но есть ещё один вопрос var js = "window.ret = function(){return 1;}"; ExternalInterface.call('eval', js);...

17
 Аватар для Theoryofgames
254 / 238 / 50
Регистрация: 20.12.2011
Сообщений: 707
14.05.2014, 17:08
Цитата Сообщение от MrDead Посмотреть сообщение
bg_mob = ev.currentTarget as MovieClip;
Как у события таймера текущей целью может быть MovieClip? Приведите код, где вы подписываетесь на данное событие.
0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
14.05.2014, 17:13  [ТС]
ActionScript 3
1
2
tm_info = new Timer(2000);
tm_info.addEventListener(TimerEvent.TIMER, _sheremob_del);
0
 Аватар для Theoryofgames
254 / 238 / 50
Регистрация: 20.12.2011
Сообщений: 707
14.05.2014, 17:27
Ваша проблема в том, что Вы не используете ООП - многие вопросы отпали бы сразу.
Цитата Сообщение от MrDead Посмотреть сообщение
ActionScript 3
1
tm_info = new Timer(2000); tm_info.addEventListener(TimerEvent.TIMER, _sheremob_del);
Почему вы считаете, что currentTarget для события таймера должен стать некий моб, ведь у Вас таймер никак не связан с ним. В Вашем случае для каждого моба нужно создавать отдельный таймер, который будет следить за ним.
0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
14.05.2014, 19:12  [ТС]
Так если я добавляю на сцену несколько экземлпяров класса, разве у них не должен быть свой таймер? То есть если я навожу мышкой на моба, то удалится должен его таймер, ведь я навел мышью конкретно на него, а не на других аналогичных...Ведь я не создаю для каждого таймер, чтобы отобразился именно этого моба круг обзора, он отображается правильно, конкретного у того моба, на которого кликнул, а не у всех разом
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
14.05.2014, 19:15
MrDead, таймер - это отдельный объект. Он никак не связан с объектом сцены, если ттолько вы эту связь не наладите. Например, таймер можно поместить в объект сцены.
0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
14.05.2014, 19:25  [ТС]
Ок. Допустим я сделаю так
ActionScript 3
1
addEventListener(Event.ENTER_FRAME, mob_obzor);
ActionScript 3
1
2
3
4
5
6
7
private function _sheremob_del(ev:TimerEvent):void
        {
            removeEventListener(Event.ENTER_FRAME, mob_obzor);
            trace("Удалили слушатель");
            tm_info.stop();
            
        }
Почему слушатель не удаляется и ф-ция mob_obzor продолжает работать у объекта класса?
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
14.05.2014, 19:34
MrDead, вы приводите не связные куски кода. У вас сам метод _sheremob_del срабатывает? Подписка на слушатель и отписка осуществляются в пределах одного объекта?
0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
14.05.2014, 19:43  [ТС]
Да, срабатывает, если я добавлю
ActionScript 3
1
tm_info.removeEventListener(TimerEvent.TIMER, _sheremob_del);
То больше таймер не будет срабатывать, потому что его слушатель удалили, причем удаляется у того объекта, по которому навели мышкой.
Подписка на слушатель и отписка осуществляются в пределах одного объекта?
Нет, на сцене несколько объектов класса, в котором содержится данный код. Пересмотрел, код срабатывает. Но. Срабатывает только если навести на каждый объект родного класса, тогда у всех разом отключается это событие. Но мне надо чтобы отключался только у одного и только у того, на который навели мышкой. В другом месте мне сказали что нужно сделать так
ActionScript 3
1
2
  bg_mob = ev.currentTarget as MovieClip;
            bg_mob.removeEventListener(Event.ENTER_FRAME, mob_obzor);
Но как оказалось, не совсем правильно. Вернее так то код работает, если закрыть глаза на ошибку, слушатель удаляется у того моба, на которого навели мышкой, но вот сама ошибка всё фартчмачит.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
14.05.2014, 19:50
Покажите минимальный пример, иллюстрирующий проблему, в виде проекта.
0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
14.05.2014, 20:46  [ТС]
Прикрепил проект.
Вложения
Тип файла: rar Proect.rar (8.2 Кб, 2 просмотров)
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
14.05.2014, 21:15
Класс CreateMob
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package  Folder{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.events.MouseEvent;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.display.Bitmap;
        import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import flash.text.TextFieldType;
    public class CreateMob extends Sprite{
        //Моб
        private var bg_mob:Sprite;
        //Таймер
        private var tm_info:Timer;
        public function CreateMob() 
        {
            //Добавляем моба на сцену
            addMob();
            //Добавляем слушатели
            bg_mob.addEventListener(Event.ENTER_FRAME, mob_obzor);
            bg_mob.addEventListener(MouseEvent.MOUSE_OVER, _shere);
            
            
        }
 
//Ф-ция создания моба
        private function addMob():void
        {
            // Основное изображение моба на сцене
            bg_mob = new sprite_mob();
            bg_mob.x = 0;
            bg_mob.y = 0;
            addChild(bg_mob);
            
        }
        //Ф-ция срабатывания таймера
        private function _shere(event:MouseEvent):void
        {
            if(!tm_info){
                tm_info = new Timer(2000, 1);
                tm_info.addEventListener(TimerEvent.TIMER_COMPLETE, _sheremob_del);
                tm_info.start();
            }
            
        }
        //Ф-ция результата окончания таймера(Здесь мы удаляем слушатель того объекта, на который навели мышкой)
        private function _sheremob_del(ev:TimerEvent):void
        {
            bg_mob.removeEventListener(Event.ENTER_FRAME, mob_obzor);
            trace("Удалили слушатель");
            
        }
        //Ф0ция выводящая трейс до тех пор, пока не навели мышкой на объкт
        private function mob_obzor(ev:Event):void
        {
            //trace("Трататата");
        }
    }
    
}
Так?
0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
14.05.2014, 22:50  [ТС]
Ничего не догоняю, этот вариант работает в тестовом проекте. А вот так

ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
    private function mob_obzor(ev:Event):void
        {
    
            for (var i:uint = 0; i < main_bgplatform.mass.length; i++)
            {
                if (Point.distance(new Point(main_bgplatform.igrok.x, main_bgplatform.igrok.y), new Point(main_bgplatform.mass[i].x, main_bgplatform.mass[i].y)) < radius)
                {
                
                    main_bgplatform.mass[i].bg_mob.rotation = Math.atan2(main_bgplatform.mass[i].y - main_bgplatform.igrok.y, main_bgplatform.mass[i].x - main_bgplatform.igrok.x) * 180 / Math.PI - 90
                
            }
            }
        }
Не работает. Слушатель вроде удаляется, но моб продолжает следить за игроком. Если я всё это сотру и напишу
bg_mob.rotation += 90;
То после окончания таймера именно моб, на которого навели мышью остановится. Проблема конкретно в этом куске

ActionScript 3
1
2
3
4
5
6
for (var i:uint = 0; i < main_bgplatform.mass.length; i++)
            {
                if (Point.distance(new Point(main_bgplatform.igrok.x, main_bgplatform.igrok.y), new Point(main_bgplatform.mass[i].x, main_bgplatform.mass[i].y)) < radius)
                {
                
                    main_bgplatform.mass[i].bg_mob.rotation = Math.atan2(main_bgplatform.mass[i].y - main_bgplatform.igrok.y, main_bgplatform.mass[i].x - main_bgplatform.igrok.x) * 180 / Math.PI - 90
Но не пойму никак где косяк...
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
14.05.2014, 22:59
Цитата Сообщение от MrDead Посмотреть сообщение
Проблема конкретно в этом куске
Поставьте трэйсы или точки останова, проследите где именно несоответствие.
0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
14.05.2014, 23:17  [ТС]
Кажется понял почему так, у каждого объекта создается свой слушатель, но этот слушатель пробегается по всем элементам массива объектов, соответственно на какого-бы моба игрок не зашел, его слушатель удалится, но остальные(до тех пор пока не наведешь на каждого моба) остаются "живыми" и влияют на всех мобов в массиве. Остается теперь догнать, как исправить эту ситуацию. Вспомнил что у меня был косяк с этим и решил этот вопрос методом пробегания по всем элементам массива, однако нажил другие проблемы...Поворачивать моба прямо из родного класса не получилось, т.к. игрок и объект класса в разных системах координат. Надо как-то проверить по элементу в масиве, что конкретно у этого моба сейчас игрок и удалить его слушатель
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
15.05.2014, 00:15
Цитата Сообщение от MrDead Посмотреть сообщение
Надо как-то проверить по элементу в масиве, что конкретно у этого моба сейчас игрок и удалить его слушатель
Завести свойство и проверять его при необходимости?

Не по теме:

Вообще какая-то непонятная архитектура проекта...

0
16 / 16 / 6
Регистрация: 04.03.2014
Сообщений: 160
15.05.2014, 00:23  [ТС]
А вот как проверить это свойство, я что-то не особо представляю...
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
15.05.2014, 00:50
Как-то так
ActionScript 3
1
if(main_bgplatform.mass[i].bg_mob.нужное_свойство==нужное_значение){
Только не забыть создать это свойство в main_bgplatform.mass[i].bg_mob
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2014, 00:50
Помогаю со студенческими работами здесь

Ошибка: An object reference is required for the nonstatic field, method or property
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication5 { class Butterfly {...

Ошибка Attempt to invoke virtual method on a null object reference
Выдает ошибку. Никак не могу понять в чем проблема. Помогите плиз. Лог ошибки: Caused by: java.lang.NullPointerException: Attempt to...

Ошибка Attempt to invoke virtual method on a null object reference
Здравствуйте, создаю приложение, которое работает с firebase. При отправке сообщения приложение вылетает public class Tab3Activity...

Microsoft Visual Studio: Code generation for property 'BackgroundImage' failed. Error was: 'Object reference not set to an instance of an object.'
вот такая штука вылетает при открытии формы в дизайнере. что это вообще означает и как я мог такого наделать?

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
Здравствуйте, все сделала по уроку, но у меня выдает ошибку &quot;null&quot;. Подскажите где ошибка


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru