hronodon
Профиль
Статус: IronBrain©
Группа: Заслуженные артисты
Рейтинг: 0
|
Здравствуйте уважаемые симажевцы, долгое время меня терзала мысль о том "как же связать Flash и Softimage", месяц назад мои эксперементы провалились с треском и я решил больше не пробовать, но все же эта мысль не покидала меня. Тогда я решил разобраться с ней и не вставать с компьютера пока не решу эту проблему.
Итак, дамы и господа, по множеству просьб участников форума, выкладываю мини урок о том, как связать Flash и Softimage
Что мы научимся делать после прочтения данной статьи:
1. Писать небольшие сценарии на AS3 (Action Script 3.0) 2. Писать сценарии на JS (Java Script) 3. Работать с html (Выкладывать на html страницу - swf ролик) 4. И наконец, используя знания выше стоящих пунктов, научимся связывать Flash и Softimage
Вкратце опишу саму структуру взаимодействия:
Вся связь основана на том, что используя "event"ы во флеш, можно вызывать функции JS, а используя JS можно управлять Softimage
В данном уроке не будем углубляться в AS, создадим 1 кнопочку, которая допустим, будет строить слайдер (P.S. одна из моих функции для моего инструмента Face Mixer 1.0)
Что нам необходимо:
1. Flash CS4 (необходимое условие - наличие AS3) 2. Softimage 2010 sp1 32 bit (или ниже) 3. Текстовый документ
Что необходимо понять, прежде чем начнем связывание:
Когда я писал про то, что месяц назад мои эксперементы провалились с ужасом, я не объяснил почему. Все эксперементы я проводил на Softimage 2010 sp1 x64. Что бы я не делал, как бы не менял функции и т.д., ничего не работало, как потом выяснилось, NetView в xsi 64, грузит сайты через IE 64(Internet Explorer). Так вот, а насколько нам известно, что для 64-х битных браузеров нету Flash player, то это означанет, что в NetView 64, не будет отображаться flash ролики.
Поэтому все эксперементы с Flash необходимо проводить исключительно на 32 битной КСИ.
Убедились что у нас 32-х битная кси, открываем Flash.
Рисуем допустим на синем фоне, красную кнопку, пишем на ней Create Slider, правой кнопкой по нашей кнопке -> convert to symbol -> Movie Clip. Выбираем нашу кнопку, смотрим в параметры, и в поле Instance Name вводим "btn_slider"
Далее, выбираем 1 кадр на таймлайне, открываем AS, и пишем следующий код:
Код | function createSlider(e:Event):void { ExternalInterface.call("createCtrlSlider","TOM","Slider",0,0,"up_UP","down_DOWN"); } this.btn_slider.addEventListener("click",createSlider);
|
Теперь по порядку, создаем функцию "createSlider", которая будет слушать наши "Event"ы, далее указываем, что, если на нашу кнопку нажали, то вызывать функцию "createSlider" А теперь самая изюминка, новая функция в AS3, благодаря которой мы можем связывать Flash с Softimage. "ExternalInterface.call" - эта функция вызывает функцию из HTML. В качестве параметров мы ей передаем, "название функции" и потом через запятую, ее параметры. Подробное описание функции ExternalInterfaceТеперь жмем File->Export->Export Movie, даем название 1.swf По части Flash мы завершили, теперь создаем текстовый документ и даем ему название test1.html Теперь еще раз поймем, как это все работает, мы создали флеш ролик, который вызывает функцию "createCtrlSlider", Но нам нужно понять, откуда он ее вызывает, а вызывает он ее из html, т.е. функция наша должна быть описана в теге <script> Открываем нашу страницу "test1.html" через блакнот и вставляем в него вот такой вот текст: Код | <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" id="NYcountdown" width="600" height="300" > <param name="movie" value="1.swf"> <param name="bgcolor" value="#99CC66"> <param name="quality" value="high"> <param name="wmode" value="transparent"> <param name="devicefont" value="true"> <param name="seamlesstabbing" value="false"> <param name="allowscriptaccess" value="samedomain"> <embed type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" name="NYcountdown" width="132" height="55" src="1.swf" bgcolor="#99CC66" quality="high" wmode="transparent" devicefont="true" seamlesstabbing="false" allowscriptaccess="samedomain" > <noembed> </noembed> </embed> </object> |
Этот скрипт - грузит флеш ролик на html страницу.
параметр width - ширина, height - высота. Наш флеш ролик 1.swf должен находится в одной и той же дирректории что и наша страничка.
Теперь осталось описать нашу функцию, для этого перед началом публикации нашего флеш, вставляем вот такой вот код:
Код | <script language=”jscript” type="text/jscript"> var oXSI = new ActiveXObject( "XSI.Application" ); var oApp = oXSI.Application; function splitText(text) { var myString = new String(); var splitString = new String(); myString = text; splitString = myString.split("_"); return(splitString); } function createCtrlSlider(rigName,sliderName,posX,posY,up_Text,down_Text) { var upTex = new String(); var downTex = new String(); var word = new String(); var Name = ""; oApp.SetValue("preferences.Interaction.autoinspect", false, null); Name = rigName + "_" + sliderName; //*************************Create a Slider************************************ oApp.CreatePrim("Square", "NurbsCurve", Name, null); oApp.SetValue(Name+".square.length", 4, null); oApp.SetValue(Name+".kine.local.sclx", 0.05, null); oApp.SetValue(Name+".kine.local.posx", posX, null); oApp.SetValue(Name+".kine.local.posy", posY, null); //**************************Create a CTRL************************************* oApp.CreatePrim("Circle", "NurbsCurve", Name + "_ctrl", null); oApp.SetValue(Name + "_ctrl"+".circle.radius", 0.3, null); oApp.SetValue(Name + "_ctrl"+".kine.local.posx", posX, null); oApp.SetValue(Name + "_ctrl"+".kine.local.posy", posY, null); oApp.SetValue(Name + "_ctrl"+".kine.local.posyminactive", true, null); oApp.SetValue(Name + "_ctrl"+".kine.local.posyminlimit", -2, null); oApp.SetValue(Name + "_ctrl"+".kine.local.posymaxactive", true, null); oApp.SetValue(Name + "_ctrl"+".kine.local.posymaxlimit", 2, null); oApp.SetMarking("kine.local.pos.posx,kine.local.pos.posz,kine.local.ori.euler,kine.local.scl"); oApp.Lock(Name + "_ctrl"+".kine.local.posx,"+Name + "_ctrl"+".kine.local.posz,"+Name + "_ctrl"+".kine.local.rotx,"+Name + "_ctrl"+".kine.local.roty,"+Name + "_ctrl"+".kine.local.rotz,"+Name + "_ctrl"+".kine.local.sclx,"+Name + "_ctrl"+".kine.local.scly,"+Name + "_ctrl"+".kine.local.sclz", 65535); oApp.SetKeyableAttributes(null, null, 0); oApp.ParentObj(Name, Name + "_ctrl"); //****************************Create UP Text******************************** upTex = splitText(up_Text)[0]; word = splitText(up_Text)[1]; oApp.CreatePrim("Text", "NurbsCurve", upTex, null); oApp.SetValue(upTex+".text.text", "_RTF_{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\fnil\\fprq11\\fcharset0 Arial;}{\\f1\\fnil\\fprq11\\fcharset204{\\*\\fname Arial;}Arial CYR;}}\r\n\\viewkind4\\uc1\\pard\\lang1033\\f0\\fs20"+word+"\\lang1049\\f1\\par\r\n}\r\n", null); oApp.SetValue(upTex+".kine.local.sclx", 0.15, null); oApp.SetValue(upTex+".kine.local.scly", 0.15, null); oApp.SetValue(upTex+".kine.local.sclz", 0.15, null); oApp.SelectGeometryComponents(upTex+".pnt[*]"); oApp.MoveCtr2Vertices(upTex, true); oApp.SetValue(upTex+".kine.local.posx", posX, null); oApp.SetValue(upTex+".kine.local.posy", posY+2.5, null); oApp.SetMarking("kine.local.pos,kine.local.ori.euler,kine.local.scl"); oApp.Lock(upTex+".kine.local.posx,"+upTex+".kine.local.posy,"+upTex+".kine.local.posz,"+upTex+".kine.local.rotx,"+upTex+".kine.local.roty,"+upTex+".kine.local.rotz,"+upTex+".kine.local.sclx,"+upTex+".kine.local.scly,"+upTex+".kine.local.sclz", 4); oApp.SetKeyableAttributes(null, null, 0); oApp.ParentObj(Name, upTex); //**************************Create DOWN Text******************************** downTex = splitText(down_Text)[0]; word = splitText(down_Text)[1]; oApp.CreatePrim("Text", "NurbsCurve", downTex, null); oApp.SetValue(downTex+".text.text", word, null); oApp.SelectGeometryComponents(downTex+".pnt[*]"); oApp.MoveCtr2Vertices(downTex, true); oApp.SetValue(downTex+".kine.local.sclx", 0.15, null); oApp.SetValue(downTex+".kine.local.scly", 0.15, null); oApp.SetValue(downTex+".kine.local.sclz", 0.15, null); oApp.SetValue(downTex+".kine.local.posx", posX, null); oApp.SetValue(downTex+".kine.local.posy", posY-2.5, null); oApp.SetMarking("kine.local.pos,kine.local.ori.euler,kine.local.scl"); oApp.Lock(downTex+".kine.local.posx,"+downTex+".kine.local.posy,"+downTex+".kine.local.posz,"+downTex+".kine.local.rotx,"+downTex+".kine.local.roty,"+downTex+".kine.local.rotz,"+downTex+".kine.local.sclx,"+downTex+".kine.local.scly,"+downTex+".kine.local.sclz", 65535); oApp.SetKeyableAttributes(null, null, 0); oApp.ParentObj(Name, downTex); oApp.DeselectAll();
oApp.SetValue("preferences.Interaction.autoinspect", true, null); return; } </script>
|
Мы не будем рассматривать подробности моей функции, она просто создает слайдер. Сохраняем нашу страничку, заходим в SoftImage, жмем alt+5 (NetView)-> open -> выбираем нашу test1.html Жмем на кнопочку и получаем результат. P.S. щас разрабатываю инструмент под названием Face Mixer, в нем я буду использовать Flash меню, и выложу в этой теме чуток попозже. 
|