• ベストアンサー
  • すぐに回答を!

Flashでの質問です。

  • 質問No.6531277
  • 閲覧数441
  • ありがとう数1
  • 回答数2

お礼率 48% (28/58)

写真を左から右に速くループしてだんだんゆっくり動かしていくにはどうしたらいいでしょうか?いろいろ調べましたがわかりません。as使用でもなんでもかまいません。
どなたかご存知の方どうか教えてください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 91% (1611/1754)

#1です。

もし Flash CS3 以上をお持ちでしたら
「今どき ActionScript 1.0 なんて古すぎる!」
などと思われる可能性も高いので
#1 とほぼ同じものを ActionScript 3.0 で作る方法も書いておきます。


状況は基本的に #1 と同じで
写真は複数枚あって
その写真を横に並べたときにステージの横幅を超えるものとします。
また
その写真コピペで2倍の枚数に増やして引っ付けて横に並べたものを
基準点左上のムービークリップ(以下 MC と略)に変換したとします。
ここまでは同じです。

ActionScript 3.0 の場合
選択したMC自体にスクリプトを書くことはできません。

ですから作成したMCを選択して
「プロパティ」パネルを表示させ
  [ <インスタンス名> ]
となっている欄でそのMCにインスタンス名を付けます。

※「プロパティ」パネル(インスペクタ)は
  CS3の場合デフォルトではステージの下,
  CS4とCS5の場合デフォルトではステージの右に
  あります。

ここではMCに
「photo_mc」というインスタンス名を付けたとしておきます。

その「photo_mc」があるレイヤーとは別に
新規レイヤーを追加し
そのレイヤーの空白キーフレームに次のようなスクリプトを書きます(コピペ可)。

---------------------
//最初に動く速さを設定
var speed:Number = 50;
//減速度合いを設定
var down_speed:Number = 0.4;

//photo_mcに毎フレーム時間で関数moveMCを
//実行するイベントリスナーを登録
photo_mc.addEventListener(Event.ENTER_FRAME,moveMC);

//関数 moveMC の定義
function moveMC(e:Event):void{
//speed の値が 0 より大きい場合
if (speed > 0) {
//speed の値をdown_speedだけ減算
speed -= down_speed;
//speed の値が 0 以下になれば
} else {
//speed の値を 0 で固定
speed = 0;
//photo_mcのイベントリスナーを削除
e.target.removeEventListener(Event.ENTER_FRAME,moveMC);
}
//
//photo_mcのx座標をspeedだけ右に移動
e.target.x += speed;
//
//photo_mcのx座標が 0 より大きくなれば
if (e.target.x > 0) {
//photo_mcの横幅の半分だけ左に移動
e.target.x -= e.target.width / 2;
}
}
---------------------


これでパブリッシュやムービープレビューしてもらうと
書かれていらっしゃるような感じのものはできると思います。

Flash Player 9 以上 で動作可能なスクリプトです。


なお#1の方法も この#2の方法も
Flash Lite 1.0 や 1.1(携帯版 Flash Player) には対応していません。

Flash Lite 1.0 や 1.1 は Flash Player 4 相当です。
もしこれら Flash Lite 用の Flash を作る場合は
スクリプトのみならずムービーの構造自体を変更する必要があります。

とにかく何にしても「バージョン」が大切です。
お礼コメント
vaoi

お礼率 48% (28/58)

BlurFiltan様

大変わかりやすいご回答ありがとうございました。返事が遅くなりすいません。

バージョンのを書き込むのを忘れていました。CS4のas2.0で作成しようと思っていました。

教えていただいたやりかたで、as2.0とas3.0でどちらでも作ってみました。

思っていた通りに動いてくれました。

速さの変化、そのまま最後に停止せず動き続けるさせたりと、とても勉強になりました。

とても悩んでいたので、ホッとしました。どうもありがとうございました。
投稿日時:2011/02/19 12:51

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 91% (1611/1754)

バージョンを一切書かれていらっしゃらないため非常に回答がしにくいのですが
無難に Flash 5 (2000年発売版 Flash) 以上をお持ちだとして回答します。
Flash 5 以上 とは
Flash 5,MX,MX 2004,8(CS2),CS3,CS4,CS5,… のことです。

Flash 5 では ActionScript 1.0 しか使えません。
もし Flash CS3 以上をお使いの場合は
ドキュメント作成時に ActionScript 2.0 以下バージョンを選択するようにします。
(ActionScript 3.0 は ダメです。1.0 または 2.0 です。)

写真は複数枚あって
その写真を横に並べたときにステージの横幅(見える範囲の横幅)を超えるものとします。

またその写真が仮の 「A」「B」「C」「D」「E」 という5枚で
それらがステージ上にあったとします。

この場合
5枚の写真をコピペで2倍の10枚に増やして
ABCDEABCDE
のように引っ付けて横に並べます。

その10枚を全て選択して
「修正」→「シンボルに変換」(Flash MX 2004以上)
または
「挿入」→「シンボルに変換」(Flash MX 以下) で
1つのムービークリップ(以下 MC と略) に変換します。

このとき
「基準点」が「左上」になるように設定してMCに変換します。

MCを配置する場所は適当で良いです。
ここまでの状態 【図↓】。


以上のようにして作成したMC自体を選択して
アクションパネルを表示させ
そこに次のようなスクリプトを書きます(コピペ可)。

---------------------------
//このMCが表示された時に実行
onClipEvent (load) {
//最初に動く速さを設定
speed = 50;
//減速度合いを設定
down_speed = 0.4;
}

//毎フレーム時間で実行
onClipEvent (enterFrame) {
//speed の値が 0 より大きい場合
if (speed > 0) {
//speed の値をdown_speedだけ減算
speed -= down_speed;
//speed の値が 0 以下になれば
} else {
//speed の値を 0 で固定
speed = 0;
}
//
//このMCのx座標をspeedだけ右に移動
this._x += speed;
//
//もしこのMCのx座標が 0 より大きくなれば
if (this._x > 0) {
//このMCの横幅の半分だけ左に移動
this._x -= this._width / 2;
}
}
---------------------------


これでパブリッシュやムービープレビューしてもらうと
書かれていらっしゃるような感じのものはできると思います。

speed = 50; と
down_speed = 0.4; の部分の
50 とか 0.4 という数値は適当に好みで変えてください。

Flash Player 5 以上 で動作可能なスクリプトです。


※Flash の質問ではバージョンの明記が不可欠です。
  バージョンがわからなければ回答不可能か
  勝手なバージョンでの回答しかできません。

※なるべく "具体的" な説明を書いてください。
  具体的な状況がわからなければ
  勝手に作った状況での回答しかできません。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