No.2ベストアンサー
- 回答日時:
#1です。
> どちらかと言うとやりたかったのは
> 「質問:画面サイズが変わると移動するスクリプト」の方でした。
onEnterFrame の方ですか。
そっちの方がスクリプトを書くのが簡単で,
なおかつ Flash らしい変てこな動きになるので,
面白いというか,少し「オッ!?」と思いますよね。
しかし,背景画像に onEnterFrame でタイミング遅れを使うと,
ウィンドウを拡大したときにどうしても 背景画像 の外が見えてしまいますよ。
onEnterFrame のですが,
「質問:画面サイズが変わると移動するスクリプト」から,
その部分を引用すると次のように書いています。
// ☆例2:ムービークリップ「mc1」を,
// 左上から (x,y)=(80%,50%) に移動
_root.mc1.onEnterFrame = function() {
this._x += (Stage.width*80/100-this._x)*_root.spd;
this._y += (Stage.height*50/100-this._y)*_root.spd;
};
結局目的の位置や目的の大きさを計算で出しておいて,
オブジェクトの位置や大きさを ○分の● ずつ近づけるというしくみになっているのです。
○分の● が,2分の1= 1/2 であった場合
現在位置 += (目的位置 - 現在位置)*1/2
つまり
現在位置 = 現在位置 + (目的位置 - 現在位置)*1/2
ということで,
これを onEnterFrame で1フレーム進む時間ごとに毎回計算し直しているのです。
↓現在位置 ↓目的位置
●□□□□□□□□□□□×
onEnterFrame = function() {
現在位置 += (目的位置 - 現在位置)*1/2
}
↓↓↓ ↓↓↓
↓現在位置 ↓目的位置
●□□□□□□□□□□□×
□□□□□□●□□□□□×
□□□□□□□□□●□□×
□□□□□□□□□□ ● ×
□□□□□□□□□□□●×
… … …
… … …
という感じで,
目的位置に永遠にたどりつくことはありませんが,
とにかく ○分の● が 1/2 であると,
1/2 ずつ目的位置に近付き続ける式になります。
Flash ではよく使われる式です。
という感じに,
どうなっているのか1行1行理解して,
その断片を頭の引き出しに入れておけば,
> アリものを加工するつもりです。
ではなくて,1から自分で書けるようになります。
どんなスクリプトでも1行1行はそんなに難しい物ではないと思います。
その難しくない物を組み合わせて行くと,複雑なものができるだけです。
>> 「質問:画面サイズが変わると移動するスクリプト」の
>> 背景にウィンドウサイズに合わせて
>> 縮小拡大する画像を貼り付けたいのです。
まず,
「縮小拡大する画像」をステージに用意して,
ムービークリップに変換し(基準点は中央),
その画像入りムービークリップにインスタンス名を付けます。
この説明では 「MyImage」 というインスタンス名にしておきます。
レイヤーを1つ増やして_rootのタイムラインを次のようにする感じです。
□ レイヤー 筆・・|○| ←スクリプト
□ レイヤー 筆・・|●| ←「MyImage」
実験ですから,ネット上からでも何でも良いので,
適当な JPEG を用意してムービークリップ「MyImage」にしてください。
スクリプトに書く内容は,
数々の初期値を設定
_root.MyImage.onEnterFrame = function() {
現在位置 += (目的位置 - 現在位置)*スピード
現在大きさ += (目的大きさ - 現在大きさ)*スピード
};
という形になります。
「MyImage」 だけがステージ上にあった場合について回答すると,
次のようなスクリプトになります。
_root のフレームに書くスクリプトです(コピペ可能)。
---------------------------------
// ステージ上のオブジェクトの拡大縮小なし
Stage.scaleMode = "noscale";
// ムービーを左上を基準に配置
Stage.align = "TL";
// 動くスピードの設定(★可変)
var spd = 1/4;
// 変数 MyImgW,MyImgH に MyImage の初期サイズを記録
var MyImgW = _root.MyImage._width;
var MyImgH = _root.MyImage._height;
// 1フレーム進む時間ごとに毎回実行
_root.MyImage.onEnterFrame = function() {
// MyImage の大きさに関するスクリプト
// もしステージの形が MyImage より横長であれば
if ((Stage.width/_root.MyImgW)>(Stage.height/_root.MyImgH)) {
// 変数 myscale をステージ幅の比で決定
var myscale = Stage.width/_root.MyImgW;
// もしステージの形が MyImage より縦長であれば
} else {
// 変数 myscale をステージの高さの比で決定
var myscale = Stage.height/_root.MyImgH;
}
// MyMovie の位置を移動させる
this._x += (Stage.width/2-this._x)*_root.spd;
this._y += (Stage.height/2-this._y)*_root.spd;
// MyMovie の大きさを変化させる
this._xscale += (myscale*100-this._xscale)*_root.spd;
this._yscale += (myscale*100-this._yscale)*_root.spd;
};
---------------------------------
これでムービープレビューしてもらうとわかると思いますが,
最初に書いたように,やっぱり 「MyImage」の外が見えてしまいます。
「MyMovie の位置を移動させる」 はそのままで,
「MyMovie の大きさを変化させる」 を瞬時にさせる場合は,
次↓のように最後のスクリプト2行を変更すれば良いです。
---------------------------------
// MyMovie の大きさを変化させる
this._xscale += (myscale*100-this._xscale)*_root.spd;
this._yscale += (myscale*100-this._yscale)*_root.spd;
};
---------------------------------
↓↓↓ 変更 ↓↓↓
---------------------------------
// MyMovie の大きさを指定
this._xscale = myscale*100;
this._yscale = myscale*100;
};
---------------------------------
しかし,やっぱり MyMovie の外が見えます。
大きさはサッと瞬時に変化するのですが,
座標移動の方が遅いので,結局 MyMovie の外が見えてしまいます。
ですから,
背景だけは #1 で回答したように,
Listener.onResize = function() {}
を使って,
その上に浮いているものだけに
MovieClip.onEnterFrame = function() {}
を使って移動させる方が良いと思います。
と言う具合にして,
色んなスクリプトを組み合わせて行くと,
だんだん複雑なものになっていくのです。
しかし,
こういう動かし方に慣れていると,
スクリプトを書く前のイメージの段階で,
onEnterFrame を使うと MyMovie の外が見えるとか見えないとかがわかるのですが,
慣れていない場合は,実際にやってみないとわかりませんよね。
というわけで,
どうなるかは想像出来ていましたが,一応スクリプトを書いてみました。
この回答への補足
返事遅くなって申しわけございません。
さっそくやってみます。
> アリものを加工
お叱りのお言葉もっともです。
あまりに感動したのでプロフィールをちょこっと見てみました。
先生と呼ばせて下さい。
No.1
- 回答日時:
おや?
今朝は,「t647452.html」を見ることができましたが,
今は見ることができません。不思議。
朝は忙しくて即答できるようなご質問ではなかったので,
「t647452.swf」とご質問の文章を保存して,夕方には回答しようと,
その保存した「t647452.swf」とご質問の文章を見ながら以下の回答を書きました。
だから回答が書けました。
以上は単なる前置きです。以下,超長文です。
~ ~ ~ ~ ~ ~ ~ ~ ~
そもそも flaデータ や,
CD-ROM付きの書籍などはあるのでしょうか?
私は知りません。
でも,作り方ならわかります。
書籍ほど図説もできませんが,一応説明します。
まず,その Flash ですが,
CD-ROM が仮にあったとしたら,
おそらく,Macromedia(Adobe)Flash MX 2004 用の FLA ファイルが付いてくると思います。
もしFlash MX 2004 以上をお持ちでなければ開くこともできません。
しかし,スクリプト自体は Flash MX 以上があれば大丈夫です。
この説明では基本的に Flash MX 以上をお持ちであるということを前提に回答します。
Flash MX 以上(Flash MX,Flash MX 2004 ,Flash 8)をお持ちでなければ作れません。
////////////////////////////////////////////////////////////////
書かれている Flash は
「ネコや背景のピントがだんだん合うアニメーション」
の部分と,
「各ムービークリップが一定の場所に表示されるActionScript」
の部分に分けられると思います。
=======================
まず,
「ネコや背景のピントがだんだん合うアニメーション」ですが,
これには ActionScript は必要ありません。
単なるモーショントゥイーンです。
唯一,トゥイーンし終わったフレームに
stop(); というActionScriptが要るくらいです。
だんだんピントが合うアニメーションは,
Flash MX 2004 以下,および Flash Basic 8 では,
Photoshop など写真編集ソフトで
「ピントが合った画像」と「ピントのぼけた画像」の2枚を
あらかじめ用意しておきます。
「ピントが合った画像」は Flash でも作れますから,
もしFlashで作った場合は,その画像をBMPなどで書き出します。
そして,そのBMPなどに Photoshop など写真編集ソフトなどでぼかしをかけます。
ちまみに書かれている「ネコや背景」の画像は Photoshop ではなく,
おそらく Illustrator で原画を作って,
ぼかしていないJPEGと,ぼかしたJPEGを書き出したものだと思います。
どうも Illustrator の臭いがします。
そして,「ピントが合った画像」を
「ファイル」→「読み込み」からFlashに読み込みます。
その「ピントが合った画像」をムービークリップに変換するのですが,
後のスクリプトのために基準点は中央にしてムービークリップに変換してください。
「シンボルに変換ダイアログ」を図示すると次のような感じです。
変形していたらすみません。
-----------------------------------------
名前(N):[ 任意の名前 ]
タイプ(T): ◎ ムービークリップ 基準点(R):□□□
○ ボタン □■□
○ グラフィック □□□
-----------------------------------------
これで「OK」をクリックし,
次にこの「ピントが合った画像ムービークリップ」をダブルクリックして,
ムービークリップ内の編集に入ります。
ムービークリップ内は1レイヤー1フレームだけで,
そのフレームに「ピントが合った画像」が入っているはずですから,
レイヤーの挿入で,これを3レイヤーにし,フレームも30ほどにしておきます。
そして「ピントが合った画像」のレイヤーを一番下のレイヤーにしておきます。
1 30
□ レイヤー 筆・・|○ []|
□ レイヤー 筆・・|○ []|
□ レイヤー 筆・・|●////////[]|
「ピントが合った画像」のレイヤーの上のレイヤーのフレーム1を選択して,
今度はそこに,「ピントのぼけた画像」を読み込みます。
違うレイヤーに画像が2枚重なるわけですが,
2枚の画像の座標はきっちり合わせておいてください。
そして上に表示されているはずの「ピントのぼけた画像」を選択して,
グラフィックシンボルに変換します。
そして,
「ピントのぼけた画像グラフィック」のレイヤーの
最終フレームをキーフレームにして,
その最終フレームの「ピントのぼけた画像グラフィック」を選択し,
下のプロパティインスペクタでアルファを0にします。
つまり透明で見えなくするのです。
そして,そのレイヤーのフレーム1を選択して,
下のプロパティインスペクタで,
モーショントゥイーンをかけます。
このムービークリップ内の一番上のレイヤーが残っていますが,
この一番上のレイヤーの最終フレームをキーフレームにして,
stop();
と書きます。
これで,このムービークリップ内のタイムラインはループ再生しません。
1 30
□ レイヤー 筆・・|○ []|○| ←スクリプト
□ レイヤー 筆・・|●------>[]|●| ←ピンボケ
□ レイヤー 筆・・|●///////// []| ←ピントの合った画像
この状態でムービープレビューしてもらうと,
ピントがだんだん合うアニメーションができていることがわかると思います。
書かれている Flash のファイル容量は 261KB もありますが,
この容量の大半(98%くらい)はFlashの重さではなく2枚の画像の重さです。
最初に,
Flash MX 2004 以下,および Flash Basic 8 では…
と書きましたが
Flash Professional 8 では,上記のようなことは普通しません。
こういう方法でします↓。ブラー(ぼかし)です。
ぼかすアニメーション FLASHRAVE - FLASH 講座 -
http://flashrave.org/anima/shade/index.html
Flash MX 2004 以下の方法でも,
Flash Professional 8 の方法でも,
どっちにしても ActionScript は特に要りません。
Flash Professional 8 の方法だと作るのも簡単で,かつ,ファイルが軽くできます。
「ネコや背景」の画像くらいのものであれば Flash でも簡単に描けますから
絵もFlashで描いてしまえば,261KB の10分の1の25KBくらいで十分できると思います。
さらに余談ですが,Flash Professsional 8 で,
「ネコ」と「背景」を別のムービークリップ内に作って,
「背景」ピントがあった状態→→→ピンボケ
「ネコ」ピンボケ→→→ピントがあった状態
というモーショントゥイーンを作ると,
「最初は遠景の『背景』にピントが合っていて,だんだん近景の『ネコ』にピントが合う」
というような奥行き感ある作品が簡単に作れます。
=========================
次に,
「各ムービークリップが一定の場所に表示されるActionScript」です。
これはムービークリップ内ではなく,
ドキュメントの編集で _root(メインムービー)の編集に戻ります。
実は,似た質問が何度かあって,
それに回答したことがあります↓。
「質問:パーセントで配置したフラッシュについて」
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1838609
↑教えて!goo ↓OKWave (同じです)
http://okwave.jp/kotaeru.php3?q=1838609
「質問:画面サイズが変わると移動するスクリプト」
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2326170
↑教えて!goo ↓OKWave (同じです)
http://okwave.jp/kotaeru.php3?q=2326170
何かの参考にでもしてください。
今回は,今回で,説明し直します。
_root(メインムービー)の編集に戻ると,
_root のタイムラインは 1レイヤー1フレームだと思います。
これを3レイヤーにします。
□ レイヤー 筆・・|○|
□ レイヤー 筆・・|○|
□ レイヤー 筆・・|●| ←ピントがだんだん合うムービークリップ
そしてステージ上の「ピントがだんだん合うムービークリップ」を選択して,
下のプロパティインスペクタでインスタンス名を付けます。
この説明では 「MyMovie」 というインスタンス名を付けておきます。
あと,
「TopLeft」,「TopRight」,「BottomRight」というインスタンス名のムービークリップを
下から2番目のレイヤーのステージ上に作成します。
そのレイヤーであればステージ上のどこに置いてもかまいません。
スクリプトで配置します。
ただし,これらのムービークリップを作るとき,基準点は,「MyMovie」と同じく中央にしてください。
□ レイヤー 筆・・|○| ←スクリプト
□ レイヤー 筆・・|●| ←その他3つのムービークリップ
□ レイヤー 筆・・|●| ←ピントがだんだん合うムービークリップ
結局,ActionScript では,
ステージの大きさが変わっても,
中身のムービークリップなどの大きさは変化させず,
それら4つのムービークリップの座標を,
ステージの大きさが変わる度に再指定してやれば良いのです。
あと, ステージがどんな大きさや形になっても,
「MyMovie」 の外を見せない工夫です。
それぞれのムービークリップの座標は,
ステージ上のオブジェクトに書いてあるとおり,
~~~~~~~~~~~~~~~~~~
TopLeft
x=60,y=0
TopRight
x=Stage.width-60,y=50
BottomRight
x=Stage.width-90,y=Stage.height
MyMovie(書いてませんがステージ中央です)
x=Stage.width/2,y=Stage.height/2
※Stage.width:ステージの幅
Stage.height:ステージの高さ
~~~~~~~~~~~~~~~~~~
です。
「MyMovie」,「TopLeft」,「TopRight」,「BottomRight」というインスタンス名の
4つのムービークリップができましたら,
_root のタイムラインの一番上のレイヤーに次のように書けば完成です。
点線---内のコピペも可能です。
----------------------------------------
// ムービーの拡大・縮小をなしにする
Stage.scaleMode = "noScale";
// ムービーを左上を基準に固定する
Stage.align = "TL";
// 変数 MyMovW,MyMovH に MyMovie の初期サイズを記録
var MyMovW = _root.MyMovie._width;
var MyMovH = _root.MyMovie._height;
// 各ムービークリップの座標や大きさを指定するユーザ定義関数
// designCoordinatesの定義
function designCoordinates() {
// 各ムービークリップの座標を指定
_root.TopLeft._x = 60;
_root.TopLeft._y = 0;
_root.TopRight._x = Stage.width-90;
_root.TopRight._y = 50;
_root.BottomRight._x = Stage.width-60;
_root.BottomRight._y = Stage.height;
_root.MyMovie._x = Stage.width/2;
_root.MyMovie._y = Stage.height/2;
// MyMovie の大きさに関するスクリプト
// もしステージの形が MyMovie より横長であれば
if ((Stage.width/MyMovW)>(Stage.height/MyMovH)) {
// 変数 myscale をステージ幅の比で決定
var myscale = Stage.width/MyMovW;
// もしステージの形が MyMovie より縦長であれば
} else {
// 変数 myscale をステージの高さの比で決定
var myscale = Stage.height/MyMovH;
}
// MyMovie の大きさを指定
_root.MyMovie._xscale = myscale*100;
_root.MyMovie._yscale = myscale*100;
}
// ユーザ定義関数 designCoordinates の実行
designCoordinates();
// リスナーオブジェクトの作成
myListener = new Object();
// リスナーオブジェクト.onResize 関数の定義
myListener.onResize = function() {
// ユーザ定義関数 designCoordinates の実行
designCoordinates();
};
// myListener を Stage.addListener に登録
Stage.addListener(myListener);
----------------------------------------
長くてわかりにくいかもしれませんが,
結局,文全体は
--------------------------------
// ムービーの拡大・縮小をなしにする
Stage.scaleMode = "noScale";
// ムービーを左上を基準に固定する
Stage.align = "TL";
function 任意の関数名() {
//←ココに何かすることを書く
}
// 任意の関数の実行
任意の関数名();
// リスナーオブジェクトの作成
任意のリスナー名 = new Object();
// リスナーオブジェクト.onResize 関数の定義
任意のリスナー名.onResize = function() {
// 任意の関数の実行
任意の関数名();
};
// 任意のリスナー を Stage.addListener に登録
Stage.addListener(任意のリスナー名);
--------------------------------
という構造になっています。
function 任意の関数名()
は特に定義しなくてもいいのですが,
定義しないと同じ事を2回も書かないとならないため,
各ムービークリップの配置をする関数を作りました。
あと SWF とともに HTML をパブリッシュする場合は,
パブリッシュ設定で「HTML」タブを選択して,
「サイズ」を「パーセント」にして,
100×100パーセントなどでパブリッシュしてください。
そうでないとせっかく書いたスクリプトの意味がなくなります。
Flash の話ではなく HTML の話ですが,
Flash の周りに余白ができるのがダメでしたら,
<body>タグを
<body bgcolor="#ffffff">
↓変更↓
<body bgcolor="#ffffff" topmargin="0" leftmargin="0"rightmargin="0">
のようにしてください。マージンが 0 になります。
長くなった上,書籍のようにうまくは説明できませんでしたが,
以上です。
Flashゲーム講座&ASサンプル集
【表示に関する情報について】
http://hakuhin.hp.infoseek.co.jp/main/as/stage.h …
「Stage.onResizeリスナーイベント」
http://www.fumiononaka.com/TechNotes/Flash/FN030 …
この回答への補足
すごい!!長い!!
ありがとうございます。
さっそくチャレンジしてみます。
分からなくなったらまた質問させてもらうかもしれません。
本当にありがとうございました。
できました。
リンク先の分も参考になりました。どちらかと言うとやりたかったのは
「質問:画面サイズが変わると移動するスクリプト」の方でした。
すみません。
それであつかましいのですが、もう少し質問させて下さい。
「質問:画面サイズが変わると移動するスクリプト」の背景にウィンドウサイズに合わせて
縮小拡大する画像を貼り付けたいのです。
自分なりにいろいろ試してみたのですがダメでした。
教えて下さい。お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- マルウェア・コンピュータウイルス FlashPlayerの削除とマルウェア感染について 5 2023/02/23 20:52
- PHP 「基礎からのMySQL 第3版 Kindle版」を数年前購入して全部やりました。 1 2022/09/15 05:32
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- ホームページ作成・プログラミング Adobe FLASH に代わるソフトはありますか? 4 2022/09/27 19:35
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Amazon 数ヶ月前にamazonで注文した書籍が今ごろになってレターケースに入れられていました。 しかもその書 2 2023/08/17 19:38
- 実用・教育 般若心経の解説本に関して 2 2023/05/17 23:27
- USBメモリー・SDカード・フラッシュメモリー プリンタのドライバーをUSB Flash Diskに保存したい。 4 2023/05/23 23:30
- PHP PHP ページング データベース 1 2022/06/16 10:30
- 転職 転職のため、SPIを受ける事になりました。練習用の書籍を探しますと、SPI、SPI3とかありますが、 1 2023/02/10 13:05
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python ボタンを押すと複数の関...
-
四乗根を英語で言うと・・・
-
ADに参加していないPCからADサ...
-
PythonでSetWindowPosを使うに...
-
else if文の順序を変えることに...
-
Flashで、ナビゲーションがマウ...
-
pythonの画像の貼り付けについて
-
画像を中央にズームさせるには
-
別のアプリケーションのテキス...
-
テキストボックスにセルの値を...
-
VBScriptでMsgBoxのYesNoボック...
-
五芒星は、悪魔崇拝とどういう...
-
全てのテキストボックスをセル...
-
テキストボックスの中身をリセ...
-
フォームの生成と破棄
-
YOASOBI
-
photoshopで書いた四角の枠の中...
-
flashのおみくじのような(4桁...
-
変数に256文字以上のテキストを...
-
'2465'指定した式で参照してい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python ボタンを押すと複数の関...
-
else if文の順序を変えることに...
-
四乗根を英語で言うと・・・
-
PythonでSetWindowPosを使うに...
-
ADに参加していないPCからADサ...
-
tkinterからplt.plot()を呼びたい
-
Pythonのtkinterについて
-
pythonのグローバル変数
-
PYTHONのtkinterについて
-
flash 大きさの異なる写真のス...
-
関数をプロパティとして代入する際
-
pythonの画像の貼り付けについて
-
SNMPの標準MIBについて
-
2分木を中順でなぞりたいので...
-
Flashvars getURLの書き方
-
リンクでのエスケープシーケン...
-
Flashの表示サイズを動的に変更...
-
■外部jpgをクロスフェードさせ...
-
ゲージと連動したムービークリ...
-
ボタンの上にマウスを置くと虫...
おすすめ情報