Archive for category ActionScript

ムービークリップを特定フレームまで再生してから停止させる

Flashでゲームを作成した場合に、ヒットポイントを表示するゲージを扱うことがあるかと思います。

例えばダメージをうけた場合に特定の位置まで

gotoAndStop([フレーム番号]);

でも良いのですが、これだといきなり減ってしまい味気ない感じになってしまいます。

モーショントゥイーンしつつ指定の位置で停止出来ないものかと考えたのですが、_rootに停止位置フラグを置いて各フレームに、

if(_root.[停止位置の変数] == [フレーム番号]){

this.stop();

}

とするのも芸がありません。(100フレームあったとして全てに書くのもバカバカしいですしね)

こういった場合は次のようにするのが良いのではないでしょうか?(AS2.0です)

ステージ上に再生したいサンプルのムービークリップ (インスタンス名:test_mc )とテスト用の再生開始ボタン(インスタンス名:test_button)を配置します。test_mcの1フレーム目にはstop();を記述して再生はストップした状態です。

(ボタンをクリックした場合に25フレーム目まで再生して停止するサンプルスクリプト)

var test_mc_stop = 1;

test_button.onRelease = function(){

test_mc_stop = 25;

test_mc.play();

}

test_mc.onEnterFrame = function(){

if(this._currentframe == test_mc_stop){

this.stop();

}

}

onEnterFrameイベントで、毎フレーム呼び出されて currentframe で現在のフレーム位置をチェック。

予めボタンクリック時にセットされたtest_mc_stopと同じフレーム位置であれば再生を停止します。

AS3.0ではもう少しスマートな方法があるのかもしれませんが・・・・・

,

No Comments

TextField へのスクロールバーの追加

通知表ジェネレータにて縮小表示時に文字が読みづらいためサイズ変更したところ1画面に収まらなくなってしまいました。

そこで、スクロールバーを表示させるためにUIScrollBarというコンポーネントを使用してみました。

コンポーネントを使用するためには、[ウィンドウ]→[コンポーネント]で、コンポーネントウィンドウを開き、UIScrollBarをドラッグして、TextFieldの端へ配置します。

(この際にオブジェクトへ吸着にチェックが入っていることを確認しておいてください)

右端側へ吸着させれば垂直の、下部に吸着させれば水平のスクロールバーとなります。

あとは、TextFieldに収まりきらないテキストがセットされると自動的にスクロールバーが表示されます。

ただ、方法によってはUIScrollBarがうまく表示されない場合があります。

  1. Varsからテキストをセットした場合
  2. TextFieldの変数名とインスタンス名が同じであった場合

1は、TextFieldに変数名を設定し、変数にテキストを代入することによって内容を切り替えていた場合にスクロールバーがうまく表示されません。

TextFieldにインスタンス名を設定し

[TextFieldのインスタンス名].text = “代入するテキスト”;

というようにtextプロパティからテキストをセットする必要があります。

2はインスタンス名と変数名が同じ場合に変数への代入が優先されてスクロールバーが出ないおそれがあるためです。

TextFieldにインスタンス名をつけ、 ‘TextField.text’プロパティを使ってテキストを設定してください。TextFieldにはインスタンス名に加えて変数名も使用できます が、スクリプトに混乱を生じるおそれがありますので、変数名は削除することをお勧めします。

ちなみに、縦横50%のサイズに縮小した場合にスクロールバーが細すぎるため、幅を増やせないかとあれこれ挑戦してみましたが、配置時にサイズ変更をしても、実行してみると元のサイズ(幅16pix)で表示されてしまいます。

Flash CS3 ドキュメンテーションを確認すると

UIScrollBar コンポーネントは、オーサリング時にも実行時にも縦横に変形させることができます。ただし、垂直方向の UIScrollBar の幅、水平方向の UIScrollBar の高さを変更することはできません。

とのことでした。好きな幅に設定できるといいんですけどね。

好みの形にするには自作するしかないようです。

,

No Comments

ダイナミックテキスト(デバイスフォント)へのマスク指定

通知表ジェネレータの表紙には、本人の名前がセットされるようにTextFieldが配置されています。

ページめくりのエフェクトの為、表紙にはマスクがかかっており、裏ページにあわせてマスクが移動することで表紙がだんだん隠れていくのですが・・・・

いざパブリッシュしてみると名前欄が表示されていません。

調べてみたところ、デバイスフォントへのマスク指定はスクリプト側から

MovieClip.setMask()メソッド

にて指定する必要があるようです。

ただ単に動かないマスクであれば良かったのですが、今回は動作の絡んだもののため、仕方なくめくり始めると字が消える形でごまかしてしまいました。

そういえばデバイスフォントの場合、文字の回転をした場合も文字が非表示になってしまうんですよね。

(フォントを埋め込むと正常に回転出来ます)

No Comments

動的に生成したTextFieldへのフォント埋め込み

新聞一面ジェネレータでは、入力された文字を動的に生成したTextFieldへ表示しているのですが、最初の段階ではフォントが反映されませんでした。

※制作したPCにはフォントが入っているため正常に動作しているかのように見えて気づかなかった。

これはTextField.embedFonts プロパティを true にする設定が抜けていたことが原因でした。

ちなみに、通常AS上で作成したTextFieldにフォントを埋め込むためには、ライブラリへフォントを登録し、リンケージ、action scriptへのフォント読み込み、一番最初のフレームに読み込みといった設定が必要なのですが、そうしてしまうと全てのフォントが埋め込まれサイズが肥大化してしまいます。

今回は旧式の方法ですが、予めステージ上に必要なフォントのみを埋め込んだTextFieldを配置して対応しました。

,

No Comments