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

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

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

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Question Custom Buttons. Кастомные кнопки. Как сделать?

Есть собранный интерфейс игры во Flash. Много кнопок(будущих, то есть просто png картинки), все стоит на своих местах.

Мне же необходимо применить к каждой из всех кнопок пару различный эффектов (tween scaleX + scaleY + ColorTransform + добавить небольшой клип (щелчка) в месте нажатия и это все для разный состояний кнопки)

Я бы сделал каждую кнопку во Flash но, кнопок слишком много, слишком долго и муторно выйдет + все уже стоит на своих местах (вручную потом ставить координаты это не вариант)

Как это сделать программно (по умному )?

Вот парочка идей пришедших мне в голову:

1) Это создать класс например MyCustomButton, в нем создать слушатели для состояний и применять все
манипуляции к this. Далее когда оборачиваем изображение в клип, в поле "Главный класс" вместо
"flash.display.MovieClip" указать наш com.name.MyCustomButton. Вот и вся работа, изменил один класс для всех
кнопок, прописал базовый класс клипу и все работает.

Но у меня почему то (черт знает почему), именно при таком раскладе tween не воспринимает функцию onComplete.
Например: В функции меняются свойства клипа, и есть trace(). Трейс работает а свойства остаются такими же (короче
ничего не происходит, прям чертовщина какая то).

Не знаю на сколько такой вариант был бы правильным для кастомизации кнопок.

2) Сделать класс с статистическими функциями, и инициализировать каждую нужную кнопку с клипа интерфейса, а потом уничтожать слушатели, тоже для каждого клипа отдельно.
Код AS3:
InitClipListeners(gui.shop);
InitClipListeners(gui.achives);
InitClipListeners(gui.photo);
и т.д.
например:
Код AS3:
 
InitClipListeners(clip:MovieClip):void
{
   clip.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
   clip.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
   clip.addEventListener(MouseEvent.CLICK, clickHandler);
}
 
DestroyClipListeners(clip:MovieClip):void
{
   clip.removeEventListener(MouseEvent.ROLL_OVER, onRollOver);
   clip.removeEventListener(MouseEvent.ROLL_OUT, onRollOut);
   clip.removeEventListener(MouseEvent.CLICK, clickHandler);
}
Но как такой вариант, правильный или нет я не знаю. (Была проблема с Stage.mouseX в статической функции, и решил узнать у более опытных ребят) Помогите пожалуйста)


Последний раз редактировалось zCHESNOKz; 28.10.2015 в 22:28.
Старый 27.10.2015, 23:42
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 2  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Кнопки ваши в мувиклипах содержаться? Можно запустить поиск по всем дочерним объектам и снимать с них высоту, ширину и позицию. И заменять на свои кнопки.

Старый 27.10.2015, 23:47
DEVORON вне форума Посмотреть профиль Отправить личное сообщение для DEVORON Найти все сообщения от DEVORON
  № 3  
Ответить с цитированием
DEVORON

Регистрация: Jul 2014
Сообщений: 42
Попробуй создавать кнопки через функцию, в которой кнопка будет подписана на слушатели мыши и обработчики нажатия-наведения будут вызывать анимацию. В качестве аргумента передаёшь функцию, которая будет обрабатывать нажатие кнопки.
Код AS3:
private function createButton(clickHandler:Function):Button{
var btn:Button = new Button();
btn.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
btn.addEventListener(MouseEvent.ROLL_OUT, onRollOut);
btn.addEventListener(MouseEvent.CLICK, clickHandler);
return btn;
}
 
private function onRollOver(e:MouseEvent):void{
// тут идут манипуляции по наведению, например, скейлинг
var btn:Button = e.currentTarget as Button;
btn.scaleX=1.2;
btn.scaleY=1.2;
}
 
private function onRollOut(e:MouseEvent):void{
// тут идут манипуляции по убиранию мыши с кнопки, например, восстановление масштаба
var btn:Button = e.currentTarget as Button;
btn.scaleX=1;
btn.scaleY=1;
}

Старый 28.10.2015, 20:33
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 4  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от alexandrratush Посмотреть сообщение
Кнопки ваши в мувиклипах содержаться? Можно запустить поиск по всем дочерним
объектам и снимать с них высоту, ширину и позицию. И заменять на свои кнопки.
Не совсем тебя понял. Потенциальные кнопки это - просто растровые изображения. Я их оберну в MovieClip (каждый) и
дам имя в свойствах. "И заменять на свои кнопки" - так в этом и суть, можно по всякому сделать "свои" кнопки.


