blog.Ring.idv.tw

ActionScript 3.0

Phidgets - 環境感知

Phidgets 提供了一套隨插即用(plug & play)的環境感知模組,所以包含了很多感應器(Sensor),這幾天玩過的就有:Touch Sensor、Force Sensor、Slider Sensor、Rotation Sensor還有Servo和RFID,並可以直接透過USB介面和電腦溝通,所以它也提供了許多不同程式的API,如:.NET、Visual Basic、LabView、Java、C/C++、Python和ActionScript 3等等~

而我目前手上擁有的這一套就是「Phidget Starter Kit #1 」~ 從官方網站上的報價看來~ 大約要7500元新台幣~ 如果在台灣買的話應該就要近萬元了吧~

這幾天也簡單的利用「Slider Sensor」並整合Flash Player 10所增強的一個Sound API功能~ 有興趣的話可以看看「Generating sounds dynamically in Flash Player 10」這一篇教學~ 我實作的範例已貼在YouTube上~ 「Phidget Slider Sensor - DynamicSound」我利用(周杰倫/侯佩岑/張君雅/蔡閨)這幾個組合應該會有些笑點吧~ 呵~ XDDD

2008-11-29 14:02:29 | Comments (1)

Flash Player 10 - FileReference.browse() 安全限制

這篇不是什麼大新聞~ 早在八月份時Flash Player Developer Center就已經發佈一篇「Understanding the security changes in Flash Player 10」文章來說明了!

因為最近注意到「TransNote」的「開啟舊檔」這個已經失效的功能~ 其實這個功能未來會拿掉,因為我們會撰寫一個後端的服務機制,以供使用者能直接將閱讀後的文章儲存在TransNote之上,所以這個安全限制對我們來說影響不大,不過對於WordPressFlickr原先就使用這樣的Flash檔案上傳機制就影響頗大,因為這樣的限制已經無法透過JavaScript直接利用ExternalInterface來開啟「FileReference.browse()」,而被限制只能使用「User-Event」來觸發,這的確在網頁上會造成不方便。

幸好,也有人提供相關的解決方案,它的作法其實就是利用一些Transparent、CSS的相關設定來處理的,實際的範例:「FancyUpload - Swiff meets Ajax (v2.0)」,從這個範例我們可以知道他的作法就是設定Flash的寬高剛好對應後面超連結文字的寬高,然後將Flash設為Transparent,如此一來,使用者就會誤以為點選這個超連結文字,但實際上點選的卻是Flash,利用這樣的方式來觸發「User-Event」,Bingo! 問題也就解決了。

相關資源

Flash Player 10 FileReference Changes

升級到 Flash Player 10 將會造成無法使用Flash檔案上傳功能

FancyUpload for Flash 10

2008-11-15 23:15:31 | Add Comment

Papervision3D - 五分鐘上手

Papervision3D.是一個針對Flash的開放源始碼3D引擎~ 想要在Flash中直接就產生一個3D Model~ 或是想要將3D軟體(3D Max or Maya)所建好的Model整合到Flash之中~ 那就不得不來玩玩這一套~ 最近熱的發燙滴「Papervision3D」~ 從去年一直火燒屁股滴直到今年還在燒 XDDDD~ 所以我也從去年一直觀望到現在~

今天就來給它玩玩看~ 本篇主要參考「Peter Elst » Papervision3D in 5 minutes」:

五分鐘上手Papervision3D

1. 先到「Google Code - Papervision3D」來下載並安裝「PV3DComponents_v1.5.1.mxp」這個Adobe Extension

(如果無法順利安裝的話~ 有可能是沒有裝Adobe Extension Manager或是版本較低的問題,請先裝上它吧~)

2.開啟Flash,並建立一個空白的FLA

3.接著從Components panel(Ctrl+F7)拉一個「COLLADA Scene」元件到Stage中,並給它一個instance name叫「scene3D

4.然後下載「cube.dae」這個由Peter Elst所提供的Cube Model

5.接著開啟「Window > Other Panels > PV3DPanel」,並設定Local DirectoryCollada File的位置,也就是你剛剛下載cube.dae的檔案位置。

6.開啟「File > Import > Import to Library」來匯入一張影像作為材質貼圖

7.將這張位於Library之中的影像,設定它的Linkage ID,筆者設為「ring

8.點選剛剛拉到Stage之中的「COLLADA Scene」元件,並設定它的元件參數設定,主要設定「Materials List」這個屬性值~ 點選後請將「materialName」設為剛剛那張cube.dae的名稱為「CubeMaterial」,以及「materialLinkageID」設為剛剛的「ring」

9.最後在第一個影格上加上下述程式即可

function rotateCube(evt:Event):void
{
	scene3D.collada.rotationX += 1;
	scene3D.collada.rotationY += 1;
	scene3D.collada.rotationZ += 1;
}
addEventListener(Event.ENTER_FRAME, rotateCube);

10.接著就開開心心地發佈吧~ ^^

相關產品

Sandy 3D

2008-04-04 18:04:58 | Comments (3)

跨網域請求(二) - Flash Plug-In

本文接續著「跨網域請求(一) - Cross-Domain Script Tag」來繼續實作另一種透過Flash Plug-In的作法~

