|
|
|||||
Регистрация: May 2012
Сообщений: 166
|
Передача параметров в таймер
Здравствуйте, прошу помощи в такой ситуации:
Пишу функцию "пинка" в игре, которая заставляет объект-цель отлетать от объекта-источника на определенное расстояние в период действия таймера: 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(); } } } public static function knockRight(target:Object):void { sk.timerKnockL.stop(); // sk - это статическая переменная (не обращайте внимания) sk.timerKnockComp.start(); target.x += 5 + Math.random() * 5; target.gotoAndStop("knock_L"); } ReferenceError: Error #1069: Не удалось найти свойство x в flash.events.TimerEvent; отсутствует значение по умолчанию. Параметр target не передается, и я не знаю как нужно в таком случае его передать. Можно было бы создать переменную в этом же классе которая бы принимала значение передаваемого параметра в статическую функцию knock(istochnik:Object, target:Object, knockPow:int, kockRight:Boolean), но в таком случае будит скопирован 1 объект, а так как под объектом-цель будит пониматься несколько объектов из массива объектов в цикле, то этот вариант не подойдет.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. Последний раз редактировалось Tetraeon; 17.03.2014 в 15:03. |
|
|||||
Наследуйтесь от Timer, и в класс-наследник добавьте переменные которые вам нужны
__________________
adobe AS3 manual |
|
|||||
Регистрация: May 2012
Сообщений: 166
|
можно маленький примерчик, не совсем понял как это.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
Banned
|
Скорее всего это обработчик события таймера, а значит "target" это "flash.events.TimerEvent". У этого класса нет поля "x" и функции "gotoAndStop".
|
|
|||||
Регистрация: May 2012
Сообщений: 166
|
target:Object там конечно не в тему.. это попытка передать параметр из функции выше.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
.
|
|
|
|||||
Регистрация: May 2012
Сообщений: 166
|
Не однократно прочитал "Сушатель с параметром", либо я не понял, либо там не то, что мне нужно... Как бы параметры в простую функцию я могу без труда передать, а вот в таймер не получается. Не вижу другого способа проделать то что мне нужно без помощи таймера т.к. в определенный момент объект должен двигаться ("x" и "gotoAndStop"), а по истечению времени должен остановится.
Раньше таймер был в классе объекта (моб) и проблем небыло, но идея такая, что бы функция была универсальна для любого объекта (герой и любые мобы). У меня мало опыта в программировании поэтому прощу прощения за непонятливость.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
Регистрация: Nov 2013
Сообщений: 86
|
Может быть, наследовать героя и любых мобов от какого-то класса Entity, содержащего этот метод?
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Вот с переопределением класса Timer -
Хотя я сейчас ещё раз перечитал и кажется не правильно Вас понял. У Вас есть один статический обработчик событий, который обрабатывает сразу много таргетов? 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; } } } 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; } } } |
|
|||||
Регистрация: May 2012
Сообщений: 166
|
Спасибо это вроде то что мне нужно, буду разбираться )
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
Часовой пояс GMT +4, время: 18:06. |
|
« Предыдущая тема | Следующая тема » |
|
|