PDA

Просмотр полной версии : C# и Flash , изменение переменной


Freeman
09.10.2015, 21:51
На форме C# есть Flash объект
Загружаю ролик и пытаюсь изменить переменную во Flash.
Ролик загружается нормально, но переменная не реагирует.
В SetVariable игнор, в GetVariable ошибка.

или другой случай Сетом ставлю aaa в 123, Гет возвращает 123, но в самом Флеш ничего не меняется, проверял выводом переменной на экран с инкрементом раз в секунду..

Прошу помощи.

С#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeFlash();
}

public void InitializeFlash()
{
FlashContainer.Movie = Application.StartupPath+"/bases/Main.swf";
FlashContainer.SetVariable("aaa","444");
this.Text = FlashContainer.GetVariable("aaa");
}
}


package
{
import components.Label;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.setInterval;
import system.Links;
import system.Window;

public class Main extends Sprite
{
public var aaa:Number = 0;
public var label:Label = new Label("Старт", 20, 20);

public function Main()
{
Links.stage = stage;
Window.init();

stage.addChild(label);
stage.addEventListener(MouseEvent.RIGHT_CLICK, function(e:*):void{});
setInterval(bbb,1000);
}

public function bbb():void
{
label.text = String(aaa++);
}
}
}

Tails
09.10.2015, 23:45
Я дилетант в вопросе внедрения флеша в другие среды, но возможно, вам стоит попробовать считывать переменную не из публичной переменной Main класса, а из:
this.loaderInfo.parameters["aaa"]
Например, туда передаются внешние переменные, когда флешь встраивается в html страницу браузера.

Если это не сработает, тогда нужно смотреть в сторону:
fscommand (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/system/package.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.6) или ExternalInterface (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.6)
Это инструменты флеша для общения с внешней средой.

olexandr
09.10.2015, 23:47
Я вот тоже удивился такому способу доступа извне. Вы его сами придумали?
Рекомендую также обратить внимание на ExternalInterface

illuzor
09.10.2015, 23:50
Попробуйте ExternalInterface (olexandr опередил)

Freeman
10.10.2015, 00:00
Tails (http://www.flasher.ru/forum/member.php?u=60054), fscommand (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/system/package.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.6) понятен, он работает из Flash в окружающую среду, но как бы поменять переменную из окружения..

ExternalInterface (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.6), вообще меня запутал.)

olexandr (http://www.flasher.ru/forum/showpost.php?p=1187913&postcount=3), ...Вы его сами придумали? - Нет, в самом Flash объекте имеется такой метод.
Во всех примерах в поисковике (http://zhyk.ru/forum/showthread.php?t=603933), очень просто описана работа с переменной, через SetVariable, но ничего не выходит =(

Если есть возможность, рабочий пример или указание на ошибку, доводы, размышления вслух..

ЗЫ:

Если что-то даст:
В среде C#, Flash говорит что ExternalInterface.available равен true

illuzor
10.10.2015, 00:22
Freeman, всё очень просто гуглится (https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=as3%20c%23%20externalinterface)

Freeman
10.10.2015, 00:49
C# не может обратиться по имени зарегистрированной функции.. нет такого метода..

Tails
10.10.2015, 01:42
C# не может обратиться по имени зарегистрированной функции.. нет такого метода..

Метод во флеше зарегистрировали?
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.6#addCallback()

Freeman
10.10.2015, 02:10
Есть, разобрался. В коде пока бардак.

Считывать с флеша смог, в XML формате, буду конвертировать.
Прислать из флеша в C# смог, но пока смог отсеять имя функции, без аргументов.

Появится порядок, выложу код для закрытия темы.