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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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?), то код работает ОК : )
Здесь непонятно, а какой же тип тогда у переменной, когда ничего не указано?

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

Регистрация: Dec 2007
Адрес: Россия, Москва
Сообщений: 541
Отправить сообщение для TWETTI с помощью Skype™
Атрибут private не может быть использован в методах класса.
Замените:
Код AS3:
...
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( );		
...
На:
Код AS3:
...
public class TextTo300_demo extends Sprite
{
    private var t:TextTo300_Timer;
 
    public function TextTo300_demo()
    {
        t = new TextTo300_Timer( );		
...
2. Переменные, объявленные в методах, будут видны только в них. В методах не надо писать private/public/protected/internal. Эти атрибуты используются при объявлении переменных уровня класса.

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

Регистрация: Mar 2013
Сообщений: 290
TWETTI, всё получилось спасибо.

Вот, только щас дошло, что такое class property definitions, эхе-хе.

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

Регистрация: May 2010
Сообщений: 543
В описании ошибки написано же все.

Модификатор доступа (private, public, .. etc) можно вешать только на свойство класса, а не на локальную переменную метода. То есть, внутри метода/функции просто пишем
Код AS3:
var property:int = 0;
а для свойства класса
Код AS3:
private var _property:int = 0;

Update: что-то я опоздал с ответом
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)

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

Регистрация: Mar 2013
Сообщений: 290
carrotoff, ничего страшного. "Упрощай, Повторяй" (с), лол.

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
namespace , scope , видимость , класс , переменные
Опции темы
Опции просмотра

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

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


 


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


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