помогите с ошибкой
|
|
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 - пилим ураганный экшен!
|
|
| |