Показать сообщение отдельно
Старый 15.07.2013, 12:27
Fogflasher вне форума Посмотреть профиль Отправить личное сообщение для Fogflasher Найти все сообщения от Fogflasher
  № 1  
Ответить с цитированием
Fogflasher

Регистрация: Mar 2013
Сообщений: 290
Post Разборка Мука: Видимость переменной.

Всем привет.

Разбираю один из примеров Мука, связанный с текстовыми эффектами.
Немного переработал пример так, чтобы он был более универсальным.

Документ Класс выглядит так:

Код AS3:
package
{
  import flash.display.*;
  import flash.text.*;
 
  public class TextTo300_demo extends Sprite
  {
 
 
    public function TextTo300_demo()
	{
 
	  private var t:TextTo300_Timer;	//Method1: Switch one of this method
          t = new TextTo300_Timer( );		
 
//	  private var t:TextTo300_Frame;	//Method2: Switch one of this method
//	  t = new TextTo300_Frame();		
 
      t.text          = "Hello";
      t.autoSize      = TextFieldAutoSize.LEFT;
 
      addChild(t);
 
      // Start the animation
      t.start( );
    }
 
  }
}
С ним логически связаны два класса, которые выполняют одно и то же, но различными методами:

Первый, TextTo300_Frame, основан на событии ENTER_FRAME:
Код AS3:
package
{
	  import flash.display.*;
	  import flash.events.*;
	  import flash.text.*;
 
	  public class TextTo300_Frame extends TextField
	  {
		public function TextTo300_Frame( )
		{
		}
 
		public function moveTextRight (e:Event):void
		{
			  if (x <= 300)
			  {
				x += 10;
 
				if (x > 300)
				{
				  x = 300;
				}
			  }
			  else 
			  {
				stop( );
			  }
		}
		public function start ( ):void
		{
			  // Start playing the animation
			  addEventListener(Event.ENTER_FRAME, moveTextRight);
		}
		public function stop ( ):void
		{
			  // Pause the animation
			  removeEventListener(Event.ENTER_FRAME, moveTextRight);
		}
	  }
}
А второй, TextTo300_Timer, на таймере:

Код AS3:
package
{
  import flash.display.*;
  import flash.events.*;
  import flash.utils.*;
  import flash.text.*;
 
  public class TextTo300_Timer extends TextField
  {
    private var timer:Timer;
 
    public function TextTo300_Timer()
	{
      timer = new Timer(50, 0);
      timer.addEventListener(TimerEvent.TIMER, moveTextRight);
    }
 
    public function moveTextRight (e:Event):void
	{
      if (x <= 300)
	  {
        x += 10;
        if (x > 300)
		{
          x = 300;
        }
      }
	  else
	  {
        stop( );
      }
    }
    public function start ( ):void
	{
      // Start playing the animation
      timer.start( );
    }
 
    public function stop ( ):void
	{
      // Pause the animation
      timer.stop( );
    }
  }
}

И вот, когда я запускаю проект с одним из этих методов (второй закоментарен), то получается такая ошибка:

Цитата:
1013: The private attribute may be used only on class property definitions.
private var t:TextTo300_Timer; //Method1: Switch one of this method

И вот тут возникают два вопроса:

1. Что не так? Какие-такие декларации уровня свойства класса?

2. Если изменить тип переменной на public или internal, то тоже выдается ошибка...
Но если ПРОСТО ТУПО УБРАТЬ тип видимости переменной (или как там правильно называть определители public, private?), то код работает ОК : )
Здесь непонятно, а какой же тип тогда у переменной, когда ничего не указано?