ASOK?
ActionScriptでFlashつくるよ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
page top
中心座標(a,b)、x軸方向の半径をrx、y軸方向の半径をryとした場合、楕円軌道は次の式で求められる。

x = a + rx * cos θ
y = b + ry * sin θ

Flash OOP4AS3 p.053より。
スポンサーサイト
page top

htmlに埋め込んだWindows MediaをJSでコントロール。IEでしかできないと思われがちだが、(怪しげな)アドオンをインストールすればFirefoxでも動く。

Mozilla Japan - Firefox 用アドオン - プラグイン

ほとんどIEと同じ仕様だが、微妙に違う箇所が。違いについてのメモ。

Windows Medaのhtml記述

通常Firefoxなら<embed>で記述するが、<object>で記述しないとJSでコントロールできない。
<object>の書き方は基本IEと同じだが、classid属性を記述するとFirefoxで表示されないので、classid属性は省略する。

IE
<object src="all.asx" id="wmp" type="application/x-ms-wmp" width="320" height="60" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6">
Firefox
<object src="all.asx" id="wmp" type="application/x-ms-wmp" width="320" height="60" >

イベント

<script for形式の記述も動作するが、一部Firefoxでは動かない。

外部jsファイル

動く

<script type="text/javascript" for="wmp" event="playStateChange(newState)" >
onPlayStateChange(newState);
</script>

動かない

<script type="text/javascript" for="wmp" event="PlayStateChange(e)" src="playstatechange.js"></script>

上記のように外部ファイル化すると動かない。外部ファイル化したい場合は、jsファイル内でfunction定義してそれを呼ぶようにする。

<script type="text/javascript" src="playstatechange.js"></script>
<script type="text/javascript" for="wmp" event="playStateChange(newState)" >
onPlayStateChange(newState);
</script>

こんな感じで。

for="window"

for="window"イベントは動かないので、ロード、アンロードイベントにはaddEventListenerを使う。

page top

とりあえず自分ルールを決めてみる。

運用ルール

ブランチを切るときは、タグをつけて、そこから切る。

命名規則

[キーワード]-[バージョン]
REL-2008_10_28
など

キーワード
REL
リリース版
EXP
実験用
STAB
安定版(使うかな?)
バージョン

区別のため、区切り記号を変える。日付はアンダーバー、バージョンはピリオド。

日付
yyyy_mm_dd
バージョン番号
n.n.n.n

一人だとバージョン番号なんてつけないので、とりあえず日付でやってみる。

page top

TextFieldをクリックしたら全選択という動作がなかなかできず。

TextFieldを全選択自体は、

// target = 対象TextField
if(Selection.getFocus()!=target){
	Selection.setFocus(target);
}
Selection.setSelection(target.length,0);
というコードでできるが、タイミングのせいでうまくいかない。

上記コードをonSetFocusイベントで実行

Selection.getFocus()は対象TextFieldになっているが、Selection.setSelection()を実行してもちゃんと動かない。
Selection.getBeginIndex()、getEndIndex()とも-1になっている。

onSetFocusイベントから1フレーム遅延で実行

Selection.setSelection()は機能するが、マウスアップイベントが効いてしまうらしく、全選択にならない。

結局以下の方法で実装。

  1. TextField.onSetFocusでMouse.addListener()する。
  2. Mouse.onMouseUpイベントから1フレーム遅延させて、Selection.setSelection(target.length,0);を実行。

まどろっこしい!
きっともっとまともな実装があるはず。誰か教えてください…

page top
ひさびさにはまったメモ。

「クラス名のコンフリクト:~.as: 行 ~:このクラスの名前 '~' は、ロードされた別のクラスの名前 '~' とコンフリクトします。」

というエラーが出て、FLAがコンパイルできない。
しらべてもFLA、ASファイルに問題はない。

調べてみるとわりと有名な問題らしい。
下記のページがまとまってて参考になった。

ActionScriptのコンフリクトエラー - blog.katsuma.tv

Flashの内部的な問題なのだが、原因はファイルのタイムスタンプまわりにあるみたい。今回はネットワーク上のデータを直接開いていて、なおかつ相手の時計がずれていたという、上記ページの事象とどんぴしゃ。

ローカルにコピーしてから、
ASOファイルを削除
ASファイル内のimport文を全てコメントアウトし、コンパイル
コメントアウトを元に戻し、再度コンパイル
であっさり直った。

はあ疲れた。
page top

ミニマムサンプル

// 準備
import com.mosesSupposes.fuse.*;
ZigoEngine.register(PennerEasing, Fuse);
// アニメーション
var fuse:Fuse = new Fuse();
fuse.push({
	target:maru1, _y:"-100", duration:0.5, easing:"easeInCubic"
});
fuse.start();

もうちょっと長いサンプル

// 準備
import com.mosesSupposes.fuse.*;
ZigoEngine.register(PennerEasing, Fuse);
var root:MovieClip = this;
// リスナ
var listener:Object = new Object();
listener.complete = function(mc:MovieClip):Void{
	trace("完了");
	trace("mc="+mc);
};
// アニメーション
var fuse:Fuse = new Fuse();
fuse.push({
	target:maru1, _y:"-100", duration:0.5, easing:"easeInCubic"
	, scope:listener, func:"complete", args:root
});
fuse.start();

Fuseインスタンスのモーションを全て削除

fuse.splice(0, fuse.length);
//fuse.stop();	//spliceで停止するので必要ない
page top
Copyright © 2005 ASOK?. all rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。