Flash!

(Игрострой и все, что с ним связано)

Модератор: Buxyr

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Flash!

Сообщение KrisGames » Вс фев 26, 2012 5:22 pm

Кто готов сесть за изучение флеш анимации?
Нам анимация сложная не нужна, чисто кнопки, по этому навыков рисования не требуется...
Т.к. основные уроки от огасоды сделаны на Adobe Flash CS4, то и изучать предпочтительнее ее!


ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Аватара пользователя
Belka

Художник Коммандо Мисс форума
Странник
Сообщения: 239
Рег. Пн май 03, 2010 2:23 pm
Награды: 3
Репутация: 355
Вклад в проект: 22
Откуда: Москва
Благодарил (а): 2 раза

Re: Flash!

Сообщение Belka » Пн фев 27, 2012 3:51 am

Скачала, Ща поставлю этого "адобу" попобую, что там такое, если получится тут отпишу)

-- 27 фев 2012, 12:51 --

ну поставила я его. что мне нужно учесть? какую версию скриптов выбрать? С чего начать делать?
Да!

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Re: Flash!

Сообщение KrisGames » Пн фев 27, 2012 11:53 am

Версия скриптов по моему безразлична, UDK и 2 и 3 версии поддерживает, начни с чего нить попроще, картинку на ней 2 кнопки поставь...
По поводу скриптов...

 Скрытый текст
1. Как вызвать функцию US из AS.
В том кадре в котором это надо (если надо в нескольких кадрах, то во всех) в начале скрипта вставляем строку:

Код: Выделить всё

import flash.external.ExternalInterface;


Тем самым мы подключаем библиотеку для работы с внешними приложениями.
Сам вызов производится так:

Код: Выделить всё

ExternalInterface.call("OnPressNewGameButton");


В кавычках - имя функции, которая есть в US.
Например при нажатии на кнопку AS "New Game" будет вызываться функция US "OnPressNewGameButton", которая
загружает начальный уровень игры консольной командой:

Код: Выделить всё

function OnPressNewGameButton(GFxClikWidget.EventData ev)
{
   PC.Player.Actor.ConsoleCommand("open Terra1", false);
}


Ну, естественно в AS нужно на кнопку "New Game" повесить слушателя и связать его с функцией...
"Полный" код AS:

Код: Выделить всё

import gfx.controls.ButtonGroup;
import flash.external.ExternalInterface;
function SendNewGameCommand() {
   ExternalInterface.call("OnPressNewGameButton");   
}
btn_NewGame.addEventListener("click", this, "SendNewGameCommand");
stop();


Аналогично добавляем для остальных кнопок меню...

2. Как передать данные из AS в US.

Для начала добавляем на главное меню слой, в котором будем хранить все переменные.
Добавляем в первый кадр скрипт с переменными. Опции лучше всего сделать так:

Код: Выделить всё

if (!options) {
    var options:Object = {};
}

var defScreen:Number = 2;
var defBrightness:Number = 5;
var defContrast:Number = 5;
var defGamma:Number = 5;

var defSpeak:Number = 5;
var defMusik:Number = 5;
var defSFX:Number = 5;
var defAmbient:Number = 5;

options.selectedScreen = (options.selectedScreen) ? options.selectedScreen : defaultScreen;
options.Brightness = (options.Brightness) ? options.Brightness : defBrightness;
options.Contrast = (options.Contrast) ? options.Contrast : defContrast;
options.Gamma = (options.Gamma) ? options.Gamma : defGamma;

options.Speak = (options.Speak) ? options.Speak : defSpeak;
options.Musik = (options.Musik) ? options.Musik : defMusik;
options.SFX = (options.SFX) ? options.SFX : defSFX;
options.Ambient = (options.Ambient) ? options.Ambient : defAmbient;

тут мы сначала определили переменную - массив объектов (если ее еще не было). Далее заполнили массив начальными значениями (опять таки если их не было, то дефолтными)...

Выбор разрешения экрана у меня - это степпер CLIK-а, яркость и все остальное - слайдеры.
В кадре где выводится меня выбора опций в акциях добавляем в скрипт:

Код: Выделить всё

stp_Screen.dataProvider = ["800*600", "1024*768", "1280*768", "1280*1024"];
stp_Screen.selectedIndex = (options.selectedScreen) ? options.selectedScreen : defScreen;

sld_Brightness.value = (options.Brightness) ? options.Brightness : defBrightness;
sld_Contrast.value = (options.Contrast) ? options.Contrast : defContrast;
sld_Gamma.value = (options.Gamma) ? options.Gamma : defGamma;

Здесь определяем набор разрешений экрана (текст, который будет выводиться на степпере) и задаем начальные значения.
Далее на каждую опцию соответствующую функцию:

Код: Выделить всё

function SendBrightness() {
   options.Brightness = sld_Brightness.value;
   ExternalInterface.call("OnChangeGraphic");
}


