![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Dukobpa3, совершенно верно про кратность интервала таймера и частоту кадров. Но, есть несколько способов добиться более или менее точных таймингов. Первый описан в цикле из трех статей здесь: http://www.computus.org/journal/?p=22 Там же разжевано и то, почему все это происходит.
Второй способ - подгружать mp3 со строго отмеренной длиной, равной вашему интервалу, и использовать событие SOUND_COMPLETE. |
|
|||||
|
Цитата:
Добавлено через 9 минут По двум причинам. setInterval и setTimeout были добавлены для совместимости (по-крайней мере так позиционировалось когда только появилась AVM2) и на их документацию забили сразу же, с припиской "рекомендуется создавать объект Timer". И вторая, обе эти функции все равно создают таймер, со всеми вытекающими.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Сделал пока вот как, если у такого подхода есть какие то недостатки по сравнению с другим ( который я не знаю ), то то поделитесь пожалуйста им.
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { private var _timerFrame:TimerFrame; private var _animator:Animator; private var _boll:Boll; private var _convas:Convas; public function Main() { init(); } private function init(event:Event=null):void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.addEventListener(MouseEvent.MOUSE_DOWN, stage_mouseDownHandler); stage.addEventListener(MouseEvent.MOUSE_UP, stage_mouseUpHandler); _timerFrame = new TimerFrame(); _boll = new Boll(); _animator = new Animator(_boll); _animator.startX = 50; _animator.startY = 200; _convas = new Convas(); super.addChild(_convas); _animator.doc = _convas; } private function stage_mouseUpHandler(event:MouseEvent):void { _timerFrame.removeAnimator(_animator); } private function stage_mouseDownHandler(event:MouseEvent):void { _timerFrame.addAnimators(_animator); } } } package { import flash.display.Sprite; import flash.events.Event; public class Boll extends Sprite { public function Boll() { super.addEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler); } private function super_addedToStageHandler(event:Event):void { super.removeEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler); super.graphics.beginFill(0x2B81AE); super.graphics.drawCircle(0, 0, 40); super.graphics.endFill(); } override public function get x():Number {return super.x ;} override public function set x(value:Number):void { super.x = value; } override public function get y():Number {return super.y;} override public function set y(value:Number):void {super.y = value;} } } package { import flash.display.DisplayObject; import flash.display.DisplayObjectContainer; import flash.display.Sprite; import flash.errors.IllegalOperationError; public class Animator extends Object implements IAnimator { private var _boll:DisplayObject; private var _doc:DisplayObjectContainer; private var _startX:int; private var _startY:int; private var _finishX:int; private var _finishY:int; private var _elapsedTime:Number; public function Animator(boll:DisplayObject) { _boll = boll as DisplayObject; } private function addCanvas():void { _boll.x = _startX; _boll.y = _startY; _doc.addChild(_boll as DisplayObject); } public function animation(time:Number):void { trace('animator'); } public function set startX(value:int):void {_startX = value;} public function set startY(value:int):void {_startY = value;} public function set finishX(value:int):void {_finishX = value;} public function set finishY(value:int):void {_finishY = value;} public function set doc(value:DisplayObjectContainer):void { if (!value) throw new IllegalOperationError(""); _doc = value; this.addCanvas(); } public function set elapsedTime(value:Number):void { _elapsedTime = value; } } } package { import flash.display.Sprite; import flash.events.Event; public class Convas extends Sprite { public function Convas() { super.addEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler); } private function super_addedToStageHandler(event:Event):void { super.removeEventListener(Event.ADDED_TO_STAGE, super_addedToStageHandler); } } } package { import flash.display.Sprite; import flash.events.DataEvent; import flash.events.Event; import flash.events.EventDispatcher; public class TimerFrame extends Sprite { private var _elapsedTime:Number; private var _animators:Vector.<IAnimator>; public function TimerFrame() { _animators = new Vector.<IAnimator>([]); addEventListener(Event.ENTER_FRAME, super_enterFrameHandler); } private function super_enterFrameHandler(event:Event):void { var num:Number = 5; var length:int = _animators.length; for (var i:int = 0; i < length; i++) { _animators[i].animation(num); } } public function addAnimators(animator:IAnimator):void { _animators.push(animator); } public function removeAnimator(animator:IAnimator):void { var length:int = _animators.length; for (var i:int = 0; i < length; i++) { if (_animators[i] == animator) { _animators.splice(i, 1); break; } } } } } Какую связку нужно или лучше делать - ентерФрайм + гетТаймер или таймер + гетТаймер? |
|
|||||
|
Цитата:
Другими словами - решай проблемы по мере поступления. У тебя есть в проекте косяки которые влечет за собой косой таймер? Или ты решил сделать всё "сразу правильно"? Я по опыту могу сказать что ентерпрайз-подход нужен в ентерпрайзе. Если ты пишешь какой-то микропроект для себя - то там это всё только усложняет понимание. Не заморачивайся с таймера, насколько я понимаю - ты еще и с ентерфреймом то до конца не разобрался.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
.
|
Canvas.
|
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
dimarik Спасибо! А как с enterFrame быть?
Цитата:
Вот представьте чтобы было, если бы Вы попали к любому специалисту, который не чего не умеет, только по тому, что его наставник говорил, что пока тебе это не надо. Цитата:
Да, я не знаю как сделать, чтобы один класс был на все приложение. Можете на словах обьяснить? Добавлено через 5 минут Цитата:
|
|
|||||
|
Цитата:
Добавлено через 3 минуты KISS Цитата:
Потому что он не специалист, а академик. И с академиками я работать не хочу и не буду. А специалист тем и отличается от академика что знает он, возможно, меньше. Но всем, что он знает - умеет пользоваться. Перегруз информацией еще никому в прок не стал. Добавлено через 13 минут Вообще у меня по этому поводу слегка предвзятое отношение. Насмотрелся уже велосипедов разных. И очень важно понимать, где стоит воротить такую схему, потому что это действительно удобнее. А где лучше просто сделать то что надо. Очень уж часто такие схемы только оттягивают момент "релиза"(даже если это чисто понятие для себя). При любых раскладах важнее закончить начатое, чем позаниматься любовью и в итоге запутаться и вообще ничего не сделать.
__________________
Кто к нам с чем для чего - тот у нас того от того. Последний раз редактировалось Dukobpa3; 28.10.2013 в 17:44. |
|
|||||
|
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
я учусь и буду учится, потому что сейчас на это есть время и это не кого кроме меня не затрагивает. Ещё раз скажу, что я буду учится, пока учусь, а не когда от моей тупости, кто то будет страдать. С "излишествами" про которые говорится по Вашей ссылке я согласен, но я не согласен, что она мне помогла решить мои вопросы. я искренне не понимаю советов, которые предлагают оставить всё на потом. Так же я не понимаю для кого Вы старались написав два последних поста. я не чего не подчерпнул, кроме как - я это умею, знайте об этом все, а ты не учись, иди курьером работай, потому что я умею, а ты ещё нет. И я буду об этом каждое твоё сообщение говорить, потому что мне забавно от того, что я кого то называю глупым, а вообще программисты нынче не те... ох не те. я прошу прощения за такое резкое мнение, но оно вот так со стороны выглядит. |
|
|||||
|
Я умею именно потому что сознательно не усложнял себе жизнь когда этого не требовалось. Я выполнял реальные задачи. И со временем дорос и до таких задач.
В этом и был главный посыл моего сообщения. И это совершенно не значит "не учись". Просто учеба ради учебы - это бред. Учеба должна помогать тебе с чем-то справиться. С какой-то задачей. Добавлено через 2 минуты И мне сейчас по долгу службы приходится очень много усилий тратить на джуниоров которые нахватались поверхам всякого рода паттернов и подходов к программированию, но совершенно не понимают к чему это вообще надо. И начинаются фабрики для трех кнопок, потому что где-то прочли что хардкод это плохо - а для трех кнопок - хардкод - правильный выбор. Или какой-то вырвиглазый обсервер или еще какое-то г-но. Он не может составить простейший алгоритм обхода двумерного массива по заданному пути - зато уже пытается оперировать всякими терминами умными. Потому что в книжках пишут. Добавлено через 4 минуты И при приеме в свою команду миддла-жуниора я предпочту того который не знает как называется паттерн, или не знаком с каким-то подходом - но у него в портфолио есть хоть один законченный проект. Бог-весть как написан, но работает. Потому что я пойму - человек сможет закончить начатое. А научить делать его это правильно - я смогу.
__________________
Кто к нам с чем для чего - тот у нас того от того. Последний раз редактировалось Dukobpa3; 28.10.2013 в 18:14. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вот и Дизель согласен
Все должно быть в гармонии. "Спортсмен", прекрасно разбирающийся в тонкостях метаболизма, расщепления молочной кислоты и синтеза белков, неспособный поднять гирю — не спортсмен.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|