這種作法最大的缺點就是需要仰賴一個Plug-In的方式~

但隨著Flash Player Statistics所統計全世界可上網的電腦有安裝Flash Player就達到98.8%~ 所以此缺點看似影響並非太大~ 端看客官們如何取捨~

下述範例「flash.php」、「crossdomain.xml」須放在同一個網域之下

flash.php

<div><?=rand()+rand()?></div>

crossdomain.xml

這個「crossdomain.xml」須放置在根目錄下

<?xml version="1.0"?>
<cross-domain-policy>
   <allow-access-from domain="*" />
</cross-domain-policy>

ActionScript 3

這裡的ActionScript範例會執行外部的資源請求,並將請求所得到的值利用ExternalInterface呼叫「callJS()」的JavaScript,有興趣的人玩玩看吧~

var loader:URLLoader = new URLLoader();
sendRequest();
function sendRequest():void
{
	var request:URLRequest = new URLRequest("http://163.17.142.204/csproxy/flash.php?"+Math.random());
	request.method = URLRequestMethod.GET;

	loader.dataFormat = URLLoaderDataFormat.TEXT;
	loader.addEventListener(Event.COMPLETE, loader_complete);
	loader.load(request);
}
function loader_complete(e:Event):void
{
	var example:RegExp = new RegExp(/<div>(.*)<\/div>/);
	var trans = example.exec(loader.data);
	ExternalInterface.call("callJS",trans[1]);	
}

JavaScript

function callJS(result)
{
	alert(result);	
}

2008-03-29 01:32:32 | Add Comment

Adobe AIR: 打造自己的SystemTray

每次當我們將電腦一開機,進入到桌面系統之後~ 隨之而來的就是載入一連串的常駐程式~ 或是開機自動執行的相關程式~

而這些程式有些會出現System Tray Icon在右下角的工具列中~

下述程式就是要處理這樣的動作滴~ 不過我改了一點小東西~

有裝過ApacheTomcat Server嗎?它們右下角的System Tray Icon會隨著啟動或關閉伺服器而有所變化~ 底下程式可以為你做到~ 玩玩看吧~ ^^

P.S. 請準備16x16、128x128的圖示

SystemTray.as

/**
 * Date: 2008-03-11
 * Shen (http://blog.ring.idv.tw)
 **/
package 
{
	import flash.desktop.*;
	import flash.events.*;
	import flash.display.*;
	import flash.net.*;
	
	public class SystemTray
	{
		private static var _instance:SystemTray;
		public static function getInstance():SystemTray
		{
			if(SystemTray._instance == null)
			{
				SystemTray._instance = new SystemTray(new PrivateClass());
			}
			return SystemTray._instance;
		}
		public function SystemTray(pvt:PrivateClass)
		{
			trace("SystemTray initialized!");
			NativeApplication.nativeApplication.autoExit = false;
			var icon:Loader = new Loader();
			var iconMenu:NativeMenu = new NativeMenu();
			var exitCommand:NativeMenuItem = iconMenu.addItem(new NativeMenuItem("Exit"));
			exitCommand.addEventListener(Event.SELECT, Exit);

			if (NativeApplication.supportsSystemTrayIcon)
			{
				icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete);
				icon.load(new URLRequest("icons/StopWatchIcon16.png"));

				var systray:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
				systray.tooltip = "CSProxy";
				systray.menu = iconMenu;
			}

			if (NativeApplication.supportsDockIcon)
			{
				icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete);
				icon.load(new URLRequest("icons/StopWatchIcon128.png"));
				var dock:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
				dock.menu = iconMenu;
			}
		}
		private function iconLoadComplete(event:Event):void
		{
			NativeApplication.nativeApplication.icon.bitmaps = [event.target.content.bitmapData];
		}
		public function onConnected()
		{
			var icon:Loader = new Loader();
			icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete);
			
			if (NativeApplication.supportsSystemTrayIcon)
				icon.load(new URLRequest("icons/logo16.jpg"));
				
			if (NativeApplication.supportsDockIcon)
				icon.load(new URLRequest("icons/logo128.jpg"));	
		}
		public function onDisconnected()
		{
			var icon:Loader = new Loader();
			icon.contentLoaderInfo.addEventListener(Event.COMPLETE,iconLoadComplete);
			
			if (NativeApplication.supportsSystemTrayIcon)
				icon.load(new URLRequest("icons/StopWatchIcon16.png"));
				
			if (NativeApplication.supportsDockIcon)
				icon.load(new URLRequest("icons/StopWatchIcon128.png"));	
		}
		private function Exit(event:Event):void
		{
			NativeApplication.nativeApplication.icon.bitmaps = [];
			NativeApplication.nativeApplication.exit();
		}
	}
}
class PrivateClass
{
	public function PrivateClass( )
	{
		trace("PrivateClass called");
	}
}

Flash

var singleton:SystemTray = SystemTray.getInstance();
//改變啟動圖示
singleton.onConnected();
//改變關閉圖示
singleton.onDisconnected();

相關資源

Working with the dock and the system tray

Flash LiveDocs:Taskbar icons

2008-03-11 15:43:36 | Comments (4)

Next Posts~:::~Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment