Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.10.2013, 23:41
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 1  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Post Недоступность текстфилда в многофреймовом мувиклипе.

Воссоздаю игру Minesweeper, из книжки Эмануэля Феронато, по наводке KumoKairo.
Код класса Main скопирован из исходника, так что моей ошибки набора здесь нет.

Код использует созданный в библиотеке мувиклип tile_movieclip, пролинкованный галочкой к одноименному классу, который содержит 4 фрэйма.
На каждом фрэйме находится одно из состояний квадратика: неоткрыт, открыт с числом, взрыв, флаг.

Второй фрейм содержит несгруппированный, несимвольный квадрат, поверх которого находится динамический текстфилд:
Нажмите на изображение для увеличения
Название: Snap2.png
Просмотров: 148
Размер:	57.1 Кб
ID:	30092

И вот с ним возникает проблема.
В одной из функций основного документ-класса к нему идет обращение вот так:

Код AS3:
 
package
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class Main extends Sprite
	{
		//...
		private var game_container:Sprite = new Sprite;
		private var tile:tile_movieclip;
		//...
 
		public function Main()
		{
		//...
		}
 
		private function onTileClicked(e:MouseEvent):void
		{
			if (! gameOver)
			{
				var clicked_tile:tile_movieclip = e.currentTarget as tile_movieclip;
 
				//...
						if (clickedValue > 0 && clickedValue < 9)
						{
							clicked_tile.gotoAndStop(2);
							clicked_tile.tile_text.text = clickedValue.toString();
						}
				//...
			}
		}
     }
}
То есть через конструкцию
Код AS3:
clicked_tile.tile_text.text
Запуск проекта проходит без ошибок.
Но когда я нажимаю мышкой на квадратик такого типа, то это приводит к ошибке:
Цитата:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Main/::onTileClicked()
Если протрейсить вот так:
Код AS3:
trace("clicked_tile.tile_text == ", clicked_tile.tile_text)
То получим:
Цитата:
clicked_tile.tile_text == null
То есть, по каким-то причинам, этот текстфилд равен нулл? Но почему?
Или может быть, тут есть некий трюк, не работающий для версии Flash CS3.

Старый 11.10.2013, 01:05
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Естественно. Если вы находитесь на 1ом кадре, и пыьтаетесь что то сделать с текстом - которого там нет, он есть только на втором, то вот и обшибка. Сначала надо перейти на второй, принудительно - gotoAndStop(2)
__________________
Марк Tween

Старый 11.10.2013, 01:15
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 3  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
private var tile:tile_movieclip;
Советую бежать от таких "аффторов".
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 11.10.2013, 09:10
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 4  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
in4core, ну так а разве это:

Код AS3:
clicked_tile.gotoAndStop(2);
Не оно?

dimarik, но почему?

Старый 11.10.2013, 11:14
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Вы дали команду перейти на N-ый кадр, но не дожидаетесь перехода. Реально все произойдет в следующем кадре, поэтому нужно подписаться на событие enterFrame, в обработчике тут же отписаться и обратиться к этому текстфилду.
__________________
тут я

Старый 11.10.2013, 13:20
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 6  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
КорДум, благодарю за идею, несколько позже проверю.

Добавлено через 9 часов 30 минут
Насколько я понял, нужно было сделать так:

Код AS3:
 
         //...
         if (clickedValue > 0 && clickedValue<9)
		{
			clicked_tile.gotoAndStop(2);
			clicked_tile.addEventListener(Event.ENTER_FRAME, readText);
			//...
 
		}
 
		private function readText(e:Event)
		{
			trace("ENTERFRAME!");
			trace("e.currentTarget == ", e.currentTarget, " name = ", e.currentTarget.name );
			trace("e.target == ", e.target, " name = ", e.target.name);
			trace("e.currentTarget.currentFrame == ", e.currentTarget.currentFrame);
 
			e.currentTarget.removeEventListener(Event.ENTER_FRAME, readText);
			e.currentTarget.tile_text.text = "3!";
		}
Однако, результат тот же, в окне Output видим следующее:
Цитата:
ENTERFRAME!
e.currentTarget == [object tile_movieclip] name = instance66
e.target == [object tile_movieclip] name = instance66
e.currentTarget.currentFrame == 2
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Main/::readText()
И вот судя по последнему трэйсу мы в правильном фрейме, а текст не виден, странно.


Последний раз редактировалось Fogflasher; 11.10.2013 в 22:53.
Старый 12.10.2013, 12:27
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 7  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Дайте ссылку на оригинальню книжку, но уже по фрагментам видно, что там что-то феерическое написано.
Хотя Феронато иногда что-то даже нормальное писал.
__________________
Отряд Котовскага

Старый 12.10.2013, 15:36
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 8  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Котяра, Flash Game Development by Example

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
Error #1009 , feronato , game , minesweeper
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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