ExternalInterface VisualBasic
Ноябрь 11, 2008
Поискав в документации, я не обнаружил объяснения как работать с ExternallInterface через activeX компонент в собственном приложении, поэтому решил дать некоторые разъяснения на примере взаимодействия с Visual Basic 2008.
Сначала флеш:
package {
import flash.display.Sprite;
import flash.external.ExternalInterface;
public class Main extends Sprite {
public function Main() {
ExternalInterface.addCallback("getFromVB", getFromVB);
ExternalInterface.call("sendToVB", "VB, Hello");
}
public function getFromVB(val:String):void {
//Здесь здесь работаем с val из VisualBasic
}
}
}
Теперь Visual Basic. Добавляем flash activeX на панель инструментов (Правая кнопка > Choose items> Browse..) из C:\Windows\System32\Macromed\Flash а затем на сцену (я назвал его MainMovie):
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MainMovie.LoadMovie(0, Application.StartupPath + "\test.swf")
End Sub
Private Sub MainMovie_FlashCall(ByVal sender As Object, ByVal e As AxShockwaveFlashObjects._IShockwaveFlashEvents_FlashCallEvent) Handles MainMovie.FlashCall
'сюда приходит флеш запрос из call метода
MsgBox (e.request)
'Отправляем обратно
MainMovie.CallFunction('<invoke name="getFromVB"><arguments><string>Hi, Flash</string></arguments></invoke>')
End Sub
В окошке сообщения в Visual Basic мы увидим:
VB, Hello
Все это с легкостью можно повторить в любом другом IDE.
Конвертация видео в flv
Октябрь 25, 2008
Чтобы получить качественное видео, такое как, например на сайте Vimeo нужно поэкспериментировать с программами и настройками для них. Для перекодирования файлов mp4 в формат flv (с кодеком on2vp6) я использую эту программу. Лучшее качество получается с двухканальным кодированием (2pass). Если же видео имеет большой размер и другой формат, сначала необходимо конвертировать его в mp4. Мне приглянулись продукты Wondershare: DVD Ripper Platinum – для DVD2MP4, Video Converter Platinum – для других видео файлов. Надеюсь, что файлы будут Вам полезны
Все программы могут быть использованы только в ознакомительных целях.
BulkLoader – замена Loader’у
Сентябрь 30, 2008
Download: http://code.google.com/p/bulk-loader/
ASDocs: http://www.stimuli.com.br:8080/media/projects/bulk-loader/docs/
BulkLoader – это класс позволяющий загружать различные данные (картинки, swf, xml и т.д.) одновременно, без необходимости создания loader’a для каждого запроса. Например, нам необходимо сделать каркас сайта (прелоадер для всех разделов):
import br.com.stimuli.loading.BulkLoader;
var loader:BulkLoader = new BulkLoader("main-site");
//Создавая BulkLoader c именем "main-site" в другом месте, мы можем получить загруженные здесь файлы
private var itemName:String ="";
private var lastItem:String="";
//Имя выбранного раздела сайта (также имя файла swf)
private var lastShowedItem:String = "";
//Последняя флешка добавленная на сцену
private var lastPriority:int = 0;
//Приоритет загрузки (хранит последнее значение)
private var preloader:Preloader = new Preloader();
//Кастомный прелоадер (см. функцию showProgress)
public function show(prmItemName:String):void{
itemName = prmItemName;
showItem();
}
private function showItem(e:Event = null):void {
if(lastItem != itemName){
//Выбрали другой раздел
if (lastShowedItem != ""){
container.removeChild(loader.getMovieClip(lastShowedItem));
//также есть функции getXML, getBitmap, getBitmapData, getSound и т.п.
lastShowedItem ="";
}
if (loader.get(itemName) != null) {
//Загрузка начиналась до этого
if (loader.get(itemName).isLoaded == true) {
//Загрузка прошла - добавим на сцену
if (this.contains(preloader)) {
removeChild(preloader);
}
container.addChild(loader.getMovieClip(itemName));
lastShowedItem = itemName;
} else {
//Загрузка для данного раздела не завершена
//Продолжим с высшим приоритетом
if (!this.contains(preloader)) {
addChild(preloader);
}
lastPriority++;
loader.changeItemPriority(itemName, lastPriority);
}
} else {
//Начала загрузки не было - запустим
if (!this.contains(preloader)) {
addChild(preloader);
}
lastPriority++;
loader.add(itemName + ".swf", { id: itemName, priority:lastPriority } );
loader.get(itemName).addEventListener(Event.COMPLETE, showItem);
//Метод get позволяет добавлять события отдельно для каждого процесса
loader.get(itemName).addEventListener(ProgressEvent.PROGRESS, showProgress);
loader.start();
}
lastItem = itemName;
}
}
private function showProgress(e:ProgressEvent = null):void {
//Общая функция прогресса загрузки
if (loader.get(lastItem).isLoaded != true) {
preloader.progress(loader.get(lastItem).bytesLoaded , loader.get(lastItem).bytesTotal);
}
}
Код довольно понятный и не требует изменения при увеличении или уменьшении количества разделов.
MultiTouch Pad своими руками
Сентябрь 25, 2008
Сейчас я работаю над мульти контактными интерактивными стойками, наподобие Microsoft Surface. Можно ли сделать MultiTouch Pad своими руками? Вот что нам предлагает студент Калифорнийского университета: взять вебкамеру, положить её в коробку – и всё – мульти сенсорный touchpad готов.
На его сайте можно скачать демо-софт, который включает в себя и Flash ролики, работающие с сенсором через сокет.
Для тех кто серьёзно решил заняться мультитачем: http://ccv.nuigroup.com/ и, собственно nuigroup.com.