アプリ版:「スタンプのみでお礼する」機能のリリースについて

ボタンで1方向に動かすのでしたら、
1フレームでストップして、ボタンで2フレームに移動して
トゥイーンで動かしたら良い。 位しか分からないのですが

ボタンを設置して、右と左に同じ画像を動かすにはどうしたらいいでしょうか?

環境
Windouw7
CS5

よろしくお願いいたします。

「外部画像を読み込み、ボタンで右左に動かし」の質問画像

A 回答 (2件)

どうしたら良いかと問われましても


ActionScript のバージョンを明記されないと
場合によっては1文字たりとも回答できませんよ。

勝手に ActionScript 3.0 を使うという条件で
方法の一例を回答します。

 

まず横長の外部画像は「gazou.jpg」というファイル名で
Flash の SWF ファイルやそれを貼り付ける HTMLファイル と同じフォルダ内に置くものとします。

 任意のフォルダ
   ├○○.fla (○○.swf 1を作る)
   ├○○.swf
   ├○○.html (○○.swf を貼り付ける)
   └gazou.jpg (外部画像)

また,ステージ上のフレーム1には,
「<」のボタン,「□」のボタン,「>」のボタンの3つが用意されていて
「<」 ボタンには「L_btn」(Lは左の意味),
「□」のボタンには「S_btn」(Sは Stop の意味),
「>」のボタンには「R_btn」(Rは右の意味) というインスタンス名が
それぞれのボタンに付けてあるものとします。
(インスタンス名は各ボタンを1つずつ選択した状態で,プロパティパネルより命名する。)

それら3つのボタンとは別に
ActionScript を書く用にするレイヤーを挿入し
フレーム1 のキーフレームに 次のスクリプトをコピペします。

///////////////////////////////////////////////
//外部画像ファイルへのパスを設定
var url:URLRequest = new URLRequest("gazou.jpg");

//外部画像を動かすスピードを設定
var spd:Number = 7.5;

//外部画像を配置するy座標を設定
var y_pos:Number = 20;

//外部画像の左端が来る限界位置を設定
var L_lim:Number = 0;

//外部画像の右端が来る限界位置を設定
var R_lim:Number = stage.stageWidth;

//---↑以上が適当に変更する設定↑---

//Loaderインスタンスを作成&配置
var ld:Loader = new Loader();
ld.x = L_lim;
ld.y = y_pos;
addChild(ld);

//外部画像の横幅を入れる変数の宣言
var gazou_w:Number;

//Loaderを動かすpx数を入れる変数の宣言
var move_px:Number;

//外部画像にアクセス可能になった時に関数onLoadINITを実行
ld.contentLoaderInfo.addEventListener(Event.INIT,onLoadINIT);

function onLoadINIT(e:Event):void {
//外部画像の横幅を記録
gazou_w = e.target.width;
//L_btnクリック時に関数 onLClick を実行
L_btn.addEventListener(MouseEvent.CLICK,onLClick);
//S_btnクリック時に関数 onSClick を実行
S_btn.addEventListener(MouseEvent.CLICK,onSClick);
//R_btnクリック時に関数 onRClick を実行
R_btn.addEventListener(MouseEvent.CLICK,onRClick);
}

//Loaderに外部画像をロード
ld.load(url);

//L_btnクリック時に実行する関数 onLClick を定義
function onLClick(e:MouseEvent):void {
//Loaderを動かすpx数を spd にする
move_px = spd;
//1フレーム時間ごとに毎回 関数 moveLoader を実行
addEventListener(Event.ENTER_FRAME,moveLoader);
}

//S_btnクリック時に実行する関数 onSClick を定義
function onSClick(e:MouseEvent):void {
//1フレーム時間ごとに毎回 関数 moveLoader を実行するのをやめる
removeEventListener(Event.ENTER_FRAME,moveLoader);
}

//R_btnクリック時に実行する関数 onRClick を定義
function onRClick(e:MouseEvent):void {
//Loaderを動かすpx数を -spd にする
move_px = - spd;
//1フレーム時間ごとに毎回 関数 moveLoader を実行
addEventListener(Event.ENTER_FRAME,moveLoader);
}

//関数 moveLoader を定義
function moveLoader(e:Event):void {
//Loaderのx座標を move_px 動かす
ld.x += move_px;
//Loaderの左端x座標が限界を超えたら
if (ld.x>L_lim) {
//Loaderの左端x座標を左の限界にする
ld.x=L_lim;
//1フレーム時間ごとに毎回 関数 moveLoader を実行するのをやめる
removeEventListener(Event.ENTER_FRAME,moveLoader);
//Loaderの右端x座標が限界を下まわっていたら
} else if (ld.x < - gazou_w+R_lim) {
//Loaderの右端x座標を右の限界にする
ld.x=- gazou_w+R_lim;
//1フレーム時間ごとに毎回 関数 moveLoader を実行するのをやめる
removeEventListener(Event.ENTER_FRAME,moveLoader);
}
}
///////////////////////////////////////////////

パブリッシュ または
「制御」→「ムービープレビュー」で動作確認できると思います。

//外部画像ファイルへのパスを設定
var url:URLRequest = new URLRequest("gazou.jpg");

これ↑で設定する外部画像のパスは
○○.html (○○.swf を貼り付ける) から見たパスです。
○○.swf から見たパスではないので階層を変える場合は注意してください。

◎例

 任意のフォルダ
   ├○○.html (○○.swf を貼り付ける)
   └files(フォルダ)
     ├○○.fla (○○.swf 1を作る)
     ├○○.swf
     └gazou.jpg (外部画像)

この場合は
var url:URLRequest = new URLRequest("files/gazou.jpg");
になります。

 

=*=*= =*=*= =*=*=

> 1フレームでストップして、ボタンで2フレームに移動して
> トゥイーンで動かしたら良い。

その路線で単純に行くとすれば左右どちらかにしか進めませんよね。
左右どちらにでも動かす場合は
フレームを逆再生させる必要が出てきます。

逆再生させるのでしたら次のページが参考になると思います。
(ただし次のページは ActionScript 3.0 ではありません。ActionScript 1.0 です。)

「ロールアウトで逆戻りするアニメーション」
http://fumiononaka.com/TechNotes/Flash/FN0303003 …

また,外部画像ですから編集中は見えないので,
トゥイーンで動かすにしても結構頭を使うと思います。
 
「外部画像を読み込み、ボタンで右左に動かし」の回答画像2
    • good
    • 0
この回答へのお礼

ありがとうございました。

プログラムの意味はうっすらとしか、まだ分かりませんが。。。
ソースまで書いていただいてありがとうございます。

実際に動きます!

さらにソースを読み解いて理解しようと思います。
この度は、本当にありがとうございました。


>どうしたら良いかと問われましても
>ActionScript のバージョンを明記されないと

仰るとおり、ActionScript 3.0(FLASH CS5)です。

お礼日時:2011/06/21 19:56

逆方向の移動を10フレーム目に定義しては?

この回答への補足

回答ありがとうございます。

反対方向に進む時には、その見えている状態のまま反対方向に進みたいのですが
どのようにしたら良いか分かりません。

補足日時:2011/06/20 18:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!