actionscript1.0でJPGを読み込んでるところをSWFに、、、

初心者のため良く分からないため質問いたします。

FLAを開くと設定はFlashのactionscript1.0 パブリッシュ設定がFlash Player8.0でした。
現在上記設定で下記scriptが書かれているものをFlashCS4で開いています。
そして現在3つのJPGを読み込んでいるのですが、そこをSWFに変更したいと考えています。
現在はAS1.0ですが、これを機会にAS3.0に変えたいとも考えています。
どう調べていいか分からないので質問させていただきました。
質問自体よく分からないかもしれませんが、非常に困っています。
よろしくお願いいたします。


onClipEvent (load) {
Pass = "img_top_flash/";
Timer = _root.Sec*30;
cnt = 0;
this._y = 300; //元はthis._y = -20;
this.loadVariables( Pass + "top_flash_url.txt");
function loadJPG() {
_root.Loaded = false;
cnt = 0;
if (num == Max) {
num = 0;
} else if (num<0) {
num = Max-1;
}
depth++;
if (depth>1) {
_root.mc["m"+(depth-2)].removeMovieClip();
}
navi.slider._alpha = 100;
mcName = "m"+depth;
_root.mc.attachMovie("pic",mcName,depth);
_root.mc[mcName].fileName = Pass+picArray[num]+".jpg";
for (i = 0; i < Max; i++) {
if (i == num) {
navi.mc["b"+i].gotoAndStop(2);
} else {
navi.mc["b"+i].gotoAndStop(1);
}
}
}
}
onClipEvent (data) {
picArray = files.split(",");
Max = picArray.length;
for (i = 0; i < Max; i++) {
mcName = "b"+i;
navi.mc.attachMovie("navi_btn",mcName,i);
navi.mc[mcName].num = i;
navi.mc[mcName]._x = i*20;
}
navi.mc.attachMovie("sankaku","sankaku",Max);
navi.mc.sankaku._x = Max*20;
num = depth = 0;
loadJPG();
}
onClipEvent (enterFrame) {
if (Max>1 && _root.Loaded) {
//this._y -= this._y/4;
this._y -= this._y/100;
if ( this._y <= 280 ) {
this._y = 280;
}
navi.slider._x += (num*20-navi.slider._x)/_root.spd;
navi.slider._alpha += (50-navi.slider._alpha)/_root.spd;
cnt++;
if (cnt>Timer) {
num++;
loadJPG();
}
}
}

このQ&Aに関連する最新のQ&A

A 回答 (3件)

> これを機会にAS3.0に変えたいとも考えています。


> どう調べていいか分からないので質問させていただきました。

ムービーの構造などからして全面作り替えなので,
ActionScript のみの変更で ActionScript 3.0 に変更することはそもそも不可能ですから,
書き替える(作り直す)のはあくまでも質問者さんで,
回答者ではないということでよろしいですよね?


onClipEvent (load) {} や onClipEvent (data) {} や onClipEvent (enterFrame) {} などは
主に ActionScript 1.0 でも最も古い Flash 5 で使われていた
ムービークリップ 自体に書く onClipEventイベントハンドラ と呼ばれるもので,
ActionScript 1.0 でも Flash MX 以降は普通使われなくなりました。

Flash MX 以降では
フレーム に書く イベントハンドラメソッド に移行され
とうとう ActionScript 3.0 においてはムービークリップ自体には何も書くことはできなくなりました。

onClipEvent (data) {}
これは ムービークリップ が登場(表示)されたときに1回だけ実行される onClipEventイベントハンドラ です。

ActionScript 3.0 の場合,
フレーム や クラスファイル に書く必要があります。


onClipEvent (data) {}
これは 外部テキストデータ を Flash 内(ムービークリップ内) にロードし,
そのデータが「ロード完了!」したときに実行される onClipEventイベントハンドラ です。