Меняем данные, которые может получить US и вызываем функцию US, которая собственно получает эти данные.
Ну и слушатели для каждой опции:

Код: Выделить всё

sld_Brightness.addEventListener("change", this, "SendBrightness");


Разрешение экрана лучше не менять на лету, а менять только при выходе из меню. Т.е. для него функция слегка другая:

Код: Выделить всё

function SendChangeScreen() {
   options.selectedScreen = stp_Screen.selectedIndex;
}


Нужно еще две функции:

Код: Выделить всё

function SetDefault() {
   stp_Screen.selectedIndex = defScreen;
-----
   options.Gamma = defGamma;
   ExternalInterface.call("OnChangeGraphic");
}


Установка опций по умолчанию. И:

Код: Выделить всё

function ReturnToOptionsMenu2() {
    options.selectedScreen = stp_Screen.selectedIndex;
   options.Brightness = sld_Brightness.value + 0.001;
   options.Contrast = sld_Contrast.value + 0.001;
   options.Gamma = sld_Gamma.value + 0.001;
    gotoAndPlay("optionsmenu");
}


Возврат в главное меню. Тут мы просто устанавливаем данные для получения в US и переходим в главное меню... Почему прибавляем + 0.001 - не помню уже, но оно надо...
Чтобы в конце US мог получить эти данные при выходе из меню нужно вызвать спецфункцию:

Код: Выделить всё

import flash.external.ExternalInterface;
ExternalInterface.call("OnCloseAnimationComplete");
stop();


Это в последнем кадре меню...
Теперь все это нужно в US получить...
Делаем функции:

Код: Выделить всё

function OnChangeGraphic()
{
   Brightness = 2.f - MainMC.outer.GetVariableNumber("options.Brightness") / 5.f;
   Contrast = 1.05f - MainMC.outer.GetVariableNumber("options.Contrast") / 10.f;
   Gamma = MainMC.outer.GetVariableNumber("options.Gamma") / 10.f;
   ChangeDisplayOption();
}
function ChangeDisplayOption()
{
   local Player PP;
   
   PP = GetLP();
   
   PP.PP_HighlightsMultiplier = PC.PostProcessPresets[0].Highlights * Contrast * Brightness * 2.f;
   PP.PP_MidTonesMultiplier = PC.PostProcessPresets[0].MidTones * Brightness;
   PP.PP_ShadowsMultiplier = PC.PostProcessPresets[0].Shadows * ( 1.f - Contrast ) * Brightness * 2.f;
   PC.SetGamma(Gamma);
}


.outer.GetVariableNumber - получает число от AS. MainMC - это GFxObject, который мы получили в функции Start так:

Код: Выделить всё

MainMC = GetVariableObject("_root");


Яркость воздействует сразу на все тона картинки, контраст только на светлые тона и тени, увеличивая "расстояние" между ними.
Для громкости:

Код: Выделить всё

function OnChangeAudio()
{
   SoundSpeak = MainMC.outer.GetVariableNumber("options.Speak") / 10.f;
   SoundMusik = MainMC.outer.GetVariableNumber("options.Musik") / 10.f;
   SoundSFX = MainMC.outer.GetVariableNumber("options.SFX") / 10.f;
   SoundAmbient = MainMC.outer.GetVariableNumber("options.Ambient") / 10.f;
   ChangeAudioOption();
}
function ChangeAudioOption()
{
   PC.SetAudioGroupVolume( 'SFX', SoundSFX );
   PC.SetAudioGroupVolume( 'Dialog', SoundSpeak );
   PC.SetAudioGroupVolume( 'Announcer', SoundSpeak );
   PC.SetAudioGroupVolume( 'Music', SoundMusik );
   PC.SetAudioGroupVolume( 'Ambient', SoundAmbient );
}


/ 10.f - т.к. значения слайдера меняются от 0 до 10, а в US от 0 до 1.
PC - это UTPlayerController :

Код: Выделить всё

var UTPlayerController PC;
function bool Start()
{
...
PC = UTPlayerController(GetPC());
...
}


Ну и разрешение экрана:

Код: Выделить всё

function OnCloseAnimationComplete()
{
   ScreenRes = MainMC.outer.GetVariableNumber("options.selectedScreen");
   switch(ScreenRes)
   {
      case 0:
         UT_ConsoleCommand("setres 800x600x32xw", true);
         break;
      case 1:
         UT_ConsoleCommand("setres 1024x768x32xw", true);
         break;
      case 2:
         UT_ConsoleCommand("setres 1280x768x32xw", true);
         break;
      case 3:
         UT_ConsoleCommand("setres 1280x1024x32xw", true);
         break;
      default:
         break;
   }
    UTGFxHudWrapper(GetPC().MyHUD).CompletePauseMenuClose();
}


Передать в AS данные аналогично, только SetVariableNumber. Подробно пока писать не буду - закопался в DataProvider... Если кто видел нормальные уроки/описания по нему - укажите плиз...

