![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Mar 2015
Сообщений: 26
|
Здравствуйте! Есть одна проблема, и вы возможно можете помочь.
Описание - есть три класса: Class1, Class2, и собственно Main (все MovieClip) Class1 проигрывает свою анимацию на собственном таймере с использованием nextFrame, Class2 должен подождать до нужного кадра анимации Class1 и выполнить свою со своим таймером. Логично будет отслеживать Class1.currentFrame, я пытался сделать это внутри Class2. Проблема 1: Я не знаю возможно ли это? Так как я обращаюсь к свойству MovieClip через Class1 без явных определений типа "Class1::MovieClip::currenFrame" или как-то так. В С++ с этим по проще. И вторая проблема: весь не большой код имеет структуру package { //Main.as import flash.*//и все такое public class Main extends Movie Clip { var C1:MovieClip = new Class1; var C2:MovieClip = new Class2; public function Main() { } //Везде Main видит оба класса и свойства и методы базового класса MovieClip } } package { //Class1.as import flash.* public class Class1 extends MovieClip { public function Class1 () {} } } package { // Class2.as import flash.* public class Class2 extends MovieClip { public function Class2 () {} public function Panic() { if(Class1.currenFrame == 666) { //Do something! } } } } друг друга не видят. Как только я не обявлял их в Main. Подскажите пожалуйста, что не так? Эти файлы в одном проекте, в одной папке. Спасибо. |
|
|||||
package { //Main.as import flash.*//и все такое public class Main extends MovieClip { var C1:MovieClip = new Class1; var C2:MovieClip = new Class2; public function Main() { C1.play(); addEventListener(Event.ENTER_FRAME , onFrame); } private function onFrame(e:Event):void { if(C1.currentFrame == 666) C2.gotoAndPlay(1); } } } package { //Class1.as import flash.* public class Class1 extends MovieClip { public function Class1 () { } } } package { // Class2.as import flash.* public class Class2 extends MovieClip { public function Class2 () {} } }
__________________
Марк Tween |
|
|||||
|
Регистрация: Mar 2015
Сообщений: 26
|
Здравствуйте, спасибо за совет, только что дошли руки его проверить)))
Занят был, не поверите)) К сожалению вышеописанная вами схема работает раз через пять. Кадров там конечно не 666, но по идее цель умеет увернуться от выстрела иногда, но для этого нужно их точно регистрировать. нажатие мыши, 10 миллисекунд анимации, и только перед попаданием у нее есть шанс, иногда. Но если быстро кликать мышкой (не сильно быстро, но достаточно), этот момент проскальзывает.(( Сталкивались с таким? Спасибо за участие. |
|
|||||
|
Цитата:
Соотвественно работая с мувиклипом, предлагать решения, стоит только в том случае, если вы хотите просто выполнить задачу
__________________
return this... |
|
|||||
|
Регистрация: Mar 2015
Сообщений: 26
|
К сожалению я пока не могу рисовать прямо во флэше. Я делаю трех мерную анимацию в блендере, рендерю и потом по кадрам закиваю во флэш и там расставляю на таймлайне. Про кодинг в блокноте доставило))) Если бы не узнал что на флэше можно относительно быстро зарабатывать, продолжал бы писать на С++ в блокноте)))
Но смысл последнего предложения я не понял. |
|
|||||
package { //Main.as import flash.*//и все такое public class Main extends Movie Clip { var C1:MovieClip = new Class1; var C2:MovieClip = new Class2; public function Main() { C1.addEventListener( CustomEvent.COMPLETE, playHandler ); C2.addEventListener( CustomEvent.COMPLETE, playHandler ); C1.play() } public function playHandler(e:CustomEvent):void { switch (e.target) { case C1: /* if (e.label=='somelabel666') { */ C1.stop(); C2.play(); // } break; } } //Везде Main видит оба класса и свойства и методы базового класса MovieClip } } package { //CustomEvent.as public class CustomEvent extends Event { public static var PLAY:String = 'PLAY'; public static var COMPLETE:String = 'COMPLETE'; public var label:String='default' public function CustomMovie (type:String, label:String='') { super(type,true); this.label = label; } } } package { //CustomMovie.as import flash.* public class CustomMovie extends MovieClip { public function CustomMovie () { } protected function complete(label:String=''):void { this.dispatchEvent( new CustomEvent(CustomEvent.COMPLETE, label ) ); } } } package { //Class1.as import flash.* public class Class1 extends CustomMovie { public function Class1 () { addEventListener( Event.ENTER_FRAME, frameHandler ); } public function frameHandler(e:Event):void { if(this.currenFrame == 666) { removeEventListener( Event.ENTER_FRAME, frameHandler ); complete('somelable666'); } } } } package { // Class2.as import flash.events.Event; public class Class2 extends CustomMovie { public function Class2 () {} public function Panic() { } } }
__________________
return this... |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 149
|
"Class1 проигрывает свою анимацию на собственном таймере с использованием nextFrame,
Class2 должен подождать до нужного кадра анимации Class1 и выполнить свою со своим таймером. " самый простой вариант - генерить событие из Class1, детектить это событие, и начинать проигрывание в Class2. т.е. - ОБРАЗНО это может выглядеть примерно так: var c1:Class1 = new Class1(); var c2:Class2 = new Class2(); c1.addEventListener("class_2_play_your_animation", function(e:Event):void{ c2.play() }); |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|