おいしいAS3 -37ページ目

猫の手

おいしいAS3


先のコードにも出てきてるんですが
作ったJSFLはまとめて猫の手って
いって作ってます

UIの付いてないJSFLのファイルも含めると
十数個のJSFLのファイルがあって
それらを一つのUIから
選択して実行できるようにしよう
と思ってたのをほったらかしにしてたカンジです

久しく忘れてた



フラッシュアニメーションを作ってたときに
いろいろオーサリング補助用のコマンドを書いて
ついでに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の座標を変換するクラスです

■パブリックプロパティ

■パブリックメソッド
*/

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
}
}
}
}