Tag Archive for 'actionscript2'

26AprExternalInterface - ActionScript/JavaScriptのオブジェクトの受け渡し

ExternalInterfaceでActionScriptとJavaScript間で相互にObjectを渡す。

Browser

  • parameter

    value

ソースコードは以下の通り。

  1. <div id="interface">
  2.     <p>Browser</p>
  3.     <input type="button" name="" value="sendObject()" onclick="sendObject();" id="send" />
  4.     <input type="button" name="" value="clearTextField()" onclick="clearTextField();" id="send" />
  5.     <p id="debugText"></p>
  6.     <ul>
  7.         <li><p class="param">parameter</p><p class="value">value</p><div class="clear"></div></li>
  8.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  9.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  10.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  11.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  12.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  13.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  14.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  15.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  16.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  17.         <li><input type="text" name="param" value="" class="param" /><input type="text" name="value" value="" class="value" /></li>
  18.     </ul>
  19. </div>
  1. // send Object
  2. function sendObject() {
  3.     debugText("send Object to swf(ActionScript)");
  4.     getEmbedElementByName('externalSWF').loadObject(getObject());
  5. }
  6.  
  7. function getObject(name) {
  8.     var obj = new Object();
  9.     var arrParam = document.getElementsByName('param');
  10.     var arrValue = document.getElementsByName('value');
  11.     var param, value;
  12.    
  13.     for (var i = 0; i <arrParam.length; i++) {
  14.         param = arrParam[i].value;
  15.         value = arrValue[i].value;
  16.        
  17.         obj[param] = value;
  18.     }
  19.    
  20.     return obj;
  21. }
  22.  
  23. // load Object
  24. function loadObject(obj) {
  25.     clearTextField();
  26.    
  27.     debugText("load Object from swf(ActionScript)");
  28.     var arrParam = document.getElementsByName('param');
  29.     var arrValue = document.getElementsByName('value');
  30.     var i = 0;
  31.    
  32.     for (var param in obj) {
  33.         arrParam[i].value = param;
  34.         arrValue[i].value = obj[param];
  35.         i++;
  36.     }
  37. }
  38.  
  39. // clear Input Text
  40. function clearTextField() {
  41.     debugText("clear text field");
  42.     var arrParam = document.getElementsByName('param');
  43.     var arrValue = document.getElementsByName('value');
  44.    
  45.     for (var i = 0; i <arrParam.length; i++) {
  46.         arrParam[i].value = '';
  47.         arrValue[i].value = '';
  48.     }
  49. }
  50.  
  51. // debugText
  52. function debugText(str) {
  53.     var element = document.getElementById('debugText');
  54.     removeChildren(element);
  55.     element.appendChild(document.createTextNode(str));
  56. }
  57.  
  58. // common
  59. function getEmbedElementByName(name) {
  60.     return (/*@cc_on!@*/false)? window[name]: document[name];
  61. }
  62.  
  63. function removeChildren(element) {
  64.     while (element.hasChildNodes()) element.removeChild(element.firstChild);
  65. }
  1. import flash.external.ExternalInterface;
  2.  
  3.  
  4. init();
  5.  
  6.  
  7. function init() {
  8.     setupEI();
  9.     setupButton();
  10.     setupTabIndex();
  11. }
  12.  
  13. // ExternalInterface
  14. function setupEI() {
  15.     var isAvailable = ExternalInterface.available;
  16.     if (isAvailable) {
  17.         debug("ExternalInterface is available");
  18.         addCallbackEI("loadObject", null, loadObject);
  19.     } else {
  20.         debug("ExternalInterface is not available");
  21.     }
  22. }
  23.  
  24. function addCallbackEI(strMethodName_js, objInstance_as, fncMethod_as) {
  25.     ExternalInterface.addCallback(strMethodName_js, objInstance_as, fncMethod_as);
  26. }
  27.  
  28. function callJS(strMethodName_js, objParameter_as) {
  29.     ExternalInterface.call(strMethodName_js, objParameter_as);
  30. }
  31.  
  32. // Button
  33. function setupButton() {
  34.     mcSendObject.onRelease = function() {
  35.         sendObject();
  36.     };
  37.     mcSendObject.onReleaseOutside = mcSendObject.onRollOut;
  38.    
  39.     mcClearTextField.onRelease = function() {
  40.         clearTextField();
  41.     };
  42.     mcClearTextField.onReleaseOutside = mcClearTextField.onRollOut;
  43. }
  44.  
  45. // Tab Index
  46. function setupTabIndex() {
  47.     mcSendObject.tabIndex = 1;
  48.     mcClearTextField.tabIndex = 2;
  49.     txtDebug.tabEnabled = false;
  50.    
  51.     var txtParam, txtValue;
  52.     for (var i = 0; i <10; i++) {
  53.         txtParam = this["txtParam_" + i];
  54.         txtValue = this["txtValue_" + i];
  55.        
  56.         txtParam.tabIndex = 3 + i * 2;
  57.         txtValue.tabIndex = 4 + i * 2;
  58.     }
  59. }
  60.  
  61. // send Ojbect
  62. function sendObject() {
  63.     debug("send Object to browser(JavaScript)");
  64.     callJS("loadObject", getObject());
  65. }
  66.  
  67. function getObject() {
  68.     var obj = new Object();
  69.     var param, value;
  70.    
  71.     for (var i:Number = 0; i <10; i++) {
  72.         param = this["txtParam_" + i].text;
  73.         value = this["txtValue_" + i].text;
  74.        
  75.         obj[param] = value;
  76.     }
  77.    
  78.     return obj;
  79. }
  80.  
  81. // load Object
  82. function loadObject(obj) {
  83.     clearTextField();
  84.    
  85.     debug("load Object from browser(JavaScript)");
  86.     setObject(obj);
  87. }
  88.  
  89. function setObject(obj) {
  90.     var i = 0;
  91.     var txtParam, txtValue;
  92.    
  93.     for (var param in obj) {
  94.         txtParam = this["txtParam_" + i];
  95.         txtValue = this["txtValue_" + i];
  96.        
  97.         txtParam.text = param;
  98.         txtValue.text = obj[param];
  99.         i++;
  100.     }
  101. }
  102.  
  103. // clear TextField
  104. function clearTextField() {
  105.     debug("clear text field");
  106.    
  107.     var txtParam, txtValue;
  108.     for (var i = 0; i <10; i++) {
  109.         txtParam = this["txtParam_" + i];
  110.         txtValue = this["txtValue_" + i];
  111.        
  112.         txtParam.text = "";
  113.         txtValue.text = "";
  114.     }
  115. }
  116.  
  117. // debug
  118. function debug(str) {
  119.     txtDebug.text = str;
  120. }