Как привязать звуки к нему?
Нужно просто в defaultproperties указать:

Код: Выделить всё

    SoundThemes(0)=(ThemeName=default,Theme=UISoundTheme'UDKFrontEnd.Sound.SoundTheme')


Тут я использовал стандартные звуки УДК, но можно создать свою тему.

А вот как заставить УДК в меню воспроизводить музыку/ амбиент звуки/речь? Я найти не могу. Простое добавление:

Код: Выделить всё

   PC.ClientPlaySound(MenuMusic);


в лучшем случае включает музыку после выхода из меню. В самом меню музыки нет. Поэтому меняешь громкость музыки "на глазок". Она меняется, но насколько можно узнать, только выйдя из меню. Это ненормально!
Кто сможет решить эту проблему?!?


Ну и еще по коду, - надо спросить Сашку (Zver),- он тут пока лучше меня шарит...
Я в UDK новичек.. :oops:
ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Аватара пользователя
Belka

Художник Коммандо Мисс форума
Странник
Сообщения: 239
Рег. Пн май 03, 2010 2:23 pm
Награды: 3
Репутация: 355
Вклад в проект: 22
Откуда: Москва
Благодарил (а): 2 раза

Re: Flash!

Сообщение Belka » Пн фев 27, 2012 2:20 pm

ZVER писал(а): оформить и заполнить названия компонентов
поподробнее эти моменты можно осветить?
Да!

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Re: Flash!

Сообщение KrisGames » Вт фев 28, 2012 7:09 am

Светик, ты все прекрасно поняла - чего переспрашиваешь 8-)

Конечно имена кнопок на ангельском пиши, начни с главного меню, чтоб нам игру запускать не со стандартного меню а со своего, сделай 4-5 кнопок. назови их Btn_MainMenu_01, Btn_MainMenu_02... или Btn_MainMenu_Start, Btn_MainMenu_Setting, Btn_MainMenu_Exit...

И учти, что переход с главного меню на все вспомогательные меню, надо делать во флеше, т.е. если давим в главном меню кнопку настройки (Btn_MainMenu_Setting) то должно сразу во флеше выходить окно настроек со своим набором кнопок/компонент со своими именами....

Но т.к. я не думаю что Adobe Flash CH такая простая как Паинт, то предлагаю не спешить и не делать сразу все, а разобраться в основах сперва... и сделать только главное меню для начала...
ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Аватара пользователя
Belka

Художник Коммандо Мисс форума
Странник
Сообщения: 239
Рег. Пн май 03, 2010 2:23 pm
Награды: 3
Репутация: 355
Вклад в проект: 22
Откуда: Москва
Благодарил (а): 2 раза

Re: Flash!

Сообщение Belka » Вт фев 28, 2012 2:56 pm

ну первая проба, побыстрому. особо не старалась, пока главное принципы понять что нужно делать и как
4 кнопки, имена MainMenu_0, MainMenu_1, MainMenu_2, MainMenu_3

MainMenu_1.rar
(4.94 КБ) 481 скачивание


так или нет?
я только имена кнопок прописала, имена элементов и скрипты не трогала пока
Да!

Аватара пользователя
Belka

Художник Коммандо Мисс форума
Странник
Сообщения: 239
Рег. Пн май 03, 2010 2:23 pm
Награды: 3
Репутация: 355
Вклад в проект: 22
Откуда: Москва
Благодарил (а): 2 раза

Re: Flash!

Сообщение Belka » Вт фев 28, 2012 3:19 pm

скрипты кнопок?? стандартные из адобе флеш)
точнее скриптов вааще никаких нет, создан стандартный объект типа button во флеше

-- 28 фев 2012, 16:22 --

эти кнопки сейчас ничего не делают по 4 события у каждой, стандарт
Да!

Аватара пользователя
Belka

Художник Коммандо Мисс форума
Странник
Сообщения: 239
Рег. Пн май 03, 2010 2:23 pm
Награды: 3
Репутация: 355
Вклад в проект: 22
Откуда: Москва
Благодарил (а): 2 раза

Re: Flash!

Сообщение Belka » Вт фев 28, 2012 3:32 pm

UDK? а что это?
Да!

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Re: Flash!

Сообщение KrisGames » Вт фев 28, 2012 3:40 pm

Точно Свет, сколько ты говорила у тебя места то на диске у ноута? 1 гиг? и проц 260) ну вощем тебе тока удк не хватает чтоб ноут помер))
А если честно - надо искать возможность выдрать скрипты из удк и как то их отдельно вкорячить без самого удк)
ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Re: Flash!

Сообщение KrisGames » Вт фев 28, 2012 3:50 pm

Света. я отослал тебе на почту и скрипт и доку, там собстно только пути прописать, все вроде просто. попробуй переделай)
ICQ : 470-451-451
Mail: KrisGames@yandex.ru


Вернуться в «Игрострой»

 

 

cron