ActionScript 3.0 の場合,
URLLoader クラスのインスタンスを準備して,
そのインスタンスに外部テキストをロードし
Eventクラスの COMPLETE 発生時に何かをすることになると思います。
「ActionScript 3.0で外部テキストファイルを読込む」
http://f-site.org/articles/2007/02/08061116.html


onClipEvent (enterFrame) {}
これは 1フレーム進む時間毎に毎回実行されるonClipEventイベントハンドラ です。

ActionScript 3.0 の場合,
Eventクラスの ENTER_FRAME 発生時に何かの関数を実行することになると思います。
「繰り返し発生するイベント Event.ENTER_FRAME」
http://oshige.com/flash/as3note_cs4/2009/09/-eve …



次に各onClipEventイベントハンドラ の内部に入ります。

attachMovie
ActionScript 3.0 の場合
これはライブラリにあるムービークリップを「ActionScriptで書き出す」設定にし,
ムービークリップ にクラス名を付け
new でそのクラスを呼び出し,ステージ上に addChild します。
「ActionScript3 初心者講座まとめ ムービークリップを張ってみる 」
http://www22.atwiki.jp/flashcs3/pages/13.html

removeMovieClip
ActionScript 3.0 の場合
その消したいインスタンスが存在する階層
つまりそのインスタンスの親階層に,
「子を削除せよ」=removeChild という命令をします。
「BONKURA BLOG - [AS3.0]ライブラリからムービークリップを追加」
http://blog.bonkura.jp/2008/08/as30-1.html

とにかくドキュメントの全面作り替えです。
#1の方のおしゃるように考え方も全面改定した方が良いかもしれません。
だいたいそんなところです。

これでほぼ回答字数制限いっぱいです。
    • good
    • 0

今現在(2010年5月16日 12時02分 現在),


なぜか非表示になっている #2 です。

#1 の方への補足(お礼)を拝見しました。

> このスクリプトをどうすれば、
> swfを読み込めるのかという事を知りたいので、
>   ~略~
> AS1.0のままでもかまいませんので、、。

と書かれていらっしゃいますが,
ご質問で書かれていらっしゃるスクリプトの中に
JPEG をロードする部分などありませんよ。


this.loadVariables( Pass + "top_flash_url.txt");

これで,
Pass = "img_top_flash/";

top_flash_url.txt
を連結したファイル
つまり「img_top_flash/top_flash_url.txt」
つまり「img_top_flash フォルダ内の top_flash_url.txt」
を,そのムービークリップ内にロードして,
その 「top_flash_url.txt」 に書いてあるもの(JPEGファイル名)をロードするんじゃないでしょうか?

それで,外部テキストで 「ファイル名(拡張子抜き)」 まで指定しておいて,

_root.mc[mcName].fileName = Pass+picArray[num]+".jpg";

の部分で拡張子「.jpg」を付け加えていると思います

したがって上の +".jpg"; の部分を +".swf"; にすれば良いと思います。



ムービー全体が見えないので何とも言えません。
とにかく書かれていらっしゃるスクリプトには
JPEG をロードするスクリプトはありません。
推測することだけしかできません。

多分,
JPEGをロードするスクリプトの本体は
ライブラリにあるムービークリップシンボルの中に書き込まれてあるような気がします。
    • good
    • 0
この回答へのお礼

非常に丁寧な回答をしていただきましてありがとうございます。
BlurFiltanさんの回答を参考に頑張ってみたいと思います。
ほとんど知識が無い状態でしたので非常に勉強になりました。
ありがとうございました。

お礼日時:2010/05/16 16:14

as1.0からas3.0に書き換えたいと言う事ですね?



根本的に書き方、考え方がかわりました。

・イベントは「addeventlistener」を使用します
・プロパティの頭に「_」は付きません。
・rootはメインのタイムラインとは限らない
・attachMovieはなくなりました。

