![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: 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;
}
}
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
orcpochta, не нашел, где ты
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
трудность, что я просто не смог создать ни одного муви-клипа или текст-филда, потому, как не знаю, как сделать это из класса (не знаю как по другому объяснить)
|
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
orcpochta!
Цитата:
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Показывать хинты ты будешь при наведении мыши на какой-то объект, то есть по событию онРоллОвер. Следовательно, в обработчике этого события для тех объектов, которые ты прокомментировал, должен вызываться метод, показывающий хинт.
Следовательно, тебе нужно создать в классе этот метод, public function buildhint() к примеру. В этом методе ты создаешь пустой мувиклип с тестфилдом выше всех (а можно и просто текстфилд с бэкграундом), задаешь ему формат (его лучше заготовить заранее и сохранить как свойство класса, ну или обеспечить его "скинабельность"), и тут самое интересное - пишешь в нем текст. Чтобы знать, что писать, тебе надо чтобы метод получил ссылку на вызвавший его объект - или, как вариант, прямой текст хинта прямо от обработчика онРоллОвер, что значительно проще. Ну и на онРоллАут ты вызываешь метод closeHint(), который этот хинт удаляет. Мне кажется так юзабельнее. Один экземпляр и методы для управления созданием/удалением хинтов на сцене. При создании экземпляра НЕ ЗАДАВАТЬ ему текст, а задавать только скин - цвета и размеры текста и фона. А текст передавать из обработчика наведения мыши на объект. У тебя же получается что в обработчике создается объект со скином и текстом, потом создается экземпляр класса Хинт, и если я правильно понял, при создании экземпляра, прямо из конструктора, ты хочешь создавать на сцене текстфилд. Мне такой подход кажется неудобным, но тут может дело вкуса)))
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 07.06.2008 в 15:26. |
|
|||||
|
Создать клип и текстфилд - легко - почти также как если бы писал на таймлайне
private function createMovieAndText ():Void{
clip = _mc.createEmptyMovieClip ("hint", _mc.getNextHighestDepth());
txt = clip.createTextField("hintTxt", 1, 0, 0, 300, 100);
}
Переменную _mc надо либо в конструктор передавать, либо назначить в конструкторе |
|
|||||
|
Регистрация: 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. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: 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. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Всем спасибо за неоценимую помощь!!!
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:09. |
|
|
« Предыдущая тема | Следующая тема » |
|
|