SoftimageRu Форум -> Flash & NetView

Новости • Форум • Помощь • Поиск • Участники • Календарь • База


Страницы: (3) 1 2 [3]   ( Перейти к первому непрочитанному сообщению ) Ответ в темуОтвет      Создание новой темыНовая тема   

> Flash & NetView, От простого к сложному...   
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 меню, и выложу в этой теме чуток попозже.


Login require!
Персональное сообщениеПисьмо на e-mail пользователюICQ
Цитировать сообщение Дата 3.03.2010 - 19:24 Top
hronodon
Профиль
Статус: IronBrain©
Группа: Заслуженные артисты
Рейтинг: 0
Sshadows
спс, на днях выпущу бета версию
Персональное сообщениеПисьмо на e-mail пользователюICQ
Цитировать сообщение Дата 31.03.2010 - 11:20 Top
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Страницы: (3) 1 2 [3]  Ответ в темуОтвет      Создание новой темыНовая тема   

 

Текстовая версия