詳しくは見ていませんが、この辺りが関係ある大きな変更かな?
その他、変更点は大量にありますので、
as3.0の事を普通に勉強しながら、書き換える方が良いと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
急いでいますので、今回のこの質問では
このスクリプトをどうすれば、
swfを読み込めるのかという事を知りたいので、
今回は「勉強しながら」というのはひとまず置いといて
ご回答の方をよろしくお願いいたします。
AS1.0のままでもかまいませんので、、。

お礼日時:2010/05/16 10:53

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

このQ&Aと関連する良く見られている質問

Qx1 = x2; x2 = this._x;

FlashのActionScript勉強中のものです。これまでプログラミングの経験などはないものです。
よろしくお願いします。

Flashでマウスで対象のMCボールを投げるというtipsの中で下記のように書かれています。
「 投げたときのスピードや方向は何を求めれば計算できるかといえば、ボールを離した時の位置と、その直前の位置がわかりさえすれば求めることができます。
簡単にするために横方向、つまりx方向だけを考えることにします。ボールを離した時の位置(仮にx2とします。)、その直前の位置(仮にx1とします)がわかれば、x方向のスピードはx2-x1で求めることができます。
ボールを離した時のx2の位置はそのままボールの現在位置ですので、すぐわかりますが、
その直前の位置はどうやればわかるでしょうか?
結論から言うと直前の位置x1に前回計算したx2の位置を代入してやります。そうすると、常にx1はx2の直前の値が入ることになります。スクリプトで書くとこうなります。

x1 = x2;
x2 = this._x;
speed = (x2-x1);

この3行の式をこの順番で延々計算を繰り返していると考えると、x2には現在の位置、x1には前回計算したときの現在位置つまり直前の位置が入っていることになります。そして、x方向のスピードspeedは常にx2とx1との差として求められています。 」

とあるのですが、なぜ x1 が直前の数値となるのかが上手く理解出来ません。
仮に _xが
1fpsで_x=5
2fpsで_x=10
3fpsで_x=20
4fpsで_x=40
5fps(現地点)で_x=55
だったとして、x1もx2も55という事なのでは??と思ってしまいます。
なぜ、x1に直前の値(例では4fpsでの_x=40)がx1に入ることになるのでしょうか?

ご教授いただきたく思います。
よろしくお願いします。

FlashのActionScript勉強中のものです。これまでプログラミングの経験などはないものです。
よろしくお願いします。

