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

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

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

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 27
По умолчанию общение между классами и базовые концепции

Надо сделать такую штуку: появляется текстовое поле со словом (вариант ответа теста), оно таскается мышью, через 10 секунд исчезает и появляется следующее. За эти 10 с слово (если ответ верный) надо оттащить на мувик, который так или иначе среагирует.
С помощью советов форума, хелпа, О'Рейли и Гурского удалось сделать появление и исчезновение слов, и мышью они успешно таскаются.
Дальше картинку кораблика на сцене конвертирую в символ, класс назначаю "ship", базовый класс - flash.display.Sprite, instance name - caravella. Почему-то в Output всё равно считается MovieClip-ом. В ship.as создаю одноимённый класс, наследуя его от Sprite, импортирую и основной класс документа. В основной функции ship пытаюсь для начала оттрассировать hitTestObject каравеллы с объектом box из осн. класса документа (в нём сидит вариант ответа). Должно бы появиться "false", а появляется ругань на "possibly undefined variables". Проверял видимость переменных одного класса из другого в той же директории на более простых вещах (оттрассировать функцией одного класса переменную из другого) - то же самое. Всё объявлял "public". Ничего не понимаю! В хелпе и О'Рейли не смог найти объяснения, вроде, сказано, что если в публичном классе объявить публичную переменную или функцию, то её вполне можно прочитать в другом классе. Пожалуйста, если у кого найдётся время помотреть исходники и объяснить ошибки, сделайте это!
Я какие-то базовые понятия путаю? В php, например, переменные любого публичного класса можно (импортировав) прочитать и даже переопределить в любом же.
Исходники не могу загрузить. Вставляю код основного класса:
Код:
package 
{
	import flash.display.Sprite;
	import flash.text.*;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;

	public class answers extends Sprite
	{
		var words:Array =[
		{val:"Гаити",flag:true},  
		{val:"Ньюфаундленд",flag:false},  
		{val:"Гренландия",flag:false},  
		{val:"Куба",flag:true},  
		{val:"Цейлон",flag:false},
		{val:"Великобритания",flag:false},  
		{val:"Ямайка",flag:true}, 
		{val:"Антарктида",flag:false},
		{val:"табак",flag:true},
		{val:"индейцы",flag:true},
		{val:"золото",flag:false},
		{val:"Тринидад",flag:true},
		{val:"Шпицберген",flag:false},
		{val:"мыс Дежнёва",flag:false},
		{val:"Амазонка",flag:false}
		  ];
		var i:int =0;// итератор слов
		// создаём 10-секундный таймер и поле отсчёта
		var timer:Timer = new Timer(1000, 10);
		var timerField:TextField=new TextField;
		// создаём клип-контейнер
		var box:Sprite=new Sprite;
		// создаем поле ответа
		var tf:TextField=new TextField;

		public function answers():void
		{
			//добавляем листенеры к таймеру
			timer.addEventListener(TimerEvent.TIMER, onTick);
			timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
			// Перехватываем нажатие кнопки мыши
			box.addEventListener(MouseEvent.MOUSE_DOWN,handleMouseDown);
			// Отпускание мышки
			box.addEventListener(MouseEvent.MOUSE_UP,handleMouseUp);
			//Отпускание мышки за пределами флэшки
			box.addEventListener(MouseEvent.MOUSE_OUT,handleMouseUp);

			//запускаем первое слово
			newWord(i);
		}
		//собственно функция появления варианта ответа
		private function newWord(i):void
		{
			//запускаем таймер
			timer.reset();
			timer.start();
			//поле таймера
			timerField.x =450;
			timerField.text = "Осталось " + timer.repeatCount + " с.";
			addChild(timerField);
			//заполняем и форматируем поле ответа
			tf.autoSize=TextFieldAutoSize.LEFT;
			tf.selectable=false;
			tf.text=words[i].val;
			var format:TextFormat=new TextFormat;
			format.font="Verdana";
			format.size=16;
			format.bold=true;
			tf.setTextFormat(format);
			//выводим клип и суём туда текстовое поле
			box.x =10;
			box.y =10;
			addChild(box);
			box.addChild(tf);
		}
		//Функции Drag&Drop
		private function handleMouseDown(event:MouseEvent):void
		{
			box.startDrag();
		}
		private function handleMouseUp(event:MouseEvent):void
		{
			box.stopDrag();
		}
		//функции таймера
		private function onTick(event:TimerEvent):void
		{
			// показывает счётчик
			var t:int = event.target.repeatCount-event.target.currentCount;
			timerField.text="Осталось " + t + " с.";
		}
		private function onTimerComplete(event:TimerEvent):void
		{
			//клип-контейнер и счётчик исчезают
			removeChild(timerField);
			box.removeChild(tf);
			removeChild(box);
			//если не дошли до конца, сдвигаем итератор и запускаем следующее слово
			if (i < words.length-1) {
				i++;
				newWord(i);
			}

		}
	}
}
...и класса ship:
Код:
package 
{
	import flash.display.Sprite;
	import answers;
	public class ship extends Sprite
	{
		public function ship():void
		{
			trace(this.caravella.hitTestObject(answers.box));
		}
	}
}
Заранее благодарен, хотя, похоже, вакансию я уже пролохал

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

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

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


 


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


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