XMLからデータを取得し、タイトルをリスト表示(5件)し、
タイトルにロールオーバーでタイトルのテキストが左に流れていく。
テキストが流れきったら、右から流れ始める。
ロールアウトでテキストは初期の場所に戻る。
以上のようなflashを作成しようとしているのですが、
悩んでいる部分があります。
テキストが流れきったかどうかの判定は、テキストのMCのX座標の位置に
よって判断しています。
テキストの長さは長いものもあれば、短いものもあります。
あらかじめ、テキストエリアの幅を長いものに合わせておくと、
テキストが流れきった後、右からまた流れ始める際に短いテキストだと
流れ始めるまで間が空いてしまいます。
テキストが流れきったら、テキストの長短に関わらず、
すぐに右から流れ始めるようにしたいのですが、良い方法などありますでしょうか。
よろしくお願いします。
環境は以下です。
FLASH CS3
ActionScript2.0
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だけで説明しているのは,
サンプルを作成できないココでの苦肉の伝達方法です。
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点お聞きしたいことがあるのですが。
現状テキストは流れ続けているわけですが、
初期状態は、テキストが静止した状態で表示されていて、
ロールオーバーした場合のみ流れて、
ロールアウトすると初期状態の場所に戻るという動きの実現は、
現状教えていただいたところから、簡単に実現可能でしょうか。
申し訳ありませんが、御回答いただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数に256文字以上のテキストを...
-
全てのテキストボックスをセル...
-
Access2000 実行時エラー '3061':
-
PDFからepubに変換するウェブサ...
-
Flash みてください!初心者で...
-
テキストボックスの中身をリセ...
-
テキストエリア内の文字列にリ...
-
flashでテキストの表示
-
テキストボックスにセルの値を...
-
外部テキストのタグ
-
テキストフィールド変数の応用
-
VBからPDFファイルの埋め込みテ...
-
VBSでMid関数を使ったらエラー...
-
最後のフレームでジャンプするU...
-
アクションスクリプト2.0 奇数...
-
Googleの検索窓をFlashオブジェ...
-
VBScriptでMsgBoxのYesNoボック...
-
楕円の軌道に傾斜をつける方法...
-
photoshopで書いた四角の枠の中...
-
VB6.0で、フォームから、別のフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数に256文字以上のテキストを...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
テキストボックスにセルの値を...
-
VB6.0 でメニューを作りたいん...
-
テキストエリア内の文字列にリ...
-
RPG(AS400)の本、サイトってあ...
-
全てのテキストボックスをセル...
-
フォームのテキストの入力数字...
-
'2465'指定した式で参照してい...
-
IP Address 入力フォームについて
-
リッチテキストとHTMLの違いに...
-
VB.NET2005 DataGridViewでレコ...
-
チェックボックスのテキストを...
-
POIでのテキストボックス作成に...
-
UIScrollBarがサーバーにUPす...
-
文字の行間
-
デジタル時計の文字色を変えた...
-
VBSでMid関数を使ったらエラー...
-
VS2008 C# ボタンのテキストを...
おすすめ情報