Flashでマウスで対象のMCボールを投げるというtipsの中で下記のように書かれています。
「 投げたときのスピードや方向は何を求めれば計算できるかといえば、ボールを離した時の位置と、その直前の位置がわかりさえすれば求めることができます。
簡単にするために横方向、つまりx方向だけを考えることにします。ボールを離した時の位置(仮にx2とします。)、その直前の位置(仮にx1としま...続きを読む

Aベストアンサー

#2です。
説明の数値が変になっています。

> なぜそうなるかを1フレームずつ考えます。
  ~   ~
> あとは繰り返しです。

の間を訂正させてください。


----訂正↓--------------------------------

なぜそうなるかを1フレームずつ考えます。

 1フレームで_x=5  … x1 = ? , x2=5

x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 は何も定義されていません。
したがって,x1 も未定義 undefined になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 5 となります。


 2フレームで_x=10 … x1 = 5 , x2=10

x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 の値は前のフレームで代入された値 5 になっています。
したがって,x1 = 5 になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 10 となります。


 3フレームで_x=20 … x1 = 10 , x2=20

x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 の値は前のフレームで代入された値 10 になっています。
したがって,x1 = 10 になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るので,
x2 = 20 となります。


あとは繰り返しです。

-------------------------------------------

すみません。
以上,訂正でした。

#2です。
説明の数値が変になっています。

> なぜそうなるかを1フレームずつ考えます。
  ~   ~
> あとは繰り返しです。

の間を訂正させてください。


----訂正↓--------------------------------

なぜそうなるかを1フレームずつ考えます。

 1フレームで_x=5  … x1 = ? , x2=5

x1 = x2;
で x1 には x2 が代入されますが,
この時点で x2 は何も定義されていません。
したがって,x1 も未定義 undefined になります。
x2 = this._x;
で x2 には,現在のx座標の値が入るの...続きを読む

QhitTest(_root._xmouse, _root._ymouse, true)が有効になりません

WinXP,Flash8pro,photoshopCS2,IllustratorCSで
オーサリングしています。


フォトショとイラレでPNG画像を作成し、
Flash8Proに読み込んでステージに配置し、
MCに変換してから
hitTestスクリプトで
hitTest(_root._xmouse, _root._ymouse, true)としようとしていますが、
hitTest(_root._xmouse, _root._ymouse, false)で
処理されてしまいます。
FireWorksで作成したFireWorksPNG形式だと
正常にTrueで動作します。

フォトショやイラレのPNGでは透過部分を判別し、True判定できないのでしょうか?

また、どのようにしたらフォトショやイラレのPNGを
Trueで処理できるのでしょうか。
どうぞ宜しくお願い致します。

Aベストアンサー

#1です。


「色数」は”どのくらい多くの色を識別するか”ではなく、”2つのピクセルの RGB 値にどのくらいの差があったら違う色と見なすか”の設定です。
一般的には、「色数」を小さくするとオリジナルに近い絵に、大きくすると単調な色使いのイラスト風に仕上がります。

私が説明するよりもヘルプに詳しく載っていますので、そちらをご参考になさってください。
最高の精度と思われる設定についても説明があります。
少々重いのですが、LiveDocs ではこちらのページになります。

 ・ Flash ドキュメンテーション:ビットマップからベクターグラフィックへの変換
  http://livedocs.macromedia.com/flash/8_jp/main/00000563.html

Flash 8 に付属のヘルプでは、「 Flash ユーザーガイド」→「読み込まれたアートワークの使用」→「読み込まれたビットマップの編集」→「ビットマップからベクターグラフィックへの変換」→「+ビットマップからベクターグラフィックに変換するには:」とたどっていくと、同じ記述があります。


ビットマップをトレースしたものは、円などの描画ツールを使用して描いた図形やフリーハンドで描いたイラストよりもアンカーポイントが多くなりがちです。
高精度のトレースであるほどオリジナルに近くなりますが、トレースに時間がかかったり、容量が元の画像とあまり変わらなくなるか、かえって肥大することもあり得ますので、ほどほどにしましょう。

***********************

Illustrator は絵の編集を得意とするソフトですから、Flash よりもきれいにトレースできると思います。
トレースしたイラストは、swf ・ ai ・ eps などで書き出すと Flash に持って行けます。


Flash 8 では、Illustrator 6 ~ 10 までの ai ファイルであれば直接読み込めます。
( Illustrator CS では旧バージョン向けに保存してください。Flash 8 は今のところ、CS 以降の ai ファイルには対応していません)

ただし、Flash では解釈できないデータ(グラデーションメッシュなど)もありますから、Illustrator で描いた絵をそっくりそのまま持って行けるわけではありません。
また、Illustrator と Flash の様々な違いにより、細かい線の欠落や隙間がつぶれる・グラデーションが読み込めない・マスクが外れるなどの症状が出ることもあるようです。

普通の線と塗りだけのイラストであれば ai ファイルでもそれほど深刻な問題は起こらないかと思いますが、最も無難な線は swf ファイルに書き出して持って行くことです。


ちなみに、Illustrator で描いた絵を Flash に持って行く時の注意点は以前別の質問で回答したことがありますので、よろしければご参照ください。

 ・イラレの画像をFLASHで使いたい
  http://okwave.jp/kotaeru.php3?q=1612238

↑ Flash MX の話で対応している ai ファイルのバージョンが古いのですが、swf ファイルで持って行く場合の扱い方は Flash 8 でも同じです。


Illustrator の操作で不明な点がありましたら、「グラフィック」のカテゴリーで質問してみてください。
詳しい方からの回答が付くかと思います。
一応使ってはいますけれど、あまり詳しくありませんので ^^;

-----------------------------------------------------------

ところで、#1の

 > ムービークリップが持っていた BitmapData オブジェクトが使用している自動的に削除されるのかどうかは不明です。

は、意味不明でしたね。
正しくは

 ムービークリップが持っていた BitmapData オブジェクトが使用しているメモリが自動的に解放されるのかどうかは不明です。

です。

考えながらいろいろ書き直しているうちに、文章がおかしくなってしまったようです。
失礼いたしました。

#1です。


「色数」は”どのくらい多くの色を識別するか”ではなく、”2つのピクセルの RGB 値にどのくらいの差があったら違う色と見なすか”の設定です。
一般的には、「色数」を小さくするとオリジナルに近い絵に、大きくすると単調な色使いのイラスト風に仕上がります。

私が説明するよりもヘルプに詳しく載っていますので、そちらをご参考になさってください。
最高の精度と思われる設定についても説明があります。
少々重いのですが、LiveDocs ではこちらのページになります。

 ・ Flash ドキュ...続きを読む

Q(AS3)「var mc:MovieClip = new MC?();」 の?の部分を変数にできないか

タイトルの通りです。
今ライブラリには100個のムービークリップがあって、それぞれMC1~MC100までのリンケージ名(クラス名)でActionScriptに書き出しているものとします。
これらを動的に「var mc:MovieClip = new MC?();」というふうにしたいのですが、うまくいきません。

一応下のように自分なりに考えてみたのですがやっぱりダメでした。
var i:int = 3;
var str:String = "MC"+i;
var mc:MovieClip = new str();
stage.addChild(mc);

Aベストアンサー

import flash.utils.getDefinitionByName;

var i:int = 3;
var str:String = "MC"+i;
var mcClass:Class = getDefinitionByName(str) as Class;
if(mcClass != null){
var mc:MovieClip = new mcClass();
stage.addChild(mc);
}

こんな感じでどうでしょう?

Q_rootにある変数への、MCの中のボタンからパスで困っています

いつも、ありがとうございます。ずっと悩んでいます。
_rootのフレームにnrbという変数を作り、if(nrb < 1)で処理を分けることにしました。
_root上にtateというMCがあり、その中のボタンtate01をクリックすると変数nrbに1が入るようにしたいのですが、相対パスで_parent.nrb = 1としても、絶対パスで_root.nrb = 1としても、root上の変数nrbの値が変わってくれません。パスの書き方に間違いがあるのではと、いろいろ試してみましたが、うまくいきません。
よろしく、お願いします。

Aベストアンサー

実際にMCもボタンも作ってやってみました。
しかし,

----------------------
on (release) {
_root.nrb = 1;
}
----------------------

と書いても,

----------------------
on (release) {
_parent.nrb = 1;
}
----------------------

と書いても,_root の nrb という変数にはちゃんと1が入りました。

>> if(nrb < 1)で処理を分けることにしました。

と書かれている部分が気になったのですが,
具体的に言うとボタンに以下のように書くということでしょうか?

----------------------
on (release) {
if (_root.nrb<1) {
_root.nrb = 1;
}
}
----------------------

もし,そうだとすると, _root.nrb<1 が判断されていないのではないでしょうか。
ただ変数名の付いたテキストフィールドを用意するとか,
なにも用意せずに,いきなり変数を if (_root.nrb<1) としても,
nrb には実際何も数が入っていないので,上の if は通らない可能性があります。

trace(nrb);

でムービープレビューしてみると,変数に何も値が入っていない場合
undefined とか _level0.nrb とかが表示されると思います。
undefined も _level0.nrb も 1より小さい数ではないので, if が通らないのではないでしょうか?

もしそうだとしたら,フレームのスクリプトなどで,
nrb = 0;
とセットしておいて,_root.nrb<1 で判断させればうまく行くかもしれません。

おそらく,本当は難しいことをされていて,それをこちら側が理解しやすいように,簡略化させて質問されているのだと思います。
だから,他に原因があるかもしれない単なる推測です。

実際にMCもボタンも作ってやってみました。
しかし,

----------------------
on (release) {
_root.nrb = 1;
}
----------------------

と書いても,

----------------------
on (release) {
_parent.nrb = 1;
}
----------------------

と書いても,_root の nrb という変数にはちゃんと1が入りました。

>> if(nrb < 1)で処理を分けることにしました。

と書かれている部分が気になったのですが,
具体的に言うとボタンに以下のように書くということでしょうか?

------------...続きを読む

Qthis._x と this._yをドラッグした後の値に変更したい

バージョンはFLASH8です。
attachMovieメソッドでインスタンスを作成しました。
インスタンスは複数あり、作成した後にドラッグして場所を入れ替えます。
それぞれのインスタンスを衝突判定します。赤い箱のムービークリップに衝突したら、インスタンスは箱に入り、青い箱に衝突したら元の場所に戻るようにしたいのです。
どうしても、その「元の場所」が移動した後の座標ではなく、最初にインスタンスを作成した座標になってしまうので、困っています。

どうぞ宜しくお願い致します。

Aベストアンサー

> その「元の場所」が移動した後の座標ではなく、

難しい書き方で,
結局,「元の場所」とはどこなのかよくわかりませんね。
青い箱の場所にドラッグして 移動した後の場所 は青い箱の場所なわけですから,
青い箱にヒット状態の場所ということになります。
これは変ですね。

勝手な推測ですが,
「元の座標」とは, 移動した後の座標 ではなく,
「ドラッグを開始」した場所なのではないでしょうか。
ここで言う「ドラッグを開始した場所」というのは,
最初の最初にドラッグを開始した場所(最初にインスタンスを作成した座標)ではなく,
青い箱に衝突するすぐ前にドラッグを開始した場所です。

失敗作の「最初にインスタンスを作成した座標」に戻るスクリプトを書いてくださった方が,
変形しやすく答えやすかったと思いますが,
勝手に作った状況では次のようにスクリプトを書けば,
青い箱に衝突したらその前にドラッグを開始した場所に戻る物はできます。

次のスクリプトは,
_root(メインムービーのステージ上)に「blueMC」というインスタンス名のムービークリップがあったとして,
ドラッグするムービークリップのフレーム1に書くスクリプトの例です。

---------------------------------------
// ---マウスプレス時の処理 ---
this.onPress = function() {
// ドラッグ開始
this.startDrag();
// ドラッグ開始時の座標を記録
my_x = this._x;
my_y = this._y;
};
// --- マウスアップ時の処理 ---
this.onRelease = function() {
// ドラッグ終了
this.stopDrag();
// もし blueMC にヒットしていたら
if (this.hitTest(_root.blueMC)) {
// ドラッグ開始時の座標に戻す
this._x = my_x;
this._y = my_y;
}
};
-------------------------------------


勝手に解釈している部分があり,
勝手な状況を想定した回答です。

誤解している可能性も大きいです。
とんちんかんな回答をしていましたらすみません。

> その「元の場所」が移動した後の座標ではなく、

難しい書き方で,
結局,「元の場所」とはどこなのかよくわかりませんね。
青い箱の場所にドラッグして 移動した後の場所 は青い箱の場所なわけですから,
青い箱にヒット状態の場所ということになります。
これは変ですね。

勝手な推測ですが,
「元の座標」とは, 移動した後の座標 ではなく,
「ドラッグを開始」した場所なのではないでしょうか。
ここで言う「ドラッグを開始した場所」というのは,
最初の最初にドラッグを開始した場所(最初...続きを読む


人気Q&Aランキング

おすすめ情報