サンプル応用


サンプル応用

サンプルpfl.では手狭になりましたので、「応用」については以後こちらに掲載してください。
ここではゲームに使える効果やホームページデザインに使える視覚的効果などを掲載できたらいいかと思います。
スクリプトが込み入っていて解りづらい場合は、file一閃.zipのように順を追ったサンプルを作成していただけると、みんなが幸せになれます。
また利用者は、サンプルが示す方法が唯一の正解ではなく、表現するための一例に過ぎないことをご理解ください。

補講

このページ「応用」になってからしか使わないスクリプトをここに追加します

グローバル関数

fileグローバル関数.pfl
グローバル関数は、どのオブジェクトからでもターゲットパスの指定なしで呼び出せる関数です

グローバルとローカル

global=メイン、local=スプライトと解釈すればいい
ムービークリップのメイン上での座標とスプライト上での座標を相互に変換する方法

fileローカル⇒グローバル.pfl
スプライトの中にあるムービークリップの、メイン上での座標を取得するためにはlocalToGlobal?()を用いる

fileグローバル⇒ローカル.pfl
メイン上にあるムービークリップの、スプライト上での座標を取得するためにはglobalToLocal?()を用いる


データ型

fileデータ型.pfl
インスタンスのデータ型を調べるにはtypeof()演算子を用いる

for…in

for(A in B){}では、Bのプロパティをすべて順にAとして取り上げ{}内で処理することができる
{}内ではプロパティ名はA、その値はB[A]と書く

fileフォーイン0.pfl
フォーインの使い方
fileフォーイン1.pfl
フォーインを使うとき陥る罠を解説

fileデータ型+フォーイン.pfl
複製スプライトを一気に削除してしまう方法
フォーイン文中でデータ型を調べて処理する一般例

傾斜

file傾斜.pfl
スプライトに入れた画像やテキストを傾斜させる方法

ASの読み込み

file読み込み.zip
本家ユーザーの方々が作ったasファイルを利用する方法
ここでは Hakuhin氏のサイトから二次配布可能ということでasファイルをお借りしてきました

fileトスする.zip
動作の具合を決める係数は、外部ファイルで変更するかプロジェクトファイルで変更するかでやり方が違ってくるが、好きな方を選ぶといいだろう
ここでは KAYA氏のサイトを参考にasテキストを作成しました


効果音

file効果音.zip
クリック時や当たり判定時に合わせて効果音を鳴らす方法

テキストフィールド

fileテキストフィールド0.pfl
ファイルリストから配置したテキストフィールドをスクロールする方法

fileテキストフィールド1.pfl
createTextField?()で生成したテキストフィールドをスクロールする方法

スクロールバー

fileフォントの種類.pfl
スクロールバーの作り方。テキストはただの文章では芸がないのでパソコンに入っているフォントを取得してみた

リターン

functionで定義したカスタムメソッドではreturnによって戻り値を返すことができる

fileリターン.pfl
今更すぎるので、戻り値と引数を同じにした例を挙げておく

file配列でリターン.pfl
戻り値が複数必要な場合は、配列にして返す方法がある


行列

file行列.pfl
サンプルpfl.ページのダンジョンの項で使った配列の入れ子は行列とも言う
その復習として学校の時間割表を作ってみた

マウスで操作

切る

file一閃.zip
画像をクリックオンオフで引いた線によって切断する方法

吸着

file吸着.pfl
ドラッグした画像で他の画像を吸い付け、そのままくっつけて動かす方法
単にお互いの座標をイコールしたのとは違い、当たり判定があった場所について行く
globalToLocal?()の知識が必要

fileツンデレ.zip
何も起こらないかもしれない
でもこの項にあるということは…

つまむ

fileつまむ.zip
カーソルをPDRに置き換えドラッグ時につまむような動作をさせる
アザラシの目を動かすにはlocalToGlobal?()の知識が必要

キーボードで操作


照準

file照準.pfl
縦横の線を描画し、交点をキーボードまたはマウスで動かす方法
座標で当たり判定を取るシューティングゲームなどに使える

ボール(円)を扱う

ボールの動きを表現するときベクトルで行うのが一般的だが、ベクトル理論はなかなかとっつきにくい
ここでは線分の長さと角度には計算上マイナス値が存在することを利用して「ベクトル?なにそれ?」で処理してみた

そのために、スプライトをX・Y方向それぞれに値を与えて動かす従来の方法ではなく、
ここでは任意の角度と任意の距離を指定して移動させるカスタムメソッドadvance()を定義した

円の接触

file円の接触.zip
ふたつの円が重ならないように、また外れないようにする方法

斜線でバウンド

file斜線でバウンド.zip
斜めの線に対してボールが跳ね返るようにする方法

図1.jpg        図2.jpg

angleは水平線(X軸)からの角度
右図に関しては「そこの角度は90-angleじゃないの?」と頭を悩ませると思うが、これがマイナスの角度を操るマジックなので解らなくても気にしない
angle = -angle + 180;
angle += 180-2*angle;
angle -= 2*(angle - 90);
要するに先頭の式を左図と照らし合わせられるように書き換えたわけである

次に90という数字に着目してほしい 垂直線(Y軸)の角度90度を意味している
結論から書くと、角度angleNの線に対してのバウンド後の角度を求めるには、
angle -= 2*(angle-angleN)
という式が成り立つ
角度0度の左図でもそうなっているはずだ

曲線でバウンド

file曲線でバウンド.zip
円や半円を含んだ方形の内側でボールが跳ね返るようにする方法
後出の「多角形」描画の知識が必要

ボールの動作表現

file弾む.pfl
前出の「トスする.zip」をこの項で使っているカスタムメソッドadvance()に移し変えた

file滑る転がる.pfl
半円部を滑らせ、斜線を転がらせる
前出の「斜線でバウンド」「曲線でバウンド」の知識が必要

file滑る転がる改.pfl
半円部の飛び出しに押し戻し処理を加えた
プレイ画面外に一瞬ドラッグできてしまうことが気にならなければ、ドラッグエリアは指定しなくてもいいだろう


ボール同士の衝突

推進力が対等の場合

advance()の推進力(仮にpixel)が同じ場合は、方向(仮にangle)も均等に反発させればよい

file衝突(無重力).pfl
重力、各種抵抗なし

file衝突(重力&抵抗).pfl
重力、各種抵抗あり

推進力が違う場合

pixelが0になってもangleは存在するため、対等の場合のスクリプトのままだとそれが影響してしまう
つまり、止まっている状態で直進で衝突されても自身のangleの影響を受けて反対方向に飛んでいかないということになる

■サンプル製作中

視覚的効果

PDRでアルファマスク

不透明度を使って段階的にマスクをかける手法です
深度1のスプライトの中にある画像にアルファマスクをかけていますので、他の画像を深度0以下に配置すると白くモヤがかかっている部分にそれが透けて見えます
filePDRでマスク.zip
PDRを使ったアルファマスクがなかったのでセットを作ってみました
描画よりはずっと解りやすいと思います
PDRは「塗りつぶし」と「グラデ」のそれぞれの不透明度を255と0にするだけでよく、色は関係ありません

file部分にマスク.zip
PDRによるアルファマスクで形を作ったり、動かしてみたりした

注ぐ

file風呂.zip
描画で風呂に水を満たすイメージを表現
またおまけの「応用.pfl」では、フィルタを通した画像をその描画でマスクし変わった効果を出してみた

その他

内側にドロップシャドウ

file円柱.pfl
実は円柱ではなくノートの見開きを表現しようと思いイベントの詳細設定をいじっていたら気づいたこと
知っている人もいると思うが、メモとして見てほしい


ノイズを演出

fileノイズの色.pfl
ノイズ用のビットマップを生成し背面の画像にノイズをかぶせます
ビットマップの背面を透過するにはノイズの色要素にアルファ要素をプラスします

fileノイズにフィルタ.pfl
ノイズをスプライトに生成すると、イベントのプロパティの設定を反映させることができます

