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

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

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

Регистрация: Jul 2014
Адрес: Молдавия
Сообщений: 7
Attention Отображение анимации

Возникла проблема с добавлением созданой с помощью Timer анимации на сцену.
Анимация самая простая - shape облочко движется по оси x.
Ошибок не выдаёт, но облочко на сцене не вырисовывается
P.S.: я небось жёстко на*****кодила и всё же буду благодарна, если объясните почему именно не отображается анимация, спасибо за ранее.
Код:
Код AS3:
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);
		}
Код AS3:
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++
			}
		}
	}
}
Сомневаться в том, что я вообще написала что то адекватное смею, т.к это первый код, который написала на as3, да и вообще на яп. sorry

Старый 14.08.2014, 04:05
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
У тебя сейчас выходит, что drawCloud, cloud и onTimer вложены в конструктор (не являются методами класса) и к тому же они нигде не вызываются.

Логично было бы методы drawCloud и cloud аннулировать вовсе и выполнить все эти действия непосредственно к конструкторе — так мы избежим лишней перепосылки входящих параметров вроде cloudX, alpha, delay и т.д.; а обработчик onTimer по-хорошему вынести бы "за скобку" конструктора и сделать полноценным методом класса.

Код AS3:
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!

Старый 14.08.2014, 13:12
Gamurari вне форума Посмотреть профиль Отправить личное сообщение для Gamurari Найти все сообщения от Gamurari
  № 3  
Ответить с цитированием
Gamurari
 
Аватар для Gamurari

Регистрация: Jul 2014
Адрес: Молдавия
Сообщений: 7
Цитата:
Сообщение от Zebestov Посмотреть сообщение
У тебя сейчас выходит, что drawCloud, cloud и onTimer вложены в конструктор (не являются методами класса) и к тому же они нигде не вызываются.

Логично было бы методы drawCloud и cloud аннулировать вовсе и выполнить все эти действия непосредственно к конструкторе — так мы избежим лишней перепосылки входящих параметров вроде cloudX, alpha, delay и т.д.; а обработчик onTimer по-хорошему вынести бы "за скобку" конструктора и сделать полноценным методом класса.
Ох, точно, ужас, как же я не логично сделала...
Стоило подправить пару строк и уже совсем по другому выглядит. Да, всё таки в этом деле взгляд опытного человека необходим как воздух...

Всё подправила, как Вы указали, но анимация всё равно не появляется((

Старый 14.08.2014, 13:36
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 4  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Хм. Только что скопипастил твой Main и свой Clouds — плывет, родимое!
Может быть дело в том, что в твоем коде класса Main, который приведен здесь на форуме, не хватает двух закрывающих фигурных скобок — они в оригинале есть? Должно было бы насыпать ошибок типа
Код:
…\Main.as, Line 20	1084: Syntax error: expecting rightbrace before end of program.
__________________
Поймай яблоко 2!

Старый 14.08.2014, 14:08
Gamurari вне форума Посмотреть профиль Отправить личное сообщение для Gamurari Найти все сообщения от Gamurari
  № 5  
Ответить с цитированием
Gamurari
 
Аватар для Gamurari

Регистрация: Jul 2014
Адрес: Молдавия
Сообщений: 7
Да нет, никаких ошибок вроде, но вот придупреждений много..
Вообще, то класс main я сократила, там ещё фон есть, может быть он перекрывает облочко?
Код AS3:
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){}
		}
	}
}

Старый 14.08.2014, 14:11
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 6  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Судя по коду, не перекрывает.
__________________
Поймай яблоко 2!

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

Регистрация: Jul 2014
Адрес: Молдавия
Сообщений: 7
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Судя по коду, не перекрывает.
А что ж такое то ((
мой компьютер решил, что мне не стоит изучить программирование?

Добавлено через 19 минут
Задвигалооооось
Моя невнимательность - я забыла изменить
Код AS3:
var timer:Timer = new Timer(_delay, _repeatCount);
// на
 var timer:Timer = new Timer(delay, repeatCount);
а переменные то удалила...
Спасибо за помощь ^^


Последний раз редактировалось Gamurari; 14.08.2014 в 14:37.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
анимация во флеш , анимация формы , отображение

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

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


 


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


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