久しく忘れてた
フラッシュアニメーションを作ってたときに
いろいろオーサリング補助用のコマンドを書いて
ついでにXULでUIをつけてたんですが
結局アニメがそれより先にできたので
ほったらかしになってたJSFL
記憶を掘り起こしながら続きをやっていきたいとおもいます
■本体のJSFL
/*
Gravity=prompt("落下",32)
Round=prompt("回転",32)
Spray=prompt("拡散",32)
Friction=prompt("減速",32)
Length=prompt("長さ",64)
HitTime=prompt("落下衝突回数",1)
Field=prompt("落下衝突座標",200)
Resilience=prompt("落下衝突減速",32)
*/
//crush(32,32,32,32,64,32,200,32)
function crush(Gravity,Round,Spray,BlowDst,BlowDrc,Jam,Friction,Length,HitTime,Field,Resilience){
gravity=Gravity/16
round=Round
spray=Spray
blowX=Math.sin(BlowDrc*Math.PI/180)*BlowDst
blowY=-Math.cos(BlowDrc*Math.PI/180)*BlowDst
jam=Jam/256
friction=(512-Friction)/512
field=parseFloat(Field)
resilience=(512-Resilience)/512
MClst=new Array()
//[速度X、速度Y、回転速度、落下衝突残回数]
dom=fl.getDocumentDOM()
tml=dom.getTimeline()
lyr=tml.layers[tml.currentLayer]
frm=tml.layers[tml.currentLayer].frames[tml.currentFrame]
//for(i=0;i for(i=0;i MClst.push([])
var n1=1+(Math.random()*jam*2-jam)
var n2=1+(Math.random()*jam*2-jam)
var n3=1+(Math.random()*jam*2-jam)
var n4=1+(Math.random()*jam*2-jam)
MClst[i].push((frm.elements[i].x*spray/32*n1+blowX*n2))
MClst[i].push((frm.elements[i].y*spray/32*n3+blowY*n4))
MClst[i].push(Math.random()*round*2-round)
MClst[i].push(HitTime)
//dom.library.addItemToDocument({x:0,y:0})
}
for(i=0;i tml.insertFrames(1)
tml.setSelectedFrames(tml.currentFrame+1,tml.currentFrame+1)
tml.insertKeyframe(tml.currentFrame)
frm=tml.layers[tml.currentLayer].frames[tml.currentFrame]
for(var j=0;j frm.elements[j].x+=MClst[j][0]*frm.elements[j].scaleX
frm.elements[j].y+=MClst[j][1]*frm.elements[j].scaleY
frm.elements[j].rotation+=MClst[j][2]
if(MClst[j][3]>0&&frm.elements[j].y>field*frm.elements[j].scaleY){
frm.elements[j].y=field*frm.elements[j].scaleY
MClst[j][1]*=-resilience
MClst[j][3]-=1
}
frm.elements[j].rotation+=MClst[j][2]
//try{frm.elements[j].firstFrame=i}catch(e){}
MClst[j][0]*=friction
MClst[j][1]*=friction
MClst[j][2]*=friction
MClst[j][1]+=gravity
}
}
}
このJSFLにはスライダで数値設定できるUIがもうついてるんですが
promptで手入力してたころの名残が頭に残ってます
■xul
<?xml version="1.0" encoding="UTF-8"?>
<dialog id="nekonote_ui" title="猫の手">
<flash id="nekonote_ui" width="300" height="400" src="dialog.swf" />
</dialog>
XULっていってもただUIのswfを表示する窓を提供するのみ
『データはいない・・ズールもいない』
■swf
//コマンドのURIと実行関数
var com:String="crush.jsfl"
var func:String="crush"
//UIから引数に代入
function getParam(){
var rtn=[]
for(var i=1;i<=11;i++){
rtn.push(prmMC["prm"+i].value)
}
return rtn.join('","')
}
stop()
okBtn.addEventListener(MouseEvent.CLICK,OK)
cancelBtn.addEventListener(MouseEvent.CLICK,cancel)
function OK(e:MouseEvent):void{
var param=getParam()
trace(param)
var path='fl.scriptURI.replace(".jsfl","/'+com+'")'
MMExecute('fl.runScript('+path+',"'+func+'","'+param+'")')//
MMExecute("fl.xmlui.accept()")
}
function cancel(e:MouseEvent):void{
MMExecute("fl.xmlui.cancel();");
}
prmMCの中にあるprm1~11と言う名前の
スライダの値を引数にして先のJSFLの関数を実行させるSWF
■UI呼び出しJSFL
var path = fl.scriptURI .replace(".jsfl","/dialog.xml");
var panel = fl.getDocumentDOM().xmlPanel(path);
if (panel.dismiss == "accept") {
} else {
}
なんとなくしか意味思い出せないままコピペして載せてます
Camクラス
ちょっと軽く便利なクラスを作りました
単独で使うのではなく補助的なクラスです
コンストラクタで指定したMCを
常に画面いっぱいにフォーカスするように
親のMCの変換マトリックスをいじくるクラス
ただそれだけです
フラッシュアニメ制作のお供にどうぞ
単独で使うのではなく補助的なクラスです
コンストラクタで指定したMCを
常に画面いっぱいにフォーカスするように
親のMCの変換マトリックスをいじくるクラス
ただそれだけです
フラッシュアニメ制作のお供にどうぞ
/*
窓として指定されたMCを窓として
親のMCが見えるように
親のMCの座標を変換するクラスです
■パブリックプロパティ
■パブリックメソッド
*/
package{
import flash.display.*
import flash.events.*
import flash.geom.*
public class Cam{
public function Cam(cam:DisplayObject){
if(!(cam.parent is MovieClip))return;
cam.visible=false
cam.addEventListener(Event.ENTER_FRAME,frameTick)
cam.addEventListener(Event.ADDED_TO_STAGE,function(e){cam.addEventListener(Event.ENTER_FRAME,frameTick)})
cam.addEventListener(Event.REMOVED_FROM_STAGE,function(e){cam.removeEventListener(Event.ENTER_FRAME,frameTick)})
var rct=cam.getRect(cam)
var tgt=cam.parent
var stg:Stage=cam.stage
function frameTick(e){
var mtx:Matrix=new Matrix()
var scl=stg.stageWidth/(rct.width*cam.scaleX)
mtx.scale(scl,scl)
mtx.rotate(-cam.rotation/180*Math.PI)
var vec:Point=mtx.transformPoint(new Point(cam.x,cam.y))
vec.offset(rct.x*scl,rct.y*scl)
mtx.translate(-vec.x,-vec.y)
tgt.transform.matrix=mtx
}
}
}
}
