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

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

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

Регистрация: May 2012
Сообщений: 166
По умолчанию Передача параметров в таймер

Здравствуйте, прошу помощи в такой ситуации:
Пишу функцию "пинка" в игре, которая заставляет объект-цель отлетать от объекта-источника на определенное расстояние в период действия таймера:
Код AS3:
		public static function knock(istochnik:Object, target:Object, knockPow:int, kockRight:Boolean):void
		{
			target.fly = true;
			if (target.x > istochnik.x)
			{
				if (target.sizeMob < knockPow)
				{
					sk.timerKnockR.start();
				}
			}
			if (target.x < istochnik.x)
			{
				if (target.sizeMob < knockPow)
				{
					sk.timerKnockL.start();
				}
			}
		}
Все это сделанно универсально, чтобы передавать параметры из других классов, но возникает проблема с передачей этих же параметров исполняющему таймеру.
Код AS3:
		public static function knockRight(target:Object):void
		{
			sk.timerKnockL.stop();    // sk - это статическая переменная (не обращайте внимания)
			sk.timerKnockComp.start();
			target.x +=  5 + Math.random() * 5;
			target.gotoAndStop("knock_L");
		}
Ошибка: [TimerEvent type="timer" bubbles=false cancelable=false eventPhase=2]
ReferenceError: Error #1069: Не удалось найти свойство x в flash.events.TimerEvent; отсутствует значение по умолчанию.
Параметр target не передается, и я не знаю как нужно в таком случае его передать.

Можно было бы создать переменную в этом же классе которая бы принимала значение передаваемого параметра в статическую функцию knock(istochnik:Object, target:Object, knockPow:int, kockRight:Boolean), но в таком случае будит скопирован 1 объект, а так как под объектом-цель будит пониматься несколько объектов из массива объектов в цикле, то этот вариант не подойдет.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.


Последний раз редактировалось Tetraeon; 17.03.2014 в 15:03.
Старый 17.03.2014, 17:10
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Наследуйтесь от Timer, и в класс-наследник добавьте переменные которые вам нужны
__________________
adobe AS3 manual

Старый 17.03.2014, 17:20
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 3  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
можно маленький примерчик, не совсем понял как это.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

Старый 17.03.2014, 17:46
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 4  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Код AS3:
public static function knockRight(target:Object):void
Скорее всего это обработчик события таймера, а значит "target" это "flash.events.TimerEvent". У этого класса нет поля "x" и функции "gotoAndStop".

Старый 17.03.2014, 18:10
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 5  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Цитата:
Сообщение от toFL Посмотреть сообщение
Код AS3:
public static function knockRight(target:Object):void
Скорее всего это обработчик события таймера, а значит "target" это "flash.events.TimerEvent". У этого класса нет поля "x" и функции "gotoAndStop".
target:Object там конечно не в тему.. это попытка передать параметр из функции выше.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Форум Flasher.ru > Flash > ActionScript 3.0 > Статьи > Слушатель с параметром
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 27.03.2014, 14:34
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 7  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Не однократно прочитал "Сушатель с параметром", либо я не понял, либо там не то, что мне нужно... Как бы параметры в простую функцию я могу без труда передать, а вот в таймер не получается. Не вижу другого способа проделать то что мне нужно без помощи таймера т.к. в определенный момент объект должен двигаться ("x" и "gotoAndStop"), а по истечению времени должен остановится.
Раньше таймер был в классе объекта (моб) и проблем небыло, но идея такая, что бы функция была универсальна для любого объекта (герой и любые мобы).
У меня мало опыта в программировании поэтому прощу прощения за непонятливость.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

Старый 27.03.2014, 14:50
FlasherEgor вне форума Посмотреть профиль Отправить личное сообщение для FlasherEgor Найти все сообщения от FlasherEgor
  № 8  
Ответить с цитированием
FlasherEgor

Регистрация: Nov 2013
Сообщений: 86
Может быть, наследовать героя и любых мобов от какого-то класса Entity, содержащего этот метод?

Старый 27.03.2014, 15:05
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 9  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Вот с переопределением класса Timer -
Хотя я сейчас ещё раз перечитал и кажется не правильно Вас понял. У Вас есть один статический обработчик событий, который обрабатывает сразу много таргетов?
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.TimerEvent;
 
	public class Main extends Sprite 
	{
		private var _target:Sprite;
		public function Main() 
		{
			_target = new Sprite();
			_target.graphics.beginFill(0xA83824);
			_target.graphics.drawRect(0, 0, 50, 50);
			_target.graphics.endFill();
			_target.x = 200;
			_target.y = 200;
			this.addChild(_target);
 
			var timer:SampleTimer = new SampleTimer(1000, 10, _target);
			timer.addEventListener(TimerEvent.TIMER, timer_timerHandler);
			timer.start();
		}
 
		private function timer_timerHandler(event:TimerEvent):void 
		{
			var object:Sprite = event.target.object as Sprite;
			object.x += 50;
		}
	}
 
}
Код AS3:
package
{
	import flash.utils.Timer;
 
	public class SampleTimer extends Timer 
	{
		private var _object:Object;
		public function SampleTimer(delay:Number, repeatCount:int=0, object:Object = null) 
		{
			_object = object;
			super(delay, repeatCount);
		}
 
		public function get object():Object 
		{
			return _object;
		}
 
		public function set object(value:Object):void 
		{
			if (value == _object) 
			{
				return;
			}
			_object = value;
		}
 
	}
 
}

Старый 27.03.2014, 17:19
Tetraeon вне форума Посмотреть профиль Отправить личное сообщение для Tetraeon Найти все сообщения от Tetraeon
  № 10  
Ответить с цитированием
Tetraeon

Регистрация: May 2012
Сообщений: 166
Спасибо это вроде то что мне нужно, буду разбираться )
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение.

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

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

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


 


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


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