Понедельник, 25 Ноября 2024, 09:40

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
помогите с ошибкой
graneyДата: Четверг, 25 Августа 2011, 23:39 | Сообщение # 1
частый гость
Сейчас нет на сайте
Здравствуите. Пишу игру. Сделал кнопку возвращения в меню из уровня. Но при нжатии вылетает панель вывод и показывает следующее:
Code
at Square_v5_fla::MainTimeline/movePlayer()
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
  at Square_v5_fla::MainTimeline/movePlayer()
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
  at Square_v5_fla::MainTimeline/movePlayer()
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
  at Square_v5_fla::MainTimeline/movePlayer()
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
  at Square_v5_fla::MainTimeline/movePlayer()

Пожалуйста обьясните кто-нибудь что это значит? И что за обьект такой null?
iLORdДата: Четверг, 25 Августа 2011, 23:51 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
"null" - это "ноль", то есть отсутствие объекта. Либо у тебя ошибка в коде при обращении к объекту, либо объект в момент обращения не существует.

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


Bread Games - пилим ураганный экшен!
graneyДата: Пятница, 26 Августа 2011, 00:04 | Сообщение # 3
частый гость
Сейчас нет на сайте
Код кнопки:
Code
menu_btn.addEventListener(MouseEvent.CLICK, function(){gotoAndStop("choose_lvl")});


Код movePlayer() на всякий случай:

Code
stage.addEventListener(Event.ENTER_FRAME, movePlayer);    
function movePlayer(e:Event) {   
moves_txt.text = String(moves);
//столкновение с блоками================================================================
if (player.hitTestObject(Wall_1)) {         
    if (direction == 'right'){direction = "stop"; player.x = Wall_1.x - player.width - 2;}
    if (direction == 'left'){direction = "stop"; player.x = Wall_1.x + Wall_1.width + 2;}
    if (direction == 'up'){direction = "stop"; player.y = Wall_1.y + Wall_1.height + 2;}
    if (direction == 'down'){direction = "stop"; player.y = Wall_1.y - player.height - 2;}
}   
if (player.hitTestObject(Wall_2)) {         
    if (direction == 'right'){direction = "stop"; player.x = Wall_2.x - player.width - 2;}
    if (direction == 'left'){direction = "stop"; player.x = Wall_2.x + Wall_2.width + 2;}
    if (direction == 'up'){direction = "stop"; player.y = Wall_2.y + Wall_2.height + 2;}
    if (direction == 'down'){direction = "stop"; player.y = Wall_2.y - player.height - 2;}
}   
if (player.hitTestObject(Wall_3)) {         
    if (direction == 'right'){direction = "stop"; player.x = Wall_3.x - player.width - 2;}
    if (direction == 'left'){direction = "stop"; player.x = Wall_3.x + Wall_3.width + 2;}
    if (direction == 'up'){direction = "stop"; player.y = Wall_3.y + Wall_3.height + 2;}
    if (direction == 'down'){direction = "stop"; player.y = Wall_3.y - player.height - 2;}
}   
if (player.hitTestObject(Wall_4)) {         
    if (direction == 'right'){direction = "stop"; player.x = Wall_4.x - player.width - 2;}
    if (direction == 'left'){direction = "stop"; player.x = Wall_4.x + Wall_4.width + 2;}
    if (direction == 'up'){direction = "stop"; player.y = Wall_4.y + Wall_4.height + 2;}
    if (direction == 'down'){direction = "stop"; player.y = Wall_4.y - player.height - 2;}
}   
//-------------------------------------------------------------------------------------

switch (direction) {   
           case 'up' :   
            player.y -= 3.5;   
            break;   

           case 'down' :   
            player.y += 3.5;   
            break;   

           case 'right' :   
            player.x += 3.5;   
            break;   

           case 'left' :   
            player.x -= 3.5;   
            break;   

           case 'stop' :   
            break;   
}


И да, "choose_lvl" на другом слое, может в этом проблема?


Сообщение отредактировал graney - Пятница, 26 Августа 2011, 00:05
iLORdДата: Пятница, 26 Августа 2011, 09:33 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Я так понимаю, что у тебя код movePlayer() лежит на том же кадре, что и кнопка? И там же лежит сам player? А на кадре "choose_lvl" player отсутствует?

В таком случае, происходит вот что: событие movePlayer() продолжает вызываться каждый кадр, но не находит объекта player. Так что попробуй перед переходом на нужный кадр ещё и удалить слушатель события. И вообще, старайся удалять неиспользуемые слушатели - в последствии это может сказаться на производительности и дать ещё пару загадочных глюков.

Ну и отучайся кодить в кадрах, такой стиль изжил своё)


Bread Games - пилим ураганный экшен!
graneyДата: Пятница, 26 Августа 2011, 12:02 | Сообщение # 5
частый гость
Сейчас нет на сайте
спасибо. Буду пробовать.
А где же тогда кодить если не в кадрах?
iLORdДата: Пятница, 26 Августа 2011, 12:24 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Quote (graney)
А где же тогда кодить если не в кадрах?

В .as-файлах. В настройках документа можно указать главный класс, а в нём подключать остальные. Сначала ООП кажется колдуйством, но потом очень сильно облегчает жизнь.


Bread Games - пилим ураганный экшен!
graneyДата: Пятница, 26 Августа 2011, 13:20 | Сообщение # 7
частый гость
Сейчас нет на сайте
Не, до .as файлов я еще не дорос. Мне бы в тонкостях языка разобратся сначала. Но за информацию спасибо. Буду помнить.
Кстати, все работает. Спасибо за совет.
iLORdДата: Пятница, 26 Августа 2011, 19:02 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Не за что, обращайся)

Bread Games - пилим ураганный экшен!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг