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

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

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

Регистрация: Dec 2011
Адрес: в Перми
Сообщений: 33
По умолчанию функция onPress не видит другие переменные

В классе описал у MovieClip событие onPress,
Код AS1/AS2:
class...
var i:Number;
...
var Push= function(){ trace(i) }
...
var somefunc = functon(){
mc.onPress = Push;
}
Но функция не видит переменные этого класса, а переменные очень нужны. Может быть есть способ достать их?


Последний раз редактировалось maloun365; 29.12.2011 в 19:45.
Старый 29.12.2011, 20:11
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Почему у вас перед описанием самой функций стоит var ? И у вас ошибка в слове function

Чтобы достать переменные из класа напрямую, переменные в класе должны быть описаны как public
И ещё, чтобы обратиться из класса к созданому вручную символу, нужно писать:
Код AS1/AS2:
_root.mc
Код AS1/AS2:
class...
var i:Number;
...
function Push (){ trace(i) }
...
function somefunc(){
    _root.mc.onPress = Push;
}
__________________
Дети не должны знать о своих родителях


Последний раз редактировалось Tails; 29.12.2011 в 20:20.
Старый 29.12.2011, 20:24
maloun365 вне форума Посмотреть профиль Отправить личное сообщение для maloun365 Найти все сообщения от maloun365
  № 3  
Ответить с цитированием
maloun365
 
Аватар для maloun365

Регистрация: Dec 2011
Адрес: в Перми
Сообщений: 33
метод объявляется с помощью той же переменной
Код AS1/AS2:
myarray[i].onPress = Push;
переменную нужно использовать в этой функции
Код AS1/AS2:
var Push = function(){
_root.myarray[i] // - работать не будет т.к. переменную i компилятор не знает даже если писать public
}


Последний раз редактировалось maloun365; 29.12.2011 в 20:34.
Старый 29.12.2011, 20:34
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 4  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Да, невидит потомучто вы вешаете обработчик нажатия на клип, соответственно при нажатий он ищет переменную i относительно себя а не класа.
Чтобы получить i, вам нужно:
  1. прописать в класе i как public
  2. добавить ссылку на объект созданного класа, и при нажатий обращаться к i через неё

Вот так например (только если у вас всего 1 экземпляр класа):
Код AS1/AS2:
// в конструкторе класа:
_root.thisClass = this;
...
// в обработчике нажатия:
trace(_root.thisClass.i);
и конечно:
Код AS1/AS2:
public var i = 0;
__________________
Дети не должны знать о своих родителях


Последний раз редактировалось Tails; 29.12.2011 в 20:43.
Старый 29.12.2011, 20:43
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 5  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Чтобы вызвать ваш метод в области видимости вашего объекта, используйте делегат ( кажется mx.utils.Delegate ).
Примерно так:
Код AS1/AS2:
mc.onPress = Delegate.create(this,Push);

И не используйте _root без крайней необходимости.
__________________
aka doctorstal

Старый 29.12.2011, 20:57
maloun365 вне форума Посмотреть профиль Отправить личное сообщение для maloun365 Найти все сообщения от maloun365
  № 6  
Ответить с цитированием
maloun365
 
Аватар для maloun365

Регистрация: Dec 2011
Адрес: в Перми
Сообщений: 33
я ещё только учусь, по этому очень многое ещё не понимаю...
в контсрукторе класса - это где?
куда добавлять ссылку на объект созданного класса и как прописать в классе это всё...

попробовал в классе объявить делегат...
Код:
Строка 69: There is no method with the name 'Delegate'.
     		myarray[i].onPress = Delegate.create(this,Push);
голова кругом идёт!
можно примерчик какой-нибуть?

Добавлено через 3 минуты
Код AS1/AS2:
myarray[i].onPress = _root.Delegate.create(this,Push);// - заработал, но всё ещё не видит i


Последний раз редактировалось maloun365; 29.12.2011 в 21:02.
Старый 29.12.2011, 21:04
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 7  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Код AS1/AS2:
import mx.utils.Delegate; // - это импорт используемых классов
class Test extends MovieClip{
   public var mc:MovieClip;
   private var i:Number;
 
   public function Test(){
       // это конструктор
       i=0;
       mc=attachMovie("myButton","mc",getNextHighestDepth());
       mc.onPress=Delegate.create(this,Push);
   }
   private function Push(){
        trace(i++);
   }
}
__________________
aka doctorstal

Старый 29.12.2011, 21:55
maloun365 вне форума Посмотреть профиль Отправить личное сообщение для maloun365 Найти все сообщения от maloun365
  № 8  
Ответить с цитированием
maloun365
 
Аватар для maloun365

Регистрация: Dec 2011
Адрес: в Перми
Сообщений: 33
всё равно не работает!
Код AS1/AS2:
import mx.utils.Delegate; // - это импорт используемых классов
class test extends MovieClip{
	public var mc:MovieClip;
	private var i:Number=1;
 
   public function mytest(){
       // это конструктор
       mc=_root.attachMovie("myButton","mc",1); // исправил тут 
       mc.onPress=_root.Delegate.create(this,Push); // и тут
   }		
 
   private function Push(){
        trace(i++);
   }
}
код пришлось корректировать, т.к. он не компилился
ещё процедура и имя класса не захотели быть одним словом
у меня как-то странно ипортируется класс...
постоянно с ошибками изподвыперда.
Код:
 The name of this class, 'mx.utils.Delegate', conflicts with the name of another class that was loaded, 'mx.utils.Delegate'.
     class mx.utils.Delegate extends Object

Общее количество ошибок ActionScript: 1 	 Сообщенные ошибки: 1
вроде дошло...
импортировать надо не в классе и если импортировать, то импрортировать всю папку...
Код AS1/AS2:
import mx.utils; // - это импорт используемых классов
Код AS1/AS2:
вот это у меня в классе:
 
class test extends Object{
	public var mc:MovieClip;
	private var i:Number=1;
 
   public function mytest(){
       // это конструктор
       mc=_root.attachMovie("myButton","mc",1);
       mc.onPress=_root.Delegate.create(this,Push);
   }   
   public function Push(){
        trace(i++);
   }
}
 
а это в главном окне на первом кадре:
 
import mx.utils; // - это импорт используемых классов
var test:test = new test();
 
test.mytest();
компилится превосходно, но не выводит trace...
Вложения
Тип файла: rar test.rar (5.9 Кб, 21 просмотров)


Последний раз редактировалось maloun365; 29.12.2011 в 22:34.
Старый 30.12.2011, 00:40
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 9  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Нет, ты запутался и сделал неправильные выводы.


Код в первом кадре измени вот так:
Код AS1/AS2:
var test:test = new test(this);
А в test.as сделай следующее:
Код AS1/AS2:
import mx.utils.Delegate; // - это импорт используемых классов
class test extends MovieClip{
	public var mc:MovieClip;
	private var i:Number=1;
	private var _host:MovieClip;
 
   public function test(host:MovieClip){ // конструктор _должен_ иметь то же имя, что и класс. Это делает его конструктором.
       // это конструктор
	   _host=host;// Сохраним ссылку на мувиклип-контейнер. Так мы сможем не привязываться к _root и добавлять наши кнопки в любой мувиклип.
       mc=host.attachMovie("myButton","mc",host.getNextHighestDepth()); // добавим кнопку в наш контейнер
       mc.onPress=Delegate.create(this,Push);
   }		
 
   private function Push(){
	   	trace("work?");
        trace(i++);
		mc.gotoAndStop(i);   
   }
}
__________________
aka doctorstal

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

Регистрация: Dec 2011
Адрес: в Перми
Сообщений: 33
всё равно не работает, пишет странную ошибку при компиляции
Код:
The name of this class, 'mx.utils.Delegate', conflicts with the name of another class that was loaded, 'mx.utils.Delegate'.
     class mx.utils.Delegate extends Object

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

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

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


 


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


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