ParaFlaユーザのための、コピペで使えるActionScriptサンプル集。
説明は、ParaFlaの機能を理解している前提で書いてあるので、
よく意味が分からない人は、もっとParaFlaに慣れてから使ってみよう。
1.動かしたいものをスプライトにしておく
2.親イベントリストに目的のスプライトを追加
3.2のスプライトのプロパティ→スクリプトを編集
4.そこに以下をコピペ
onClipEvent(load){
cx = @; //中心X座標
cy = A; //中心Y座標
radius = B; //半径
r_d = C; //半径の増加量
speed = D; //1フレームあたりの回転角度
deg = E; //初期の角度
}
-
onClipEvent(enterFrame){
radian = deg / 180 * Math.PI;
this._x = radius * Math.cos(radian) + cx;
this._y = radius * Math.sin(radian) + cy;
deg += speed;
radius += r_d;
if(radius < 0){radius = 0;}
}
DEともに単位は角度(°)。
逆回りにしたければ、Dの値に-(マイナス)をつける。
1フレームごとに、Cの量だけ回転半径が変化する。
広がるうずまきならプラス、逆ならマイナスの値にする。
もちろん、半径を変えたくなければ0にする。
1.動かしたいものをスプライトにしておく(軸が(0,0)になるように)
2.スプライトをさらにひとつ作り、それに1のスプライトを追加
3.2で追加した1のスプライトのプロパティを開く
4.「インスタンス名」に「a0」と入れ、「スクリプトを編集」
5.そこに以下をコピペ(だいぶ長い)
onClipEvent(load){
//設定==========================
y1a = @; //開始y座標 (1 = 1px)
y1b = null;
y2a = A; //終了y座標 (1 = 1px)
y2b = null;
x1a = B; //開始x座標 (1 = 1px)
x1b = null;
x2a = C; //x座標のズレ (1 = 1px)
x2b = null;
widtha = D; //揺れ幅 (1 = 1px)
widthb = null;
xspda = E; //揺れ速度 (1 = 0.01θ/frame)
xspdb = null;
yspda = F; //下降/上昇速度 (1 = 0.1px/frame)
yspdb = null;
scalea = G; //大きさ (1 = 1%)
scaleb = null;
alphaa = H; //不透明度 (1 = 1%)
alphab = null;
rota = I; //回転速度 (1 = 0.1°/frame)
rotb = null;
dupeca = J; //発生間隔 (1 = 1frame)
dupecb = null;
remove = K; //最後に [0:即座に消す / 1:数フレーム後に消す / 2:消さない]
remcount = L; //↑が[1]の場合のフレーム数 (1 = 1frame)
objout = M; //消え方 [0:普通に消す / 1:透明度を下げて消す / 2:縮小して消す / 3:1と2]
outalp = N; //↑が[1]の場合の透明度低下量 (1 = 1%/frame)
outscl = O; //↑が[2]の場合の拡縮率 (1 = 1%/frame ... +:拡大 -:縮小)
//以下数値算出===================
if(x1b == null || x1a == x1b){
x1 = x1a;
}else{
x1 = Math.floor(Math.random() * (x1b - x1a +1)) + x1a;}
if(x2b == null || x2a == x2b){
x2 = x2a;
}else{
x2 = Math.floor(Math.random() * (x2b - x2a +1)) + x2a;}
if(y1b == null || y1a == y1b){
y1 = y1a;
}else{
y1 = Math.floor(Math.random() * (y1b - y1a +1)) + y1a;}
if(y2b == null || y2a == y2b){
y2 = y2a;
}else{
y2 = Math.floor(Math.random() * (y2b - y2a +1)) + y2a;}
if(widthb == null || widtha == widthb){
width = widtha;
}else{
width = Math.floor(Math.random() * (widthb - widtha +1)) + widtha;}
if(xspdb == null || xspda == xspdb){
xspd = xspda / 100;
}else{
xspd = (Math.floor(Math.random() * (xspdb - xspda +1)) + xspda) / 100;}
if(yspdb == null || yspda == yspdb){
yspd = yspda / 10;
}else{
yspd = (Math.floor(Math.random() * (yspdb - yspda +1)) + yspda) / 10;}
if(scaleb == null || scalea == scaleb){
_xscale = scalea;
_yscale = scalea;
}else{
_xscale = Math.floor(Math.random() * (scaleb - scalea +1)) + scalea;
_yscale = _xscale;}
if(alphab == null || alphaa == alphab){
_alpha = alphaa;
}else{
_alpha = Math.floor(Math.random() * (alphab - alphaa +1)) + alphaa;}
if(rotb == null || rota == rotb){
rot = rota / 10;
}else{
rot = (Math.floor(Math.random() * (rotb - rota +1)) + rota) / 10;}
if(dupecb == null || dupeca == dupecb){
dupec = dupeca;
}else{
dupec = Math.floor(Math.random() * (dupecb - dupeca +1)) + dupeca;}
theta = Math.floor(Math.random() * (Math.PI * 200)) / 100;
dx = x2 / ((y2 - y1) / yspd);
count = 0;
flag = 0;
stp = 0;
_y = y1;
zure = 0;
if(!_parent.num){_parent.num = 0;}
}
-
onClipEvent(enterFrame){
if(stp == 0){
_x = Math.sin(theta) * width + x1 + zure;
_y += yspd;
_rotation += rot;
theta += xspd;
zure += dx;
if(flag == 0){
count++;}
if(count >= dupec && flag != 1){
_parent.num++;
if(_parent.num > 1000000000){_parent.num = 1;}
flag = 1;
duplicateMovieClip(_parent.a0,"a"+_parent.num,_parent.num);}
if(y1 > y2){
if(_y <= y2){stp = 1;}
}else if(y1 < y2){
if(_y >= y2){stp = 1;}
}
}else if(stp == 1){
if(remove == 0){
stp = 2;
}else if(remove == 1){
remcount--;
if(remcount <= 0){
stop();
stp = 2;}
}else if(remove == 2){
stop();
stp = 5;
}
}else if(stp == 2){
if(objout == 0){
stp = 5;
this.removeMovieClip();
}else if(objout == 1){
this._alpha -= outalp;
if(_alpha <= 0){
stp = 5;
this.removeMovieClip();}
}else if(objout == 2){
this._xscale += outscl;
this._yscale += outscl;
if(_xscale <= 0 || _yscale <= 0){
stp = 5;
this.removeMovieClip();}
}else if(objout == 3){
this._alpha -= outalp;
this._xscale += outscl;
this._yscale += outscl;
if(_alpha <= 0 || _xscale <= 0){
stp = 5;
this.removeMovieClip();}
}
}}
配置するときは、2で作ったスプライトを配置する。
1のスプライトをそのまま使うと、後で消せなくなるので注意。
@〜Jの、それぞれのすぐ下に「null」という部分がある。
@〜Jは丸数字の行とその下のnullの行、ふたつでセットになっている。
この「null」の部分は、各値にランダム性を与える場合に書き換える。
Bを例にすると、開始x座標を0〜300の間でランダムにセットしたい場合は、
x1a = 0;
x1b = 300;
というように、一行目に最小値、二行目に最大値を入力すること。
最小値と最大値が逆になると、うまく動かない場合がある。と思う。
また、ランダムではなく固定したい場合は、各値の二行目の数値を「0」ではなく
必ず「null」に戻すか、一行目と同じ数値にしておくこと。
「0」と「null」は似ているが完全に別物なので注意。
各値は、二行目をnullにした状態で実際にいろいろ試すのが早いと思う。
それかサンプルを数値を変えながらいじってみる。
全ての数値は整数で指定すること。後ろの()に目安があるんで参考に。
オブジェクトはAで設定した終了y座標に到達すると自身を抹消するため、
オブジェクトが消えてからでは次のオブジェクトを生成できなくなる。
消えてしまう前に次を生成できるように、A、F、Jを調整すること。
1.動かしたいものをスプライトにしておく
2.1のスプライトをイベントに追加→プロパティ
3.XY座標は0のまま(スクリプト内で設定する)、スクリプトを編集
4.そこに以下をコピペ
onClipEvent(load){
x = @; //中心となるXY座標
y = A;
bure1 = B; //初期のブレ範囲
bure2 = C; //これ以上or以下になったらブレ範囲を固定
bured = D; //ブレ範囲の増減量
burespd = E; //速さ 何フレームごとに位置を変えるか
count = 0;
_x = x;
_y = y;
bure = bure1;
}
-
onClipEvent(enterFrame){
if(++count >= burespd){
_x = Math.floor(Math.random() * bure) + x - (bure/2);
_y = Math.floor(Math.random() * bure) + y - (bure/2);
if(bure1 > bure2){
if(bure > bure2){
bure += bured;
}
}else if(bure1 < bure2){
if(bure < bure2){
bure += bured;
}
}
count = 0;
}
}
座標をいじるスクリプトなので、ParaFla側の座標指定に注意。
決められた範囲内(ブレ範囲)で、ランダムに座標を取る。
スプライトの中身を編集すれば、ちょっと変わった表現も可。
このスプライト自体をスプライトにしてもいいかもね
B>Cのときに、Dが「+」の値だったりすると意味がないんで
Dはそのへんを考えて、必要ならば「-」をつけること。
1.同期させたいスプライトのプロパティを開く
2.スクリプトを編集
3.そこに以下をコピペ
onClipEvent(load){
thisframe = _parent._currentframe-1;
}
-
onClipEvent(enterFrame){
goframe = (_parent._currentframe-thisframe)%_totalframes;
if(goframe == 0){goframe = _totalframes;}
gotoAndStop(goframe);
}
ムービー自体に特別な効果をつけるものではない。
通常、親イベントを停止させてもスプライトは再生され続けるが、
製作中に、親イベントとスプライトイベントのタイミングを、プレビューで細かくチェックしたい時がある。
これを目的のスプライトに記述すると、擬似的に親イベントと同期再生し、細かい確認ができる。
あくまで製作中の処置とし、完成したら消しておくのが望ましい。
また、ルートイベントに設置したスプライトではきちんと動くと思うが、
入れ子にしたスプライト等に対しては、同期を保証しない。
あとラベルジャンプとかの処理が入ってると、たぶん無理。
1.ボタンにしたいもの(画像/テキスト)を用意
2.新規にスプライトを作成、そのスプライトを編集
3.1のボタン用オブジェクトをイベントに追加、初期状態の配置を作る
4.済んだら、アクションを挿入:停止
5.アクションを挿入:ラベル設定「over」→アクションを挿入:停止
6.アクションを挿入:ラベル設定「out」→アクションを挿入:停止
7.アクションを挿入:ラベル設定「press」→アクションを挿入:停止
8.アクションを挿入:ラベル設定「release」→アクションを挿入:停止
9.メインイベントへ移動、2のスプライトをイベントに追加→プロパティ
10.固定画面にして、[スクリプトを編集]
11.そこに以下をコピペ
on(rollOver){gotoAndPlay("over");}
-
on(rollOut,ReleaseOutside){gotoAndPlay("out");}
-
on(Press){gotoAndPlay("press");}
-
on(Release){gotoAndPlay("release");}
スプライト内のイベントについては、
ラベル「over」〜「停止」の間に、カーソルがボタンに重なった時の動作を、
ラベル「out」〜「停止」の間に、カーソルがボタンから離れた時の動作を、
ラベル「press」〜「停止」の間に、ボタン上でマウスを押した時の動作を、
ラベル「release」〜「停止」の間に、ボタン上でマウスを離した時の動作を追加する。
ラベルジャンプ等を扱う場合は、ラベル名の指定に注意。
ルートイベント上のラベルは、「_root.ラベル名」の形で指定すること。
1.普通にボタンにしたいもののプロパティを開き、「ボタンにする」をチェック。
2.「アクション」は「スクリプト」に設定し、「スクリプトを編集」。
3.そこに以下をコピペ
※スプライトを用いる場合は、1,2を無視して単に「スクリプトを編集」でコピペ。
on(keyPress "@") { //ボタンの設定(詳しくは後述)
gotoAndPlay("A"); //ジャンプするラベル名
}
-
on(release){
gotoAndPlay("A"); //ジャンプするラベル名
}
@には、監視するキーを入れる。
「1」キーなら"1"とすればいいし、「:」なら":"とする。
ただし特殊なキー(矢印・スペース・Enter等)は、"<Enter>"て感じに<>でくくる。
なぜか知らんが"<Space>"や"<Backspace>"なんかが反応しない模様。
スペースについては、"<Space>"の代わりに" "って半角スペースを指定するといける。
矢印は"<Up>"、"<Down>"、"<Right>"、"<Left>"。
他のキーの割り当てについては未調査。
押下後の動作についてはとりあえずラベルジャンプにしてあるので、
他の動作がしたい場合はジャンプ先で設定しる。
クリックでのジャンプを無効にしたい場合は、上3行だけでOK。
1.空のテキストを作成、変数名に「text1」と入れる
2.スプライトを作成、スプライトの編集→1のテキストを追加
3.親イベントリストに、2のスプライトを追加
4.スプライトのプロパティ→スクリプトを編集
5.そこに以下をコピペ
onClipEvent(load){
alltext = "@"; //表示したい文字
speed = A; //表示スピード(大きいほど遅い)
tail = "B"; //末尾につける文字(あれば)
del_tail = C; //全て表示したら↑を[1:消す|0:消さない]
text1 = ""; //テキストの変数名
count = 0;
frame = speed;
}
-
onClipEvent(enterFrame){
if(frame == speed){
text1 = alltext.substr(0,count++) + tail; //テキストの変数名
frame = 0;
if(count > alltext.length && del_tail == 1){
tail = "";}
}
frame++;
}
Bには、テキストの後ろにくっつけたいものがあれば入れる。
例えば「_」や「|」を入れておくと、ワープロ風になる。
Cを1にしておけば、全て表示し終えたらそれを勝手に消す。
いらなければBは空にしておく。
埋め込みフォントをダイナミックテキストとして使う場合は、
1で作ったテキストに必要な文字を入れておくこと。
1.空のテキストを作成、変数名に「text1」と入れる
2.スプライトを作成、スプライトの編集→1のテキストを追加
3.親イベントリストに、2のスプライトを追加
4.スプライトのプロパティ→スクリプトを編集
5.そこに以下をコピペ
onClipEvent(load){
alltext = "@"; //表示したい文字
speed = A; //表示スピード(大きいほど遅い)
text1 = "";
count = 0;
frame = 0;
}
-
onClipEvent(enterFrame){
frame++;
if(frame == speed){
text1 = alltext.substr(count++,1); //テキストの変数名
frame = 0;
}
}
埋め込みフォントをダイナミックテキストとして使う場合は、
1で作ったテキストに必要な文字を入れておくこと。
1.空のテキストを作成、変数名に「t」と入れる
2.スプライトを作成、スプライトの編集→1のテキストを追加
3.親イベントリストに、2のスプライトを追加
4.スプライトのプロパティ→スクリプトを編集
5.そこに以下をコピペ
onClipEvent(load){
at = "@";
c1 = "["; //ウェイト記号(開始)・・・A
c2 = "]"; //ウェイト記号(終了)・・・A
t = "";
temp = "";
ntemp = "";
num = -1;
flag = 1;
wait = 0;
fin = at.length-1;
}
-
onClipEvent(enterFrame){
if(at != ""){
if(flag == 1){
while(temp != c1 && num < fin){
temp = at.substr(++num,1);
if(temp != c1){t += temp;}
}
while(temp != c2 && num < fin){
temp = at.substr(++num,1);
if(temp != c2){ntemp += at.substr(num,1);}
}
if(ntemp != ""){wait = Number(ntemp);}
flag = 2;
}else if(flag == 2){
if(ntemp == ""){
flag = 0;
}else if(wait > 0){
wait--;
}else{
if(num >= fin){
flag = 0;
t = "";
}else{
ntemp = "";
flag = 1;
}
}
}
}
}
@に全文章を入れる。
その際に、ウェイト記号(この場合、[と])で数字を挟むことによって
そこまで表示した時点で数字分のウェイトをかける。
例えば、「あいうえお[10]かきくけこ」とすれば、
「あいうえお」を表示→10フレーム待つ→「かきくけこ」まで表示
といった流れになる。
説明するより、サンプルをプレビューしてもらった方が早い。
文章の最後にウェイト記号+数字を入れておくと、
そのウェイトを消費後、文章全体を自動的に消去する。
数字を入れない([]の状態)、またはウェイト記号自体がない場合、
「画像を消去」で消すまで全文が残る。
文章中に改行させたい場合は、「\n」をいれる。
Aのウェイト記号は、自分で自由に変更できるが、文章中に使わない記号を指定しておくこと。
埋め込みフォントをダイナミックテキストとして使う場合は、
1で作ったテキストに必要な文字を入れておくこと。
(↑空白等で位置を調整したい場合は、空白も忘れずに。)
1.空のテキストを作成、変数名に「text1」と入れる
2.スプライトを作成、スプライトの編集→1のテキストを追加
3.親イベントリストに、2のスプライトを追加
4.スプライトのプロパティ→スクリプトを編集
5.そこに以下をコピペ
onClipEvent(load){
dig = @; //桁数
name = "A"; //数字の入っている変数名
text1 = "";
}
-
onClipEvent(enterFrame){
text1 = "";
num = String(parseFloat(eval(name)));
if(num.length > dig){
for(i=0;i<dig;i++){text1 += "9";}
}else{
for(i=0;i<dig-num.length;i++){text1 += "0";}
text1 += num;
}
}
@に最大の桁数を設定。
この桁数を越える数字を渡すと、「9999...」の状態になる。
Aは変数名を、必要であればターゲットパスも含めて入れる。
(例えば、「_root.mc1.score」のように)
携帯Flashについてはこっち
1.親イベントリストの最初の方(一行目を推奨)で、アクションを挿入→スクリプト
2.その「スクリプトを編集」、そこに以下をコピペ
s_mask = 1; //Flashの外側(はみだし部分)を隠す [Yes:1/No:0] ・・・@
s_lock = 1; //プロパティで設定した大きさで表示させる [Yes:1/No:0] ・・・A
if(s_mask == 1){
Stage.scaleMode = "showAll";
createEmptyMovieClip("stage_mask",12345);
with(stage_mask){
lineStyle();
beginFill(0,100);
moveTo(0,0);
lineTo(Stage.width,0);
lineTo(Stage.width,Stage.height);
lineTo(0,Stage.height);
lineTo(0,0);
endFill();
}
_root.setMask(stage_mask);
}
if(s_lock == 1){Stage.scaleMode = "noScale";}
Flashファイル(.swf)を、ブラウザで直接表示させた場合の表示形式を設定する。
ステージの外にはみ出した部分を隠したい場合は、@を1に、
ブラウザウィンドウのサイズによって拡大・縮小されるのを防ぎたい場合は、Aを1に、
それぞれ無効にしたい場合は0を設定する。
1.親イベントリストの最初の方(一行目を推奨)で、アクションを挿入→スクリプト
2.その「スクリプトを編集」、そこに以下をコピペ
Stage.showMenu = false;
こぴぺスクリプトというよりActionScriptそのもの。
右クリックして出てくる、「拡縮、画質変更、再生などのフレーム制御」といった
ほとんどのメニュー項目を非表示にして使えなくする。
1.生成するSWFのバージョンが7以上であることを確認する
2.親イベントリストの最初の方(一行目を推奨)で、アクションを挿入→スクリプト
3.その「スクリプトを編集」、そこに以下をコピペ
myContextMenu = new ContextMenu ();
with(myContextMenu.builtInItems){
forward_back = false; //先送り、戻る
loop = false; //ループ再生
play = false; //再生
print = false; //プリント
quality = true; //画質
rewind = false; //巻き戻し
zoom = true; //拡大
save = true; //保存(Shockmachine専用)
}
_root.menu = myContextMenu;
こぴぺスクリプトというよりActionScriptそのもの。
右クリックして出てくる、「拡縮、画質変更、再生などのフレーム制御」といった
メニュー項目の表示・非表示を個別に設定できる。
それぞれ、「true」で表示に、「false」で非表示に設定する。
ただし、SWF7以降でのみ使用可能。
「save」はShockmachine専用に用意されたプロパティとのこと。
通常、気にする必要はないと思われる。