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.

Чтобы получить качественное видео, такое как, например на сайте 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.