JavaScript
//sendObject : ObjectをSWFに渡す。
//loadObject : ObjectがSWFから渡される。
ActionScript
//ExternalInterface : Browserから呼び出し可能なActionScriptのメソッドを登録する。
//sendObject : ObjectをBrowserに渡す。
//loadObject : ObjectがBrowserから渡される。

これ以外のメソッドはActionScript/JavaScript共にオブジェクト生成用のテキストフィールドのセットアップに使ってるだけで、ExternalInterfaceには関係ない。

28MarTweenerの最新バージョン

開発中のTweenerの最新バージョンにはFilterの機能が付いているらしい。
リポジトリのURLとかFilterのレビューしてる方のURLとかをメモっとく。

22JanActionScriptのキーワード達を列挙

dp.SyntaxHighlighterでActionScriptのコードをハイライトする際に、ActionScriptのキーワード達が列挙されているソースが見つからなかったのでまとめました。

言語エレメントには、グローバル定数・演算子・ステートメント、キーワード、ディレクティブ・特殊な型の単語が格納されています。
コアクラス・グローバル関数には、コアクラスに属するメソッド・プロパティの単語が格納されています。

Flashをお持ちの方にさらに簡易な説明を付け加えておきます。 Flashで「メニュー>編集>環境設定>ActionScript>シンタックスカラー」の、「キーワード」が言語エレメントに相当し、「識別子」がコアクラス・グローバル関数に相当します。

ダウンロード
追記

08/02/04 dp.SyntaxHighlighterからiG:Syntax Hiliterへ移行のため、サポート停止。

22Jandp.SyntaxHighlighterでActionScript 2.0/3.0のコードをハイライトする

dp.SyntaxHighlighterをActionScript 2.0 or 3.0 のコードに対応する為のプラグイン公開。

