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

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

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

Регистрация: Feb 2008
Сообщений: 890
По умолчанию Помогите с написанием первого класса, плиз..))

Захотел написать свой первый класс гибко-настраиваемых всплывающих подсказок. Посмотрел, классы Hint, которые выкладывали здесь и на silin.fatal.ru - не смог разобраться и порвал себе мозг.
Моя идея - следующая:
в конструктор класса передается объект с настройками (если какие-то настройки не определены в объекте, то используются стандартные), а дальше я столкнулся с трудностями, когда попытался описать в классе функцию, создающую муви-клип, в котором создается текстовое поле.

пока есть только это для пары настроек (остальные будут добавляться по-ходу - сейчас не в них суть):
Код:
class Hint {
	function Hint(oParams:Object) {		
		for(var sKey:String in oParams) {
			switch (sKey) {
				case "text":
					if (typeof(oParams[sKey]) != "string") {
						trace('Error value of "text"-parameter in Hint Data-Object!');
						break;
					}
					text = oParams[sKey];
					break;
				case "textColor":
					if (typeof(oParams[sKey]) != "number") {
						trace('Error value of "textColor"-parameter in Hint Data-Object!');
						break;
					}
					textColor = oParams[sKey];
					break;
			}
		}
	}
	
	private var _text:String = "text not input";
	public function get text():String {
		return _text;
	}
	public function set text(sText:String):Void {
		_text = sText;
	}
	
	private var _textColor:Number = 0;
	public function get textColor():Number {
		return _textColor;
	}
	public function set textColor(nTextColor:Number):Void {
		_textColor = nTextColor;
	}	
}
P.S. Ох! Жестко при копи-пасте табуляторы растянулись.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
orcpochta, не нашел, где ты
Цитата:
столкнулся с трудностями, когда попытался описать в классе функцию, создающую муви-клип, в котором создается текстовое поле.
Может попытаешься? Какой смысл показывать здесь работающую часть класса и спрашивать, что не так в неработающей?
__________________
Reality.getBounds(this);

Старый 07.06.2008, 14:24
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 3  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
трудность, что я просто не смог создать ни одного муви-клипа или текст-филда, потому, как не знаю, как сделать это из класса (не знаю как по другому объяснить)

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

Регистрация: May 2008
Сообщений: 476
orcpochta!

Цитата:
когда попытался описать в классе функцию, создающую муви-клип, в котором создается текстовое поле.
Покажите где реализована функция, создающая мувиклип? Если ее нет в представленном выше коде (а ее нет), то выложите.
__________________
Случайность, господа, это знаете ли непознанная необходимость.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Показывать хинты ты будешь при наведении мыши на какой-то объект, то есть по событию онРоллОвер. Следовательно, в обработчике этого события для тех объектов, которые ты прокомментировал, должен вызываться метод, показывающий хинт.
Следовательно, тебе нужно создать в классе этот метод, public function buildhint() к примеру. В этом методе ты создаешь пустой мувиклип с тестфилдом выше всех (а можно и просто текстфилд с бэкграундом), задаешь ему формат (его лучше заготовить заранее и сохранить как свойство класса, ну или обеспечить его "скинабельность"), и тут самое интересное - пишешь в нем текст. Чтобы знать, что писать, тебе надо чтобы метод получил ссылку на вызвавший его объект - или, как вариант, прямой текст хинта прямо от обработчика онРоллОвер, что значительно проще. Ну и на онРоллАут ты вызываешь метод closeHint(), который этот хинт удаляет.

Мне кажется так юзабельнее. Один экземпляр и методы для управления созданием/удалением хинтов на сцене.
При создании экземпляра НЕ ЗАДАВАТЬ ему текст, а задавать только скин - цвета и размеры текста и фона. А текст передавать из обработчика наведения мыши на объект.
У тебя же получается что в обработчике создается объект со скином и текстом, потом создается экземпляр класса Хинт, и если я правильно понял, при создании экземпляра, прямо из конструктора, ты хочешь создавать на сцене текстфилд. Мне такой подход кажется неудобным, но тут может дело вкуса)))
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 07.06.2008 в 15:26.
Старый 07.06.2008, 16:15
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 6  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Создать клип и текстфилд - легко - почти также как если бы писал на таймлайне
Код:
private function createMovieAndText ():Void{
   clip = _mc.createEmptyMovieClip ("hint", _mc.getNextHighestDepth());
   txt = clip.createTextField("hintTxt", 1, 0, 0, 300, 100);
}
В теле класса нужно объявить переменные clip и txt:
Код:
private var _mc:MovieClip;
private var clip:MovieClip;
private var txt:TextField;
Переменную _mc надо либо в конструктор передавать, либо назначить в конструкторе

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