fileレトロ映画風ノイズ.pfl
古い映画のようにノイズをセピア色にし、たまに縦線を出現させてみました

多角形

file多角形.pfl
多角形および擬似円を描画する方法

色の抽出

fileRGB値.pfl
16進数のカラー値をRGB値に直す方法

fileカラーピッカー.zip
ASでカラーチャートを描き、スポイトでそこから色を選んで他の画像に配色を施す

配列による反復

file配列による反復.pfl
配列の先頭の要素を抜き出し、それを最後尾に追加してループさせる
抜き出した要素で他のプロパティを決めれば変化を与えることができるわけだ

スプライトの連動

他のスプライトの位置や動きに影響されて動作させる方法

file重なる.pfl
当たり判定で相手に重なろうとする
前出の「残像」などにも使われた方法

fileカーソルを追う文字.pfl
文字列を分解して一文字ずつのムービークリップにし、それらを追いかけっこさせる方法

来歴ID

FLASHコンテンツを訪問した際、訪問者にIDを発行する方法

fileID発行.pfl
A〜Z・a〜z・0〜9を並べた文字列からランダムに8桁のIDを作成する

file来訪履歴.pfl
訪問した日付に応じてIDを変更する

羽が落ちる

fileゆらゆら落ちる.pfl
羽がゆらゆらと左右に揺れながら落ちるような表現方法

変化複製

file変化複製.zip
モーフィング中の画像を途中から始めさせることによって、違った形状で複製することができる
※AS訂正

gotoAndPlay(Math.floor(Math.random()*60)+1);

ゲームの素

シューティング

file追尾.zip
敵の攻撃が自機を狙ってくる

※AS訂正※
・tamaJの「&& this != tamJ」は不必要です
・tamaTのスクリプトは普通に以下でいいです

	xx = Math.cos(angle*Math.PI/180)*10;
	yy = Math.sin(angle*Math.PI/180)*10;

file奥行き.zip
敵の隊列を奥行きがあるかのように配置してみた
コンプで確か750点だったと思うが、制限時間を設けたりタンクと一騎打ちなどのオマケを用意してもいいだろう

※AS訂正※
swf7以上に変更する場合は、スクリプト動作設定のcountjをcountJに直してください

避けゲー

file手繋ぎ鬼.zip
うねうね蛇くんの土台部分を作ってみた
アレンジを加えた5より4のままの方が面白いかもしれない

操縦&運転ゲー

fileリモコン.zip
リモコンカーをコースで走らせる感じ

fileカート.zip
ドライバー目線のドライビング。コースはASで描画している
ロールバックで別ラインを作り、アイデアをそこで展開させるのもいいだろう
※AS訂正※

	lineStyle();
	beginFill(0xddffff);
	moveTo(200+corner,200);
	curveTo(150-corner,250,100+corner,400);
	lineTo(500+corner,400);
	curveTo(450-corner,250,400+corner,200);
	lineTo(200+corner,200);

音ゲー

file落ち音ゲーム0.pfl
この基礎部分の原理は「配列による反復.pfl」で復習しておこう

file落ち音ゲーム.zip
とりあえずMP3を組み込みで作ってみた
ここまででも十分難しいのに、MP3や変数の外部読み込みまでやってしまうと、人が作った サンプルではソースを見渡しきれないと思う
外部読み込みは独学でお願いする
注意このzipに入ってる「落ち音ゲーム0.pfl」は上にあるもののミステイク版なので破棄してください
どこでミスってるか探すのもよしw

落ちゲー

fileテトリス.zip
keyリスナーだけは初出かもしれないが、なるべく今まで紹介してきたASだけで作ってみた
※スクリプト「動作」の33行目を以下のように変更すると、

	if(scene == 1 || scene == 2){

ブロックが赤線を超えなくてもキー操作ができるようになる

質問&要望

  • テトリス試しました。小説で言えば長編ですねお疲れ様。自分としてはif(Key.isDown(Key.DOWN)){keyD();}だけをonEnterFrame?内に移すのが一番好みでした。 -- 2008-12-28 (日) 09:59:12