このjsの使用方法は、dp.SyntaxHighlighterでActionScript 2.0のコードをハイライトするを参照。 (ActionScript3のコードの場合、classを"as3"か"ascript3"か"actionscript3"と記述。)
dp.SyntaxHighlighterの詳しい使い方はMovable Type備考録様が詳しく解説してらっしゃいます。

AS3表示サンプル

import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
// 円を描画し、表示リストに追加する。
var sprCircle:Sprite = new Sprite();
sprCircle.graphics.beginFill(0x990000);
sprCircle.graphics.drawCircle(50, 50, 50);
sprCircle.graphics.endFill();
addChild(sprCircle);
function fadeCircle(event:Event):void {
	sprCircle.alpha -= .05;
	
	if (sprCircle.alpha <= 0) {
		sprCircle.removeEventListener(Event.ENTER_FRAME, fadeCircle);
	}
}
function startAnimation(event:MouseEvent):void {
	sprCircle.addEventListener(Event.ENTER_FRAME, fadeCircle);
}
sprCircle.addEventListener(MouseEvent.CLICK, startAnimation);
特徴
  • ActionScriptのバージョンによってキーワードを差別化しています。
  • 「言語エレメント」と「コアクラス・グローバル関数」を色分けできます。
注意事項
  • dp.SyntaxHighlighter本体は付属していないので、syntaxhighlighter - Google CodeからDLして下さい。
  • 他の言語セットと比べてすごく重いです。ソース覗いていらないクラスやメソッドは削除してから使うのも良いかも。
  • functionとFunctionなど、本来は色が違うはずなのに同じ色になってしまうのは、dp.SyntaxHighlighterの仕様のようです。その場合「言語エレメント」に属するものを優先しています。
  • 「Flash上では色分けされるのに、コレだと色分けされないキーワードがある。」っていう場合は、教えてください。
  • 「他の言語セットだと大丈夫なのに、コレ使うと表示がおかしい。」っていう場合は、教えてください。
  • 「コレ使ったらぶっ壊れたんすけど・・・」っていう場合は、おもむろにサーバーから削除して下さい。
ダウンロード
追記
08/02/04 dp.SyntaxHighlighterからiG:Syntax Hiliterへ移行のため、ハイライト実行を停止。
08/04/02 テストで再実行、ただしCSSはほぼデフォルト状態。
08/10/20 また停止

17Jandp.SyntaxHighlighterでActionScript 2.0のコードをハイライトする

dp.SyntaxHighlighterをActionScript 2.0のコードに対応する為のプラグインを作ったので、公開。

他の言語のjsと同様head内で読み込む。 ソースコードのをpreで囲み、nameを"code"、classを"as2"か"ascript2"か"actionscript2"と記述。

<head>
	<script type="text/javascript" charset="utf-8" src="shCore.js"></script>
	<script type="text/javascript" charset="utf-8" src="ActionScript2.js"></script>
</head>
<body>
<pre name="code" class="as2">
/**
 * ActionScript2.js for dp.SyntaxHighlighter
 */
function test():Void {
	var mc:MovieClip = new MovieClip();
	var str:String = "test";
	
	mc._visible = false;
}
</pre>
<body>

SyntaxHighlighter.cssにデフォルトでclass="func"のカラー設定がないので、cssに以下を追加。

.dp-highlighter .func {
	color: #0099CC;
	font-weight: bold;
	background-color: inherit;
}

下のように表示される。

/**
 * ActionScript2.js for dp.SyntaxHighlighter
 */
function test():Void {
	var mc:MovieClip = new MovieClip();
	var str:String = "test";
	
	mc._visible = false;
}
ダウンロード

ActionScript2.js

追記

08/01/22 バージョンアップしました。(dp.SyntaxHighlighterでActionScriptのコードをハイライトする)

  • ActionScript 2.0のfuncsを追加
  • ActionScript 3.0に対応するActionScript3.jsを追加
  • ActionScript 2.0/3.0のCompressedバージョンを追加
08/02/04 dp.SyntaxHighlighterからiG:Syntax Hiliterへ移行のため、ハイライト実行を停止。
08/04/02 テストで再実行、ただしCSSはほぼデフォルト状態。
08/10/20 また停止



Return to page top