• ベストアンサー

アクションスクリプト教えて下さい

http://exyz.cocolog-nifty.com/good_sleep/2009/01/flash-40e7.html ↑このサイトを参考にさせていただいてるんですが、 写真が縦にスライドしているのを横にし、 尚かつ http://www.sony.co.jp/の様に上の写真がめくれて、下の写真を表示させたいのですが知識が乏しくお力をお借りしたいのですが、簡単な事なのか、難しい事なのかすら分かりません。 欲を言えばアクションスクリプトを記述していただけると嬉しいのですが... どなたかご教授お願いできませんでしょうか。 //初期設定 SlideNum = 0; Speed = 10; //スライド targetY = new Array(); targetY = [0,-150,-300,-450]; imgGr.onEnterFrame = yMove; function yMove(){ var Dist = targetY[SlideNum]-this._y; if(Math.abs(nDest) < 0.5){ this._y = targetY[SlideNum]; }else{ this._y += Dist/Speed; } }

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

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

Sonyサイトのものは比較的簡単なことです。 細かいところを突っ込まなければすごく簡単なことです。 しかしここではサンプルも提示できませんし 画像も限られていますから十分な説明はできません。 また ActionScript で解決できるような単純なものでもないです。   簡単だけど単純ではない。 です。 少なくとも多分(絶対), 参考にされているサイト( http://exyz.cocolog-nifty.com/good_sleep/2009/01/flash-40e7.html )を間違っています。 まったく違う方向からアプローチする必要があります。 原理だけを説明すると, 「画像がめくれる」というアニメーションをムービークリップの中に作成します。 それも画像の枚数だけ複数作成します。 そしてそのムービークリップ内アニメーションが自動再生しないように stop() などで止めておきます。 そして ボタンの onRelease または on(release) によって, その「画像がめくれる」アニメーション入りムービークリップを 最高深度に移動させるとともに再生を開始させます。 そしてその次の深度に 指示通り のムービークリップを配置します。 このムービークリップ自体も表示された段階では stop() などで自動再生しないように止めておきます。 また, setInterval で同じく 「画像がめくれる」アニメーション入りムービークリップを 最高深度に移動させでも良いと思います。 なお「画像がめくれる」という動作自体は モーショントゥイーン で作成しても良いですし ActionScript で作成しても良いと思います。 書かれていらっしゃる雰囲気からすると モーショントゥイーン で作成する方を強くお勧めします。 「Flashゲーム講座&ASサンプル集【深度について】」 http://hakuhin.hp.infoseek.co.jp/main/as/z.html こちらの方↑が参考になります。 どちらが良いという問題ではなくて Sony サイトを作る上での方向性の問題です。

m-----c
質問者

お礼

ご回答ありがとうございます。 原理だけでも知ることができて満足しています。 もう少し勉強してみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ikeike77
  • ベストアンサー率37% (18/48)
回答No.2

”簡単”、”難しい”はどれほどFlash(他の言語でも)の習熟度によっても異なります。 さて、サンプルをざっと見ていってこれを横スクロール(?)に変えるには、Sprite3の4連ムービークリップを縦並びから横並びにする必要があります。 この下準備をしたところで、Action Scriptを以下のように変えます。 //初期設定 SlideNum = 0; Speed = 10; //スライド targetX = new Array(); targetX = [150,-240+150,-240*2+150,-240*3+150]; imgGr.onEnterFrame = xMove; function xMove(){ var Dist = targetX[SlideNum]-this._x; if(Math.abs(nDest) < 0.5){ this._x = targetY[SlideNum]; }else{ this._x += Dist/Speed; } } 要は_yのY座標を動かすところを_x(X座標)に変更します。 例では240*150の画像4枚ですから、X座標で動かすなら1枚の横の長さ、つまり240pxを動かさなければなりません。 わかりやすいように式で書いてありますが、計算して数値を求めてもいいです。 後はこれらの例に載っているAction ScriptやFlashのソースを見て頑張ってください。

m-----c
質問者

お礼

なるほど!為に成ります! もっと精進していきます。 ご回答ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 1フレームにActionを設定したときの止め方

    ただ今flash勉強中の初心者です。検索したり本を調べたりしても根本が理解できていないためか、解答策が見つからず困っています。 自分で作ったものではないのですが、1フレーム目にActionを書いています。動きとしては、テレビの砂嵐のような画面に、二種類の文字がランダムに出て、ラインもランダムに出てくるという感じです。以下のscriptだと永遠と続くのですが、5秒ぐらいランダムに文字とラインが出て、その後砂嵐の画面だけにして止めたいのですが、どうしたら良いかわかりません。 使用しているソフトはFlash8、MacOSX10.4です。 import flash.display.BitmapData; var tv_noise:BitmapData = new BitmapData(Stage.width,Sage.height,true); _root.attachBitmap(tv_noise,20); _root.attachMovie("text1","text_1",3); _root["text_1"].scale = 350; _root["text_1"].onEnterFrame = random_me; _root.attachMovie("text2","text_2",2); _root["text_2"].scale = 350; _root["text_2"].onEnterFrame = random_me; _root.attachMovie("line","line_1",1); _root["line_1"]._y = Stage.height/2; _root["line_1"]._alpha = 40; _root["line_1"].onEnterFrame = scale_me; function random_me():Void{ this._x = 10+Math.round(Math.random()*Stage.width); this._y = 10+Math.round(Math.random()*Stage.height); this._xscale = this._yscale = Math.round(Math.ramdom() *this.scale); this._alpha = 10+Math.round(Math.random()*100); } function scrach_me():Void{ this._x = 10+Math.round(Math.random()*Stage.width); tv_noise.noise(Math.round(Math.random()*100000),80,170,8,true); } 宜しくお願いします。

    • ベストアンサー
    • Flash
  • flash アコーディオン 元の状態に

    flash アクションスクリプトにてアコーディオンメニューを こちらのブログを参考に作りました。 http://exyz.cocolog-nifty.com/good_sleep/2007/12/au_45b8.html 一応できたのですが、 マウスが離れたら元の状態に戻る様につくれないでしょうか? このjavaでつくったもののようにです。 http://exyz.cocolog-nifty.com/good_sleep/2007/12/javascript_df4d.html 何分スクリプト初心者なため、言語などの理解ができなく応用できません…。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • scriptを使いまわしたい。

    見よう見まねで下記のようなスクリプトを記述しています。 複数のムービークリップに設定していますが、編集するのにかなり手間がかかります。うまく使いまわす方法はございませんでしょうか…。 また、記述の仕方にも問題等ありましたらご指南ください。。 onClipEvent (load) {  sx_move = Math.floor(Math.random() * -10) - 3;  sy_move = Math.floor(Math.random() * 6) - 3;  s_scale = Math.floor(Math.random() * 40) + 40;  _xscale = (s_scale);  _yscale = (s_scale);  n = 1; } onClipEvent (enterFrame) {  _x += (sx_move);  _y += (sy_move); } on (rollOver) {  mx.behaviors.DepthControl.bringToFront(_root);  this.onEnterFrame = function () {   n += 1;   _x -= (sx_move);   _y -= (sy_move);   if (n < 20) {    _x = (_x + 25) / 1.5;    _y = (_y + 12) / 1.5;    _xscale = (_xscale + 50) / 1.5;    _yscale = (_yscale + 50) / 1.5;   } else if (n < 40) {    stop();   } else if (n < 50) {    _x += 13;    _y += 13;    _alpha -= 20;    _xscale = (_xscale) / 1.2;    _yscale = (_yscale) / 1.2;   } else {    stop();   }  }; }

    • ベストアンサー
    • Flash
  • 一つのレイヤーのみフィルターをかける方法

    FLASH8です。 写真の自動スライドショー的なものを作成しようとしています。 あるサイトにあった無料スクリプトをコピペし、表示は問題なくできるようになりました。 そのスクリプトは外部から写真を読み込み、画像と画像のフェードイン・アウト時にブラーエフェクトでつないでいくものです。(下記参照) これにレイヤーを一つ追加し、追加したレイヤー(上階層)はずっと表示させておきたいのですが、そのレイヤーの画像にまでエフェクトがかかってしまいます。 エフェクトをかからないようにする方法はありませんか? ちょっと説明が足り無いかもしれないんですが、何の情報を言ったらいいか分からないので、よければ補足要求いただければ回答いたします。 よろしくお願い致します。 ============================== import flash.filters.BlurFilter; var picsArray:Array = new Array("flash/01.jpg","flash/02.jpg","flash/03.jpg","flash/04.jpg"); var filter:BlurFilter = new BlurFilter(0, 0, 3); var picNum:Number = 0; var nextPic_int:Number var picHolder:MovieClip = _root.createEmptyMovieClip("picHolder", 1); function fadeOut(){ clearInterval(nextPic_int); picHolder.onEnterFrame = function(){ if(this._alpha > 0){ this._alpha -= 1; filter.blurX = (100 - this._alpha) / 4; filter.blurY = (100 - this._alpha) / 4; this.filters = [filter]; }else{ delete this.onEnterFrame; loadPic(); } } } function loadPic(){ trace("picNum: " + picNum); //load the pic here picHolder.createEmptyMovieClip("pic", 1); picHolder._alpha = 0; picHolder.pic.loadMovie(picsArray[picNum], 1); picHolder.onEnterFrame = function(){ if(picHolder.pic.getBytesLoaded() > 4 && picHolder.pic.getBytesLoaded() == picHolder.pic.getBytesTotal()){ this.onEnterFrame = function(){ if(this._alpha < 100){ this._alpha += 2; filter.blurX = (100 - this._alpha) / 4; filter.blurY = (100 - this._alpha) / 4; this.filters = [filter]; }else{ delete this.onEnterFrame; nextPic_int = setInterval(fadeOut, 10000); } } } } if(picNum == picsArray.length - 1){ picNum = 0; }else{ picNum++; } } loadPic(); stop(); ==============================

    • ベストアンサー
    • Flash
  • [Flash]actionscript2.0を用いて歯車を作りたいのですが

    Adobe FLASH CS2を使い2つのかみ合った歯車を制作しています。 ドラッグで片方の歯車を回転させると もう片方の方は逆回転になるはずですが、 うまいことactionscriptをかくことができません。 片方はこのようなactionscriptを使っているのですが うまい作り方はないでしょうか。 よろしくおねがいします。 on (press) { //このMCの基準点からのマウス座標を取得 rx0 = _root._xmouse-this._x; ry0 = _root._ymouse-this._y; //このMCの基準点とマウスとの距離を算出 td0 = Math.sqrt(rx0*rx0+ry0*ry0); //マウスによる回転の差分を算出 tr0 = (Math.PI/2+Math.atan2(ry0, rx0))*180/Math.PI-this._rotation; //onEnterFrame を定義 this.onEnterFrame = function() { //現在のMCの基準点からのマウス座標を取得 rx1 = _root._xmouse-this._x; ry1 = _root._ymouse-this._y; //このMCの回転を計算 this._rotation = (Math.PI/2+Math.atan2(ry1, rx1))*180/Math.PI-tr0; //このMCの移動を計算 }; } on (release, releaseOutside) { //この onEnterFrame を削除 delete this.onEnterFrame; }

  • ASで降らせた雪のマスクの掛け方について。

    下記のサイトのASを使用させていただき、雪の降るFlashを作成したのですが、 参照サイト : http://www.webdesignlibrary.jp/2006/06/flash_snow.php このスクリプトで降らせた雪を、例えば星型の図形をマスクにして、 その範囲内で雪が降るようにしたいと思い、 色々と丸一日掛けて調べたのですが、全く上手く行きません。 とりあえず、色々と調べてみた結果、 【 xxx.setMask 】 を使えば良いのだろうか・・?、、、と言う所までは 行き着いたのですが、スクリプトを、どう改造?してみても、全く思う結果が得られません。 【 _root.setMask 】 で、ステージ全体を、目的の図形MCでマスクする事で、 思う結果に近しいカタチは出来たのですが、_root.setMask でステージをマスクしてしまうと、 例えば、マスク外に何か画像処理を施したくても、マスク外の画像は全て消えてしまいますし、 その画像の大きさ込みでマスクを作成すると、その画像の上にも雪が降ってしまうので、 完全に行き詰ってしまっています。 ASで降らせた雪だけをマスクする方法はありますでしょうか? どなたか、ご存知の方がいらっしゃいましたらば、 是非にご教示願えますと、大変ありがたいです。  何卒よろしくお願い申し上げますm(_ _)m 以下、使用AS ------------------------------------------------ width = 550; height = 400; total = 200; for (var t = 0; t != total; t++) { var mc = _root.attachMovie("snowflake", "snowflake"+t, _root.getNextHighestDepth()); mc._x = (Math.random()*(width+20))-10; mc._y = (Math.random()*(height+20))-10; mc.yspeed = (Math.random()*1.75)+0.25; mc.speed = (Math.random()*3)+2; mc._xscale = mc._yscale=(mc.speed+mc.yspeed)*10; mc.onEnterFrame = function() { var angle = Math.atan2(_root._xmouse-(width/2), _root._ymouse)+1.5707963267949; this._y += Math.sin(angle)*this.speed+this.yspeed; this._x += Math.cos(angle)*this.speed; if (this._x>width+10) { this._x = -10; } else if (this._x<0-10) { this._x = width+10; } if (this._y>height+10) { this._y = -10; } else if (this._y<0-10) { this._y = height+10; } }; } ------------------------------------------------ 【 AS使用環境 】 Adobe Flash CS3, アクションスクリプト2.0

    • ベストアンサー
    • Flash
  • adobe flashアクションスクリプト内の優先順位について。

    adobe flashアクションスクリプト内の優先順位について。 こんにちは。 まだflashをあたり始めて1~2週間ほどしかたっておらず、初歩的で 意味の分からない質問かもしれませんが、教えて頂けると助かります。 アコーディオンメニューを作りたくて、下記のサイトを参考に作成しました。 http://exyz.cocolog-nifty.com/good_sleep/2007/12/au_45b8.html 質問はこのメニューに、flashからマウスが離れると、メニュー1(パネル1)の状態に戻るように するにはどうするのが一番良いのか、ということです。 とにかくまだ用語が分かっておらず、結局 panel02_mc.onRollOut = Delegate.create (this,function():Void{ tw (0,300,320,panel01_mc,panel02_mc,panel03_mc); }); panel03_mc.ononRollOut = Delegate.create (this,function():Void{ tw (0,300,320,panel01_mc,panel02_mc,panel03_mc); }); を付け加える事で思った通りの動きにはなったのですが、ここで疑問がでてきました。 メニュー2からマウスをメニュー3の位置へ動かすと、 メニュー1の状態に戻る命令と、メニュー3の位置へ動く命令が重なっていると思うのです。 実際には、きちんとメニュー3の位置へ動くのですが、アクションスクリプトには ムービークリップの重なり順や、アクションスクリプトにおいて上からの順など 命令文に対しての優先順位があるのでしょうか? なんだか、動くけどもおかしなアクションスクリプトの書き方をしているのではないかと心配で。 本当は、メニュー2かつメニュー3からマウスが離れるとメニュー1の状態に戻るという 命令文をいれたかったのですが...。

    • ベストアンサー
    • Flash
  • 坂道を転がる動きをご教授願いたい

    現在、Flash8にて任意の角度を指定し、 そので転がるボールの動きを作っています。 Actionscriptは以下の通りです。 //角度 rot=0; //転がるmc、ballの質量 m=0.5; //静止摩擦係数 ius=0.05; //運動摩擦係数 iuk=0.07; //時間  t=0; tt=1/30; //重さ w=0.5*9.8; //坂道のmc、saka saka.onEnterFrame=function(){  this._rotation=rot; //垂直抗力  N=w*Math.cos(rot*Math.PI/180); //転がる力  Fp=w*Math.sin(rot*Math.PI/180); //静止摩擦力  Fs=ius*N; //転がるかどうかの判定  if(Fp<Fs){ //運動摩擦力   Fk=iuk*(w*-1); //加速度を出してx、yに代入    Fk_p=[Fk*Math.cos(rot*Math.PI/180),Fk*Math.sin(rot*Math.PI/180)]; Fp_p=[Fp*Math.cos(rot-180*Math.PI/180),Fp*Math.sin(rot-180*Math.PI/180)]; Fnet=[Fp_p[0]+Fk_p[0],Fp_p[1]+Fk_p[1]]; a=new Array(); a[0]=Fnet[0]/0.5; a[1]=Fnet[1]/0.5; t=t+tt; _root.ball._x+=0*t+1/2*a[0]*t*t; _root.ball._y+=0*t+1/2*a[1]*t*t; } //転がるボールのmc、ball ball.onEnterFrame=function(){  this._rotation=rot; } ballが坂道を転がらずあらぬ方向に行っちゃいます。 どこがどう間違っているのかも頭がゴチャついてて判りません。 物凄く勘違いなことをしているのだと思います。 お教え願えればと思います。よろしくお願いします。

    • ベストアンサー
    • Flash
  • Key操作について

    http://www.kaitopurin.com/ 上記のサイトの様にキャラクターをキー操作によって動かしたいのですが、わかりません。 var thirom:MovieClip; var back:MovieClip; var speed:Number = 4; thirom.onEnterFrame = test; function test():Void { if(Key.isDown(Key.LEFT)) this._x -= speed; if(Key.isDown(Key.RIGHT)) this._x += speed; if(Key.isDown(Key.UP)) this._y -= speed; if(Key.isDown(Key.DOWN)) this._y += speed; } 途中までスクリプトを書いてみたんですが、ここから先がわかりません。例えば動かす対象のムービークリップ内にジャンプやしゃがむ動作を取り入れて、ラベルなどで移動する方法が一般的なんでしょうか? どうかご教授お願いします。 環境はMac,flash8です。

    • ベストアンサー
    • Flash
  • フラッシュ、ロールオーバーでスライドするメニューを作りたいのですが

    ?http://www.au.kddi.com/? こちらのauのサイトのトップページのスライドするメニューを 作成したく、 http://www.condo.fromc.jp/flash/memo/index.html ここの5つ目の「スライド式メニュー」を使わせてもらったのですが、 こちらのファイルでは、ロールアウトした際に、全てのタブが 右に戻ってしまいます。ロールアウトした時は、タブを等間隔に 戻す様にしたくて、スクリプトをいろいろといじってみて どうしてもできません。以下のスクリプトのままでは、 右に戻ってしまうのは理屈ではわかるのですが、 計算式がいまいちわかりません。 こちらはどのように修正すればよいのでしょうか? onClipEvent (load) { nMyNum = 0; nTotal = 4; nMinX = 5; nMaxX = 468; nDest = nMaxX; nDelay = 10; this.hitArea = button_mc; function xSetDest(nNum) { var i = 1; while (i<=nNum) { _parent["cont"+i+"_mc"].xSetMove("left"); i++; } while (i<=nTotal) { _parent["cont"+i+"_mc"].xSetMove("right"); i++; } } function xSetMove(sDest) { switch (sDest) { case "left" : nDest = nMinX; break; case "right" : nDest = nMaxX; break; } this.onEnterFrame = xMove; } function xMove() { nNextX = this._x+(nDest-this._x)/nDelay; if (Math.abs(nDest-nNextX)>0.1) { this._x = nNextX; } else { this._x = nDest; delete this.onEnterFrame; } } } on (rollOver) { this.xSetDest(nMyNum); }

    • ベストアンサー
    • Flash
このQ&Aのポイント
  • スクリーンショットを撮影した後、勝手に印刷されてしまう問題が発生しています。どうすれば自動印刷を止めることができるでしょうか?
  • スクリーンショットを取った際、自動的に印刷されてしまう問題に悩まされています。この問題を解決するための方法を教えてください。
  • EPSON社製品を使用している際に、スクリーンショットを撮ると自動的に印刷が行われてしまいます。この自動印刷の問題を解決する方法はありますか?
回答を見る