• ベストアンサー

画像をループさせるうまい方法を教えてください。

Flash 8 (ActionScript2.0) 画像をドラッグで移動させる処理をしているんですが、 画像をループ(横のみ)させて、表示するにはどうすればいいでしょうか? つまり、画像を横に移動し続けて画像の端がくれば、また画像の最初からあたかも画像が繋がっているかのように表示したいです。 良い処理の仕方、アルゴリズムを教えてください。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

表示させたい画像が  ABCDE という柄の一枚の画像であって, BCDのみが見えているとします。     ABCDE      └┬┘      見えている範囲(例えばステージの範囲) このような場合, 簡単にするにはこの画像を左右に2つ,もしくは3つ並べます。 左右に2つ並べるとするなら次のような感じになります。     ABCDEABCDE      └┬┘      見えている範囲 たとえば, この2つ並べた画像を右に1つ動かしたとします      ABCDEABCDE      └┬┘      見えている範囲 さらにもう1つ動かしたとします。       ABCDEABCDE      └┬┘      見えている範囲 Aの画像の左に背景が見えてしまいますから,この時点で アウト! です。 アウトになった瞬間,ABCDEの幅と同じ座標分,左に画像を動かします。  ABCDEABCDE      └┬┘      見えている範囲 これでAの左の背景が見えなくなりAの左にはEが表示されます。 だいたいこのようなパターンが多いです。 左右に画像を並べるのは手動でコピペでも良いですし, ActionScriptでコピペしても良いです。 ABCDEABCDE と2重(または3重)連結された画像を同じムービークリップの中に入れて, 1つのムービークリップとして動かすのが簡単です。 「無限にスクロールするメニュー FLASHRAVE - FLASH 講座 -」 http://flashrave.org/anima/infinity_scroll/ ~引用~ > 動作の概要としては、初期表示時に「MENU00」を > 上下に一つずつ複製して配置しています。 > スクロールボタンにマウスが重なることで > この複製物を合わせた3つのシンボルを移動させ、 > 一定距離移動すると元の場所に戻すことで > 無限にスクロールしているように錯覚させています。 「Flash MX ActionScript ほぼ10行道場」 http://book.mycom.co.jp/support/e5/actionscript10/  →Chapter13 その他のバリエーション   →13-01 無限ループ背景 しかしそんなことより, ループした画像(ちゃんとつながる画像)を作成するアルゴリズム(というべき?)の方が場合によっては難しいと思います。 ABCDEという別々の写真が5枚あって,5枚セットで1枚の画像でしたら簡単ですが, 横長い風景写真であったり,地図であったりする場合はどうするのでしょうか??? その辺の工夫の方が難しい気がします。 たとえば風景写真で  山川町丘海 というようなものの場合, この画像を左右反転させた画像を1枚の画像とするとうまくつながる場合があります。  山川町丘海海丘町川山 これを2重連結させますから  山川町丘海海丘町川山山川町丘海海丘町川山 山と海の部分をなんとかごまかせばうまく行くと思います。 しかし地図のような画像ではそれはできませんし..., もしそのような画像の場合はどうにかこうにか考えてみてください。

studentE5T
質問者

お礼

図入りの解説で分かりやすかったです。 ありがとうございました。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 わかるかどうかが不安になったので,#1 の補足をします。 #1で書いたのはアルゴリズム,いわば考え方です。 考え方のみではなく, 具体的なスクリプト例と,ムービークリップの構造を図示します。 左右に2枚の画像を連結して, その画像の左端を基準点に設定してムービークリップに変換したとします。 そのムービークリップ自体に書くスクリプト例です。 --------------------------------------------------------- on (press) { this.startDrag(false, -10000, this._y, 10000, this._y); } on (release) { this.stopDrag(); } on (releaseOutside) { this.stopDrag(); } onClipEvent (mouseMove) { if (this._x<-this._width/2) { this._x += this._width/2; } else if (this._x>0) { this._x -= this._width/2; } updateAfterEvent(); } --------------------------------------------------------- このスクリプトを書くムービークリップとは, 下の図のように作成したものの場合です。

関連するQ&A