XMLからデータを取得し、タイトルをリスト表示(5件)し、
タイトルにロールオーバーでタイトルのテキストが左に流れていく。
テキストが流れきったら、右から流れ始める。
ロールアウトでテキストは初期の場所に戻る。
以上のようなflashを作成しようとしているのですが、
悩んでいる部分があります。
テキストが流れきったかどうかの判定は、テキストのMCのX座標の位置に
よって判断しています。
テキストの長さは長いものもあれば、短いものもあります。
あらかじめ、テキストエリアの幅を長いものに合わせておくと、
テキストが流れきった後、右からまた流れ始める際に短いテキストだと
流れ始めるまで間が空いてしまいます。
テキストが流れきったら、テキストの長短に関わらず、
すぐに右から流れ始めるようにしたいのですが、良い方法などありますでしょうか。
よろしくお願いします。
環境は以下です。
FLASH CS3
ActionScript2.0
No.1
- 回答日時:
テキストフィールドの横幅は,
TextField._width で取得できます。
また,
テキストフィールドの大きさは中に表示される文字列によって可変にする設定も可能です。
可変にしておけば,
テキストが流れきったかどうかの判定は,
TextField._x <= 目標座標-TextField._width
などで判定できます。
[<---TextField._width--->]←目標座標
↑
TextField._x
新規ドキュメントを作成して,
Flash のパブリッシュ設定を ActionScript2.0 に設定して,
次のスクリプトをフレーム1にコピペし「制御」→「ムービープレビュー」すると,
上で説明したものの一例サンプルが自動で作成できます。
---------------------------------------
// テキストフィールド ttl_txt を 深度 0 の適当な場所に作成
var _txt:TextField = this.createTextField("ttl_txt", 0, 0, 20, 0, 0);
// ★テキストフィールドのサイズを可変に設定する
_txt.autoSize = true;
// タイトルを作成代入する関数 makeTitle の定義
function makeTitle():Void {
var rnd:Number = Math.floor(Math.random()*75)+5;
_txt.text = "";
for (var i:Number = 0; i<=rnd; i++) {
_txt.text += String(Math.floor(Math.random()*10));
}
}
// makeTitle の初回実行
makeTitle();
// 1フレーム進む時間ごとに随時実行
this.onEnterFrame = function() {
// ★例えばテキストフィールを10pxずつ左に移動
_txt._x -= 10;
// ★ もしテキストフィールドの右端座標が 0 以下であれば
if (_txt._x<=0-_txt._width) {
// ★ テキストフィールドを右に移動
_txt._x = Stage.width;
// makeTitle の実行
makeTitle();
}
};
------------------------------------------
関係がある部分には ★ を付けました。
ちなみに,
ムービークリップの幅も MovieClip._width で取得できます。
テキストフィールド入りMovieClipを使用するのでしたら,
MovieClip._width で同様にしても良いと思います。
この回答への補足
御回答ありがとうございます。
実現できました。
実は、もう1点お聞きしたいことがあるのですが。
現状テキストは流れ続けているわけですが、
初期状態は、テキストが静止した状態で表示されていて、
ロールオーバーした場合のみ流れて、
ロールアウトすると初期状態の場所に戻るという動きの実現は、
現状教えていただいたところから、簡単に実現可能でしょうか。
申し訳ありませんが、御回答いただければ幸いです。
No.2ベストアンサー
- 回答日時:
#1です。
#1で回答したスクリプトは,"単なる一例" ですよ。
本題は
テキストフィールドをオートサイズにしておけば
テキストフィールドの幅を検知できるのでそれを使えば良いでしょう。
ということだけです。
また,
テキストフィールドをオートサイズにしておけば
それを包むムービークリップの幅でも検知できますよ。
と付け足しているだけです。
> ロールオーバーした場合のみ流れて、
> ロールアウトすると初期状態の場所に戻るという動きの実現は、
> 現状教えていただいたところから、簡単に実現可能でしょうか。
> 申し訳ありませんが、御回答いただければ幸いです。
まず,
ロールオーバーするもの(ボタンやムービークリップ)が必要ではないでしょうか?
というかロールオーバーするものはすでに用意されているはずです。
テキストフィールドが動くのですから,
テキストフィールドにロールオーバーしたりロールアウトしたときに何か動作させるわけではないでしょう?
もしそういうことをしていたら,
テキストフィールドが逃げてロールオーバーしにくいです。
ですから
テキストフィールド以外の何かロールオーバーするものにロールオーバーしたとき,
例えば,何かの変数(フラグ)を true とかにして,
そのフラグが true の時だけ,
// 1フレーム進む時間ごとに随時実行
this.onEnterFrame = function() {
};
内が実行されるようにすればできます。
こんな形↓。
// 1フレーム進む時間ごとに随時実行
this.onEnterFrame = function() {
// 何かのフラグがtrueの時だけ ○○ を実行
if(何かのフラグ){
○○
}
};
そして
その何かからロールアウトしたとき,
テキストフィールドのx座標を 0 か何かにすれば良いと思います。
この上で書いたも,はたとえばの一例です。
ロールオーバーしたときに,
// 1フレーム進む時間ごとに随時実行
this.onEnterFrame = function() {};
自体を定義して,
ロールアウトしたときに,
delete this.onEnterFrame;
などをしてもかまわないと思います。
それに,
this.onEnterFrame で動かすこと自体も単なる例です。
たとえばモーショントゥイーンで動かしても良いわけです。
モーショントゥイーンで動かして,
// ★ もしテキストフィールドの右端座標が 0 以下であれば
if (_txt._x<=0-_txt._width) {
// ★ テキストフィールドを右に移動
_txt._x = Stage.width;
}
ではなくて,
// ★ もしテキストフィールドの右端座標が 0 以下であれば
if (_txt._x<=0-_txt._width) {
// ★ 最初のフレームに戻す
this.gotoAndPlay(1);
}
のようにしても良いわけです。
関係ある場所は ★ を付けた部分で,
その他は一度動かさないと現実的実体の説明ができないので,
ActionScript のみで説明しただけです。
※ココでは自分のサイトなどにリンクできません。
つまり「こうすればいい」などのデータを提示できないのです。
ActionScriptだけで説明しているのは,
サンプルを作成できないココでの苦肉の伝達方法です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数に256文字以上のテキストを...
-
別のアプリケーションのテキス...
-
テキストボックスにセルの値を...
-
全てのテキストボックスをセル...
-
FLashでメモ帳などから文字を読...
-
外部テキストにリンクが貼れません
-
UIScrollBarで表示したテキスト...
-
Adobe Flash Player 9 のテキ...
-
IP Address 入力フォームについて
-
VB6.0 でメニューを作りたいん...
-
VB.NET2005 DataGridViewでレコ...
-
RPG(AS400)の本、サイトってあ...
-
photoshopで書いた四角の枠の中...
-
【VB.NET】別Formのボタンが押...
-
VBAで改行の入ったデータの正規...
-
ダイナミックテキストの表示値...
-
static関数がmapファイルに載ら...
-
setIntervalの解除方法について
-
楕円の軌道に傾斜をつける方法...
-
SNMPの標準MIBについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のアプリケーションのテキス...
-
変数に256文字以上のテキストを...
-
テキストボックスの中身をリセ...
-
テキストボックスにセルの値を...
-
POIでのテキストボックス作成に...
-
全てのテキストボックスをセル...
-
VB.NET2005 DataGridViewでレコ...
-
VB6.0 でメニューを作りたいん...
-
VBSでMid関数を使ったらエラー...
-
RPG(AS400)の本、サイトってあ...
-
テキストエリア内の文字列にリ...
-
漢字入力した値のカタカナ変換...
-
IP Address 入力フォームについて
-
'2465'指定した式で参照してい...
-
VB.NETで数十行のプログラムを...
-
pdfのテキスト全文コピー、テキ...
-
アクセスのフォームから検索を...
-
pg_escape_string()
-
ただただ無駄な
-
FLASH上で日数カウントダウン
おすすめ情報