|
|
|||||
Регистрация: Jul 2014
Адрес: Молдавия
Сообщений: 7
|
Отображение анимации
Возникла проблема с добавлением созданой с помощью Timer анимации на сцену.
Анимация самая простая - shape облочко движется по оси x. Ошибок не выдаёт, но облочко на сцене не вырисовывается P.S.: я небось жёстко на*****кодила и всё же буду благодарна, если объясните почему именно не отображается анимация, спасибо за ранее. Код: package { import flash.display.DisplayObject; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import outside.Clouds; //Основной класс public class Main extends Sprite { public function Main() { var _cloud:Clouds = new Clouds(0, 10); this.addChild(_cloud.shape); } package outside { import flash.display.Shape; import flash.events.TimerEvent; import flash.utils.Timer; //Класс с анимацией. наверное. если это вообще является подобием анимации. public class Clouds extends Shape { public var shape:Shape = new Shape; public var _alpha:Number; public var _cloudX:Number; public var _cloudY:Number; public var _delay:Number; public var _repeatCount:int; public function Clouds(cloudX:Number = 0, cloudY:Number = 0, alpha:Number = 0.6, delay:Number = 50, repeatCount:int = 0) { //отрисовывается что то типо облочка function drawCloud():void { _alpha = alpha; _cloudX = cloudX; _cloudY = cloudY; shape.graphics.lineStyle(2, 0xA0EBFD, _alpha); shape.graphics.beginFill(0xA0EBFD); shape.graphics.drawCircle(100,100,20); shape.graphics.drawCircle(160,100,20); shape.graphics.endFill(); shape.graphics.beginFill(0xA0EBFD); shape.graphics.drawCircle(130, 100, 32); shape.graphics.endFill(); shape.x = _cloudX; shape.y = _cloudY; } function cloud():void { var timer:Timer = new Timer(_delay, _repeatCount); _delay = delay; _repeatCount = repeatCount; timer.addEventListener(TimerEvent.TIMER, onTimer); timer.start(); } function onTimer(event:TimerEvent):void { shape.x++ } } } } |
|
|||||
Lorem ipsum
|
У тебя сейчас выходит, что drawCloud, cloud и onTimer вложены в конструктор (не являются методами класса) и к тому же они нигде не вызываются.
Логично было бы методы drawCloud и cloud аннулировать вовсе и выполнить все эти действия непосредственно к конструкторе — так мы избежим лишней перепосылки входящих параметров вроде cloudX, alpha, delay и т.д.; а обработчик onTimer по-хорошему вынести бы "за скобку" конструктора и сделать полноценным методом класса. package outside { import flash.display.Shape; import flash.events.TimerEvent; import flash.utils.Timer; //Класс с анимацией. наверное. если это вообще является подобием анимации. public class Clouds extends Shape { public var shape:Shape = new Shape; public var _alpha:Number; public var _cloudX:Number; public var _cloudY:Number; public var _delay:Number; public var _repeatCount:int; public function Clouds(cloudX:Number = 0, cloudY:Number = 0, alpha:Number = 0.6, delay:Number = 50, repeatCount:int = 0) { //отрисовывается что-то типо облачка /* Это уже не нужно. _alpha = alpha; _cloudX = cloudX; _cloudY = cloudY; */ shape.graphics.lineStyle(2, 0xA0EBFD, alpha); // сработает, но лучше придумать другое имя для параметра shape.graphics.beginFill(0xA0EBFD); shape.graphics.drawCircle(100,100,20); shape.graphics.drawCircle(160,100,20); shape.graphics.endFill(); shape.graphics.beginFill(0xA0EBFD); shape.graphics.drawCircle(130, 100, 32); shape.graphics.endFill(); shape.x = cloudX; shape.y = cloudY; var timer:Timer = new Timer(delay, repeatCount); /* Во-первых, почему сначала используем (таймер в оригинале строкой выше), а лишь затем присваиваем значения Оо задом-наперед получается. Во-вторых, уже не нужно. _delay = delay; _repeatCount = repeatCount; */ timer.addEventListener(TimerEvent.TIMER, onTimer); timer.start(); } /* Вот теперь это метод класса, а не какая-то функция в теле конструктора. */ private function onTimer(event:TimerEvent):void { shape.x++ } } }
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Jul 2014
Адрес: Молдавия
Сообщений: 7
|
Цитата:
Стоило подправить пару строк и уже совсем по другому выглядит. Да, всё таки в этом деле взгляд опытного человека необходим как воздух... Всё подправила, как Вы указали, но анимация всё равно не появляется(( |
|
|||||
Lorem ipsum
|
Хм. Только что скопипастил твой Main и свой Clouds — плывет, родимое!
Может быть дело в том, что в твоем коде класса Main, который приведен здесь на форуме, не хватает двух закрывающих фигурных скобок — они в оригинале есть? Должно было бы насыпать ошибок типа
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Jul 2014
Адрес: Молдавия
Сообщений: 7
|
Да нет, никаких ошибок вроде, но вот придупреждений много..
Вообще, то класс main я сократила, там ещё фон есть, может быть он перекрывает облочко? package { import flash.display.DisplayObject; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import outside.Clouds; public class Main extends Sprite { var _backgraundColor:uint = 0xE4FFFF; var bgShape:Sprite; public function Main() { backgraundColor(); var _cloud:Clouds = new Clouds(0, 10); this.addChild(_cloud.shape); } private function backgraundColor():void { bgShape = new Sprite; bgShape.graphics.beginFill(_backgraundColor); bgShape.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); addChildAt(bgShape, 0); stage.addEventListener(Event.RESIZE, resizeBgWithStage); } function resizeBgWithStage(e:Event):void { try { bgShape.width = stage.stageWidth; bgShape.height = stage.stageHeight; } catch(e){} } } } |
|
|||||
Lorem ipsum
|
Судя по коду, не перекрывает.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Jul 2014
Адрес: Молдавия
Сообщений: 7
|
А что ж такое то ((
мой компьютер решил, что мне не стоит изучить программирование? Добавлено через 19 минут Задвигалооооось Моя невнимательность - я забыла изменить var timer:Timer = new Timer(_delay, _repeatCount); // на var timer:Timer = new Timer(delay, repeatCount); Спасибо за помощь ^^ Последний раз редактировалось Gamurari; 14.08.2014 в 14:37. |
Часовой пояс GMT +4, время: 14:00. |
|
« Предыдущая тема | Следующая тема » |
Теги |
анимация во флеш , анимация формы , отображение |
|
|