Регистрация: Feb 2008
Сообщений: 890
Что-то стало получаться! видимо, ночью намудрил с адресацией.

Код:
class Hint {
	function Hint(oParams:Object) {		
		setParams(oParams);
	}
	
	private function setParams(oParams:Object):Void {
		for(var sKey:String in oParams) {
			switch (sKey) {
				case "text":
					if (typeof(oParams[sKey]) != "string") {
						trace('Error value of "text"-parameter in Hint Data-Object!');
						break;
					}
					text = oParams[sKey];
					break;
				case "textColor":
					if (typeof(oParams[sKey]) != "number") {
						trace('Error value of "textColor"-parameter in Hint Data-Object!');
						break;
					}
					textColor = oParams[sKey];
					break;
			}
		}
	}
	
	private var _text:String = "text not input";
	public function get text():String {
		return _text;
	}
	public function set text(sText:String):Void {
		_text = sText;
	}
	
	private var _textColor:Number = 0;
	public function get textColor():Number {
		return _textColor;
	}
	public function set textColor(nTextColor:Number):Void {
		_textColor = nTextColor;
	}	
	
	public function makeHint(oParams):Void {		
		setParams(oParams);
		_root.createTextField("tHintField", _root.getNextHighestDepth(), _xmouse, _ymouse, 0, 0);
		var tLink:TextField = _root.tHintField;
		tLink.selectable = false;
		tLink.background = true;
		tLink.backgroundColor = 0xFFFF99;
		tLink.autoSize = true;
		tLink.text = text;
		tLink.textColor = textColor;
		tLink.moveHint = function():Void {
			tLink._x = _xmouse - tLink._width;
			tLink._y = _ymouse - tLink._height;
			updateAfterEvent();
		};
		tLink.nInterval = setInterval(tLink, "moveHint", 10);
	}
	
	public function delHint():Void {		
		clearInterval(_root.tHintField.nInterval);
		 _root.tHintField.removeTextField();		
	}
	
}


Последний раз редактировалось orcpochta; 07.06.2008 в 17:21.
Старый 07.06.2008, 16:30
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну вот так работает вариант с созданием текстфилда в конструкторе)))
Код:
class Hint {
    
    private var hint_txt:TextField;
    private var text:String = "text not input";
    private var textColor:Number = 0;
    
    
    public function Hint(oParams:Object) {        
        for(var sKey:String in oParams) {
            switch (sKey) {
                case "text":
                    if (typeof(oParams[sKey]) != "string") {
                        trace('Error value of "text"-parameter in Hint Data-Object!');
                        break;
                    }
                    text = oParams[sKey];
                    break;
                case "textColor":
                    if (typeof(oParams[sKey]) != "number") {
                        trace('Error value of "textColor"-parameter in Hint Data-Object!');
                        break;
                    }
                    textColor = oParams[sKey];
                    break;
            }
        }
        
        hint_txt = _root.createTextField("hint_txt",_root.getNextHighestDepth(),_xmouse+5,_ymouse+5,200,50);
        hint_txt.autoSize = true;
        hint_txt.border = true;
        hint_txt.borderColor = 0x000000;
        hint_txt.background = true;
        hint_txt.backgroundColor = 0xffffdd;
        hint_txt.text = text;
        hint_txt.textColor = textColor;
        
        
    }
    
    public function removeHint():Void {
        hint_txt.removeTextField();
    }
    
    public function get _text():String {
        return hint_txt.text;
    }
    public function set _text(sText:String):Void {
        hint_txt.text = sText;
    }
    
    public function get _textColor():Number {
        return hint_txt.textColor;
    }
    public function set _textColor(nTextColor:Number):Void {
        hint_txt.textColor = nTextColor;
    }    
    
    public function set _backColor(bColor:Number):Void {
        hint_txt.backgroundColor = bColor;
    }
    
    public function get _backColor():Number {
        return hint_txt.backgroundColor;
    }
    
}
Обратите внимание, что созданный в обработчике онРоллОвер экземпляр класса Хинт не будет виден из обработчика онРоллАут)))) Приходится сохранять ссылку на него в руте или объекте, который коментируем. Неудобно.
Код во фла:
Код:
my_mc.onRollOver = function () {
    var myHint:Object = {text:"Понятия не имею,\rчто это такое", textColor:0x000000}
    var hintik:Hint = new Hint(myHint);
    hintik._text="Кажется, я знаю что это!"
    this.hintik = hintik;
}
my_mc.onPress = function  () {
    this.hintik._textColor = 0xffffff
    this.hintik._backColor = 0x000000
}

my_mc.onRollOut = function () {
    this.hintik.removeHint()
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 07.06.2008 в 17:28.
Старый 07.06.2008, 16:35
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 9  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Всем спасибо за неоценимую помощь!!!

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

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

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


 


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


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