Последний раз редактировалось zCHESNOKz; 28.10.2015 в 22:28.
Старый 29.10.2015, 19:41
meiciuc вне форума Посмотреть профиль Отправить личное сообщение для meiciuc Найти все сообщения от meiciuc
  № 5  
Ответить с цитированием
meiciuc

Регистрация: Nov 2005
Сообщений: 149
возможно, в качестве идеи подойдет нечто подобное?
1. все картинки (будущие кнопки) поместить в отдельный контейнер
2. специальному методу передать этот контейнер (чтоб из картинок сделал кнопки)
3. можно использовать и не SimpleButton, а обыкновенный Button, тогда разные состояния для кнопок (rollOver, rollOut) просто надо будет задавать через Button.setStyle()
4. картинкам придется давать имена - иначе как обрабатывать клики?
5. В конструктор SimpleButton передаются DisplayObject-ы, которые и будут отображаться (т.е. - с картинками при инициализации можно сделать что угодно, наложить необходимые эффекты)

псевдокод!

Код AS3:
function initializeButtons(container:Sprite):void
{
 for(var i:int=0; i<container.numChildren; i++)
 {
  var image:DisplayObject = container.removeChildAt(i);
  var simpleButton:SimpleButton = new SimpleButton(image, image, image);
   simpleButton.name = image.name
   simpleButton.x = image.x;
   simpleButton.y = image.y;
   container.addChildAt(simpleButton, i);
  }
 
 container.addEventListener(MouseEvent.CLICK, handleButtonsClick, true);
}
function handleButtonsClick(e:MouseEvent):void
{
 switch(e.target.name)
 {
  case "someName":
   doSomeThing();
  break;
 }
}

Касательно цитаты: "(Была проблема с Stage.mouseX в статической функции, и решил узнать у более опытных ребят) Помогите пожалуйста)"

Если правильно понимаю проблему, то к Stage.mouseX нельзя обратиться подобным образом - это не статическая функция. Можно получить stage через соотв. свойство DisplayObject ПРИАТТАЧЕННОГО к stage. Т,е. - если на сцене есть "ВИДИМАЯ" кнопка (явное свидетельство, что она на сцене), то можно обратиться через нее btn.stage.mouseX. Т.е. - свойство stage есть У ВСЕХ DisplayObject. Но у тех, что не приаттачены stage==null.

Кстати, если координаты мыши надо узнать при обработке мышиного события, то их можно узнать из из самого объекта события - http://help.adobe.com/ru_RU/FlashPla...nt.html#stageX

Старый 29.10.2015, 22:21
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 6  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Спасибо за идейку и советы! Добра тебе)

Цитата:
Сообщение от meiciuc Посмотреть сообщение
Кстати, если координаты мыши надо узнать при обработке мышиного события, то их можно узнать из из самого объекта события - http://help.adobe.com/ru_RU/FlashPla...nt.html#stageX

Все та же чертовщина) У меня функция с добавлением слушателей статическая, и функция обработчик тоже статическая получилась, увы мои скудные (пока что) знания AS3, не совсем помогают понять как это связано. Но! Из за чего то я не мог обратиться к свойствам события event кроме как к e.target и e.currentTarget

Старый 30.10.2015, 02:03
meiciuc вне форума Посмотреть профиль Отправить личное сообщение для meiciuc Найти все сообщения от meiciuc
  № 7  
Ответить с цитированием
meiciuc

Регистрация: Nov 2005
Сообщений: 149
1. Статические - нестатические слушатели или обработчики - дело вкуса (лично я не люблю статические классы и методы).

2. "Из за чего то я не мог обратиться к свойствам события event кроме как к e.target и e.currentTarget" - Евенты разные - у них разные наборы свойств. Без примера кода обработчика сложно что-либо понять и рекомендовать.

Старый 02.11.2015, 18:59
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Если кнопки - картиночные, то есть у каждой своя фото. Удобнее делать типа того

Код AS3:
ButtonsFactory.define(photo, id*/string,int*/);
var cust:CustomBtn = ButtonsFactory.createButtonByID("15");
То есть сначала создаем списочек, а потом из списка нужное тянем. Аналогично работа со звуком, когда их много, хотя там лучше вообще чистым статиком обойтись
По поводу функционала, стоит создать отдельный класс CustomBtn в котором и описать весь стандратный функционал оверов и аутов
__________________
Марк Tween

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

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

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


 


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


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