ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Flashコミュの【質問 初心者専用】《7》

  • mixiチェック
  • このエントリーをはてなブックマークに追加
※※※ 危険・警告投稿の前に下記の事項を必ず読んでください。 ※※※

ここではどんな質問でもOK。
「初歩的な質問だから、自分でしらべろ」と言うのは、ナシです。ある人にとっては、どんなに初歩的で簡単であっても、丁寧に答えること。ツッコミたくなっても、スルーすること!

以下の書き込みルールに従ってください。
1.コミュTOPの「お願い」と「規約」を読んでください。
http://mixi.jp/view_community.pl?id=580

2.質問の前にmixiの過去ログを検索してください。
GoogleやFlash関連サイトも併せて検索するとよいでしょう。
http://www.flash-jp.com/
http://f-site.org/

3.質問の見出しには●をつけてください。視認性が向上します。
 例:『●外部swfが読み込めません!
    質問内容〜〜〜〜〜 』

4.Flashのバージョンはもちろん、Playerのバージョン、AS1.0/2.0/3.0、OSなどご自身のマシン環境を明記するとよいです。
 例:『FlashCS3/Vista,OSX/AS3.0/Player9 (AS2.0の経験なし)』

5.回答するときは、どの質問に対するものか分かるように>>をつけてください。
 例:『>>123 初心者さん
    回答〜〜〜〜 』

6.質問者は問題が解決した場合にはできるかぎりその報告をすること。
====================================
【質問 初心者専用】
http://mixi.jp/view_bbs.pl?id=654923
【質問 初心者専用】《2》
http://mixi.jp/view_bbs.pl?id=2969123
【質問 初心者専用】《3》
http://mixi.jp/view_bbs.pl?id=7035709
【質問 初心者専用】《4》
http://mixi.jp/view_bbs.pl?id=12389991
【質問 初心者専用】《5》
http://mixi.jp/view_bbs.pl?id=21289468
【質問 初心者専用】《6》
http://mixi.jp/view_bbs.pl?id=29178668

コメント(1000)

>>960 maro さん

setPos2(); を実行するタイミングに footermenu がステージ上に無いと、footermenuの座標が変わらないので、setPos2(); は footermenu が現れる6フレームで実行させて、
footermenu のトゥイーンが止まってしまうようであれば、フェードインのモーショントゥイーンを消して、スクリプトでフェードインさせるのが早いかもしれません。

1フレーム目に footermenu を配置して、フレームスクリプトに
footermenu._alpha = 0;
を追加して

footermenu がステージに現れるフレーム(6フレーム目)に
setPos2();
footermenu.onEnterFrame = function() {
 if(this._alpha >= 100) {
  delete this.onEnterFrame;
 }else {
  this._alpha += 数値;
}

っていう感じにしたら正常に動くかと思います。
>> 954: こっふー。さん
> 現状、ロールアウトしてもアニメーションが続く方法に関しては、全くスクリプトを記述していないので、そこが丁度訪ねたい部分でもありました。
_____
肝心のアニメーションをどうされているかについてご説明がありませんので、お答えが難しいです。タイムラインのフレームアニメーションでつくられているのでしょうか?

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

> こちらのように、ロールアウト用のタイムラインを制作して、やればいいのかとも思ったのですが、どうもうまく動かなかったようなので……。
_____
「うまく動かな」いでは、ご説明になりません。→【うまくいきません】
http://www.fumiononaka.com/TechNotes/NGWords.html#U
>> 958: mikさん
大津さんの本はかみくだいた記述に定評がありますので、もっとやさしいものというのも難しいですね。Flashの基本操作は理解されていますか?拙著の2章分(約80ページ)をPDFで公開していますので、試しにご覧になってみてください。あまり差はないかもしれませんけど。
http://www.fumiononaka.com/Books/ActionScript3ProfessionalGuide.html
>963Fumioさん
ありがとうございます。じっくりと拝見させていただきます。
大津さんの本も、もう一度、しっかりと勉強し直します。
>>922 Ryoh-SKさん
アドバイス有り難うございます。
>「…ガベージコレクターは参照を有するオブジェクトを削除しないため、登録されているイベントリスナーに関係したオブジェクトはメモリから自動的に除去されません。…」
FlashPlayerのガベージコレクションがどのような仕組みで動作しているかがポイントなのですね。

【マーク・アンド・スイープ】
http://blog.kaihatsubu.com/archives/001234.html
上記のブログを参照すると、FlashPlayer 8以降ではマーク・アンド・スイープに対応しているようです。
(といっても、Adobe公式の記事ではないので信用できませんが、公式の仕様を自分の力では探し出すことができませんでした…。)
マーク・アンド・スイープに対応しているならば、ルートオブジェクトから参照を辿ってTracerインスタンスに到達できなければTracerはガベージコレクションに入ると考えています。

【addEventListenerによる参照】
次に、addEventListenerによってどのような参照が発生するのかを考える必要があります。
例えば、インスタンスeventDispatcherとインスタンスlistenerObjectを考えます。
eventDispatcher.addEventListener("type", listenerObject.publicMethod);
これにより、eventDispatcherからlistenerObjectへの参照が発生すると考えています。
もし、この考えが正しいならば、
TracerインスタンスからTracerインスタンス(自分)への参照が生じるだけです。
よって、ルートオブジェクトからTracerインスタンスへは到達できないことになります。

上記のマーク・アンド・スイープとaddEventListenerによる参照が正しければ、Tracerインスタンスはガベージコレクションに入ると考えたのです。
すると、TracerクラスでremoveEventListenerメソッドをコールする必要がなくなります。
このremoveEventListenerの省略を行うことができるかがこの実験の目的でした。
(もちろん、Event.ENTER_FRAMEのように資源を無駄に使用するようなイベントリスナーはremoveEventListenerするべきですが。)

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

>>924 Fumioさん
アドバイス有り難うございます。
参照URLによって弱参照における参照カウントやSystem.gcメソッドについて調べることができました。
以前はガベージコレクションを発動するために、使用メモリをどんどん増やすような処理を行っていましたが、その処理をSystem.gcメソッドに置き換えて、実験を再度行ってみました。
その結果、
EnterFrameTracer: 0
とだけ出力され、EnterFrameTracerインスタンスがちゃんと削除されました。
つまり、以前の実験ではガベージコレクションが発動されていなかったようです。
使用メモリを単純に増やしていくだけでは、ガベージコレクションはなかなか発動されないようです。

package {
 
 import flash.display.MovieClip;
 import flash.events.Event;
 import flash.system.System;
 
 //ドキュメントクラス
 public class EventGCTest extends MovieClip {
  
  public function EventGCTest():void {
   new EnterFrameTracer();
   addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  }
  
  function enterFrameHandler(e:Event):void {
   System.gc();
  }
  
 }
}

package {
 
 import flash.display.Sprite;
 import flash.events.Event;
 
 public class EnterFrameTracer extends Sprite {
  
  var i:int = 0;
  
  public function EnterFrameTracer():void {
   addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, false);
  }
  
  function enterFrameHandler(e:Event):void {
   trace("EnterFrameTracer: " + i++);
  }
  
 }
}
967から連続投稿になります。

【Timerについて質問】

EnterFrameTracerではなく以下のTimerTracerを用いて実験を行ってみました。
この場合は、いつまでも出力が続きます。
つまり、ルートオブジェクトからTimerTracerインスタンスへ到達できるということだと思いますが、
TimerTracerインスタンスへどのような参照があるのでしょうか。

package {
 
 import flash.display.MovieClip;
 import flash.events.Event;
 import flash.system.System;
 
 //ドキュメントクラス
 public class EventGCTest extends MovieClip {
  
  public function EventGCTest():void {
   new TimerTracer();
   addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  }
  
  function enterFrameHandler(e:Event):void {
   System.gc();
  }
  
 }
}

package {
 
 import flash.display.Sprite;
 import flash.events.TimerEvent;
 import flash.utils.Timer;
 
 public class TimerTracer extends Sprite {
  
  var timer:Timer = new Timer(100);
  
  public function TimerTracer():void {
   timer.addEventListener(TimerEvent.TIMER, timerHandler, false, 0, false);
   timer.start();
  }
  
  function timerHandler(e:TimerEvent):void {
   trace("TimerTracer: " + timer.currentCount);
  }
  
 }
}
>> 968: shoさん
> public function TimerTracer():void {
  // timer.addEventListener(TimerEvent.TIMER, timerHandler, false, 0, false);
  timer.addEventListener(TimerEvent.TIMER, timerHandler, false, 0, true);
>  timer.start();
> }
_____
弱い参照にしていないからではありませんか?前の回答に引用した「Tweenのアニメーションが途中で止まる」と同じだと思います(あれは逆に、弱い参照にされているため、ガベージコレクトされる場合です)。
>>969 Fumioさん
それが、TimerTracerにおいて弱参照を用いても出力が止まらないのです。
また、967でのEnterFrameTracerではuseWeakReferenceをfalseにしていますが、こちらは出力は止まります。

Timerのイベントについては、特殊なケースなのかなという感じがします。

コンポーネントリファレンスにてTimerのページを参照しても、特にメモリ管理については記述されておらず、疑問に感じています。
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/utils/Timer.html
>> 970: shoさん
> それが、TimerTracerにおいて弱参照を用いても出力が止まらないのです。
_____
私の環境では止まります。Flash CS3 Professional & CS4 Professional/Mac OS X.4.11。
>> 971: 追記です。
Flash CS4 Professional/Windows Vista Home Premiumでも、止まることを確認しました。
>>971 Fumioさん
申し訳ありませんでした!
私のケアレスミスでした。
確かにTimerTracerにおいて弱参照を用いれば出力は止まりました。

ただ、Event.ENTER_FRAMEではuseWeakReferenceをfalseにして出力が止まるのに(投稿967)、Event.TIMERではuseWeakReferenceをfalseにすると出力が止まらない(投稿968)という違いがやはり気になります…。
Timerを回しっぱなしにするようなコードを書くことは無いと思いますが、もやもやするので、もしどなたか理由が分かる方がいたら教えて下さい。

よろしくお願いします。
>>942 ささきちさん
情報ありがとうございます!!
やっぱりFLASH7では限界があるのですね><
例まで用意していただいて恐縮です。
参考にさせていただきますっ
ありがとうございました★
>>975ゅっこさん

>var tokuten=0;
の部分をこの位置に書くとボタン操作のたびにtokutenは"0"になってしまいます。

ボタン以外に記述すると良いのではないでしょうか。

ちなみに、こんな感じだと如何でしょう。

ボタン用
on(release){
var pc=Math.floor(Math.random()*2);
var hi=Math.floor(Math.random()*2);

trace("pc " + pc);
trace("hi " + hi);
trace("tokuten " + tokuten);

_root.createTextField("text_field",0,50,100,200,20);
var tf=_root.text_field;
if(_root.tokuten < 10) {
if(pc<=hi){
tf.text="勝ち";
_root.tokuten++;
}else{
tf.text="負け";
_root.tokuten--;
}
} else {
tf.text="終わり";
}
}

_root1フレーム目
var tokuten=0;
お世話になります。
AS3での質問です。

XMLデータからタイトル(テキスト)をひっぱりだし縦に並べ、ロールオーバーなどのマウスアクションをもたせようとしているのですがテキストの塗り部分にしか反応しません。
AS2ではテキストの上のレイヤーに透明の塗りを配置してヒット領域をつくってましたが
AS3の.asデータから作る場合どのようにヒット領域を作るのが一般的でしょうか??
>>975ゅっこさん

追記です。
上記で書いた場合、10回勝つと終わりになります。
10回クリックで終わりにする場合はボタンの記述を下記のようにすると良いのかな。

on(release){
var pc=Math.floor(Math.random()*2);
var hi=Math.floor(Math.random()*2);

_root.tokuten++;

trace("pc " + pc);
trace("hi " + hi);
trace("tokuten " + tokuten);

_root.createTextField("text_field",0,50,100,200,20);
var tf=_root.text_field;
if(_root.tokuten < 10) {
if(pc<=hi){
tf.text="勝ち";
// _root.tokuten++;
}else{
tf.text="負け";
// _root.tokuten--;
}
} else {
tf.text="終わり";
}
}

また、勝ち数と負け数をそれぞれ表示するのであれば別に勝ち負け数の集計をする必要がありますね。
> 977 よっぺ さん

AS3でヒット領域を作る一般的な方法などないと思います。
方針の問題でしょう。


> AS2ではテキストの上のレイヤーに透明の塗りを配置して
> ヒット領域をつくってましたが

それは単によっぺさんの方針がそうだっただけです。
それが方針であれば AS3 でも同様にすれば良いと思います。
何の異論もありません。


問題は
「テキストの上のレイヤーに透明の塗りを配置してヒット領域をつくる」
という方針で行くか行かないかです。
AS2,AS3の問題ではなく,
それ以外の方法をとりたいのでしたらそのようにすれば良いかと。

たとえば,
テキストフィールド自体でイベントを感知しても良いではないでしょうか。
AS2 も AS3 も変わりありません。

例えば枠線ありのテキストフィールドをムービークリップの中に作成して,
ムービークリップをクリックするイベントを感知しても良いではないでしょうか。
AS2 も AS3 も変わりありません。

何をしたいかによって方法は変わりますし,
どれが一般的もないと思います。
AS2 ,AS3 に関わらず。
>> 977: よっぺさん
> AS3の.asデータから作る場合どのようにヒット領域を作るのが一般的でしょうか??
_____
ActionScript 3.0のクラス(.asファイル)を定義して、MovieClipシンボルでボタンを作成したいということですか?

参考:「ActionScript 3.0に対応したMovieClipのボタンをつくる」
http://www.fumiononaka.com/TechNotes/Flash/FN0706001.html
> 981 ささきち さん

方針に沿った最適な方法で作るですねっ
現在どういうやり方で何を使っているかなどの方針やデータの形などの情報を出してなかったので「普通どうやりますか?→いろいろあるよ」という流れになってしまって申し訳ないです。
情報整理が下手で長くなってしまいましたが以下に記載します

---どういうものをどう作っているか---
Five3Dという3Dライブラリを使いXMLから生成したタイトルをロールオーバーしたとき
画像サムネイルを表示するといったものを作ろうとしています。

データの種類は以下の通り
flaデータ(ドキュメントクラスを入力し、FLA自体は空)
asデータ(メインとなるデータ、XMLをロードするデータ、Five3D関係のデータ)
XMLデータ(タイトル、サムネイル画像のパス)
画像データ(サムネイルの画像)

//---------------タイトルを生成する部分------------------
public function createTitle() {
_worksTitleBox = new Sprite3D();
for(var i = 0; i < worksXml.param.length(); i++){
var _worksTitle:DynamicText3D = new DynamicText3D (HelveticaBold);
_worksTitle.size = 30;
_worksTitle.color = 0x555555;
_worksTitle.text = worksXml.param[i].@id;
_worksTitle.x = 0;
_worksTitle.y = 40 * i;
_worksTitle.addEventListener (MouseEvent.ROLL_OVER, thumRollOverHandler);
_worksTitleBox.addChild (_worksTitle);
}
_rotationField.addChild(_worksTitleBox);
}
----------------------------------------------------
このときロールオーバーの判定が文字の塗り部分のみになってしまいますがヒット領域をタイトルの長さに合ったものにしたい場合その範囲のheightは一定にしwidthをXMLで設定すればいけるのではないかと思っていますが肝心のヒット領域を作る方法がわからない状態です。

コレとは別のもっと簡単な設定方法がある可能性もありますのでご存知でしたら教えて頂ければと思います。

> 982 Fumioさん
いつもお世話になってます。
参考サイトは既に拝見していたのですが、できるだけ.as内で処理したいのでFLAでMCを作ってという方法はとらない形で進めています。

>> 980: ゅっこさん

↓★コミュのルールは読みましょうね。↓

3.質問の見出しには●をつけてください。視認性が向上します。
 例:『●外部swfが読み込めません!
    質問内容〜〜〜〜〜 』

ゅっこさんがどれくらいのスキルなのか全くわからないので、取りあえず自分で出来るところまで作ってみて、出来ない部分を質問するようにしましょう。

この書き込みだけをみると、教えて=作って!に聞こえてしまいます。
まずは、何をやりたくてどう考えたかを整理して書き込んでみましょう。

ちなみに、FlashとCGIでのデータのやりとりは下記が参考になるかも知れません。

http://hima.chu.jp/flash/tips/flash_cgi.htm
>> 983: よっぺさん
> 参考サイトは既に拝見していたのですが、できるだけ.as内で処理したいのでFLAでMCを作ってという方法はとらない形で進めています。
_____
DynamicText3DクラスはSpriteクラスを継承しているようですけど、Sprite.hitAreaプロパティが使えないということでしょうか?
> 981 Fumio さん

SpriteにhitAreaというものがあると教えて頂き調べた結果
無事に動作してくれるようになりました。

>>Sprite.hitAreaプロパティが使えないということでしょうか?
Sprite.hitAreaプロパティが知らなかったのが最大の問題だったようです。

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

>>980 ゅっこ さん

ご質問全体が漠然としているので漠然とした方法論的な回答しか書けませんが
その漠然とした回答を書きます。

> Flashでは、テキストデータを読み込むことはできても、
> 書き出すことはできないのですよね??

書き出すデータをどこでどう使いかによって変わります。

Flashのゲームなどで個人の得点などを
ローカルPCに保存するのには SharedObject が良く使われます。
テキストファイル は保存できませんが
ローカルPC やごく限られた条件でのサーバに
テキストデータを保存することはできます。

Google検索「SharedObject」
http://www.google.co.jp/search?hl=ja&q=SharedObject&lr=&aq=f&oq=

データを保存するのがサーバ上でしたら,
普通は CGI などを使います。
つまり同じデータを複数の人で共有する場合などです。
例:ゲームのランキング など

データを保存するのがローカルでしたら,
普通はこの SharedObject を使います。
つまりデータを個人的に参照する場合などです。
例:ログイン時のユーザ名やパスワードの保存
  自分の過去のゲームの得点参照&保存 など


> Flash内でのデータを元に
> 折れ線グラフを作りたいのですが、
> できますか??

折れ線のみを考えると
lineTo moveTo で簡単にできます。
Google検索「lineTo moveTo Flash」
http://www.google.co.jp/search?hl=ja&rlz=1T4GGLL_jaJP307JP308&q=lineTo+moveTo++Flash

ただ,それをどう見せるかを考えるのがかなり難しいと思います。

例えば
「過去の体重グラフ」というものを考えたとします。
赤ちゃんが生まれてから生後3ヶ月までのグラフと
相撲取りが相撲界に入ってから10年のグラフでは
時間軸(横軸)のとりかたも,体重(縦軸)のとりかたもぜんぜん違います。

要は同じ物でも人によって範囲や値などが変わる場合が多いです。
どんな値や範囲であっても対応するものを作るなどを考える場合かなり難しいと思います。

折れ線グラフでも比較的簡単なのは
アンケートなどでよく見る蜘蛛の巣グラフ(レーダーチャート)だと思います。

 価格:安い やや安い 普通 やや高い 高い
 味:不味い やや不味い 普通 やや美味い 美味い
 量:少ない やや少ない 普通 やや多い 多い
 時間:遅い やや遅い 普通 やや早い 早い
 接客態度:悪い やや悪い 普通 やや良い 良い

この場合は項目は5つ限定ですから五角形に限定できます。
また段階も5段階です。6や100などを付ける人は出てきません。

簡単か簡単でないか(可能か不可能か)は場合によって変わります。
ちまちまといじりながら覚えようとしているのですが
タイピングモーション(人がタイピングしているように文字が出てくるモーション)を簡単に作る方法はないでしょうか。

使ってるのはCS3のFlashProです。

色々調べてみたのですが、単語が悪いのかタイピングゲームしか出てきませんでしたorz

検索単語のヒントなどでも結構ですので、お願いします。
>> 962: Fumioさん
お返事ありがとうございます、すいません、返答を見落としておりました。

>肝心のアニメーションをどうされているかについてご説明がありませんので、お答えが難しいです。タイムラインのフレームアニメーションでつくられているのでしょうか?

はい。
タイムライン上でレイヤーを三つ用意して、それぞれ左画面、中央画面、右画面と画像を読み込むムービークリップを三つ用意しました。
通常はこのレイヤーがゆっくりと左にスクロールしていき、
そこに外部から読み込んだ複数毎の画像を順に表示していくのですが(最初の一枚目は毎回ランダムに変わります)、画面左右にボタンを用意し、ここにマウスが重なった時のみ、右側は早送り、左側は巻き戻しの動きをさせています。

ライムライン上では右から左にスクロールし、新しい画面が表示されるところで、外部画像の数値をスクリプトで1足しては、スクロール前のフレームにジャンプさせることで、途切れなくスクロールしていくようにしてあります。
ボタン部分に関してはその先のタイムラインに、同じ動きを短いタイムラインの時間で表現した右ボタンと、数値を1引いて逆の動きをする左ボタンのタイムラインを用意して、ボタンがロールオーバーしている間はそのボタン用のタイムライン上でぐるぐる動くようにしておきました。
ただ、現状ロールアウトした場合のタイムラインというのは用意しておらず、作る上での考え方もよくわからないのです。

というのは、例えばボタンにロールオーバーしている時に、5フレームかけて右から左にスクロールしているとします。
これが3フレーム目でロールアウトした場合、ボタン上にメインのタイムラインのスクロール開始フレームにジャンプするように指定しているので、それまで流れるように動いていた途中の画面が、急にそこでスクロール開始時にジャンプしてしまうのです。
これを、ロールアウトしても流れがジャンプせず、なめらかに最後までスクロールを果たしてからメインのタイムラインに戻すようにしたいのです。

>「うまく動かな」いでは、ご説明になりません。→【うまくいきません】

失礼しました。そのとおりですね。
人には言うこともあるのですが、自分がやってしまいました。恥ずかしいです。
ご迷惑をおかけしますが、アドバイスをいただけるとありがたいです。
質問です。
カスタムカーソルを作成してます。
オリジナルカーソルのムービクリップに

onClipEvent (load) {
Mouse.hide();
}

onClipEvent (mouseMove) {
_x = _root._xmouse;
_y = _root._ymouse;
updateAfterEvent(mouseMove);
}

を書き込んでオリジナルカーソルはできました。
ここで、リンクのある項目にrolloverした時、にカーソルを変化させたいです。
(例)通常のインターネットブラウザの様に矢印から指へ変化

リンク項目のインスタンス側からではなく、カーソルの方にASを書き込んで解決したい。
可能でしょうか?

よろしくお願いします。

AS2.0 CS3
>>992 さいぜん さん

書く場所は関係しないでしょう。

たとえばそのムービークリップから,
他のボタン(仮称「A_btn」)に
_parent.A_btn.onRollOver = function(){}
などと定義しても良いわけですし。

フレームで
○○.A_btn.onRollOver = function(){}
を定義するか
ムービークリップで
○○.A_btn.onRollOver = function(){}
を定義するかだけが違うということでどこに書いても同じですから
好きな場所に書けば良いでしょうという意味です。
ターゲットパスを間違えないようにして。


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

そうではなくて,
ムービークリップからリンクのある項目にrolloverしたことを感知したい場合は,
その リンクのある項目 がムービークリップでできていたら
hitTest が使えると思います。

Flashゲーム講座&ASサンプル集【当たり判定について】
→点とインスタンスとで当たり判定を取る
http://hakuhin.hp.infoseek.co.jp/main/as/hittest.html#HITTEST_00


あと,マウスの座標がどこにあるかを随時取得して
リンクのある項目 のエリアに入ったとき
何かをさせるとかも考えられます。
>>992 さいぜん さん

引き続きで具体的には次のようにすれば良いのではないでしょうかという意味です。

◎ エリアがボタンまたはMC(ムービークリップ)のとき
 ボタンには「my_btn」というインスタンス名を付けたとする

・階層構造
 _root(メインのタイムライン)
  ├代替マウスMC
  └my_btn(ボタン/MCでも可能)

・代替マウスMC自体に書くスクリプト
-------------------------------------------
// このムービークリップがロード(登場)したとき
onClipEvent (load) {
// マウスを隠す
Mouse.hide();
// このムービークリップの再生を停止
stop();
// 親階層の「my_btn」にマウスが乗ったとき
_parent.my_btn.onRollOver = function() {
// このムービークリップをフレーム2に進めて停止
gotoAndStop(2);
};
// 親階層の「my_btn」からマウスが離れたとき
_parent.my_btn.onRollOut = _parent.my_btn.onDragOut=function () {
// このムービークリップをフレーム1に進めて停止
gotoAndStop(1);
};
}

// マウスが動いたとき
onClipEvent (mouseMove) {
// このムービークリップの座標をマウスの座標と一致させる
this._x = _root._xmouse;
this._y = _root._ymouse;
// 表示を即更新
updateAfterEvent();
}
-------------------------------------------
※ActionScript1.0 Flash Player 6 以上で使用可



◎ エリアがMCのとき
 MCには「my_mc」というインスタンス名を付けていたとする

・階層構造
 _root(メインのタイムライン)
  ├代替マウスMC
  └my_mc(MC)

・代替マウスMC自体に書くスクリプト
-------------------------------------------
// このムービークリップがロード(登場)したとき
onClipEvent (load) {
// マウスを隠す
Mouse.hide();
// このムービークリップの再生を停止
stop();
}

// マウスが動いたとき
onClipEvent (mouseMove) {
// このムービークリップの座標をマウスの座標と一致させる
this._x = _root._xmouse;
this._y = _root._ymouse;
// もし親階層の「my_mc」とマウスがヒットしていれば
if (_parent.my_mc.hitTest(_root._xmouse, _root._ymouse, true)) {
// このムービークリップをフレーム2に進めて停止
gotoAndStop(2);
//親階層の「my_mc」とマウスがヒットしていなければ
} else {
// このムービークリップをフレーム1に進めて停止
gotoAndStop(1);
}
// 表示を即更新
updateAfterEvent();
}
-------------------------------------------
※ActionScript1.0 Flash Player 5 以上で使用可



◎ エリアがボタンでもMCでもないとき
 50<=エリアのx座標<=150,50<=エリアのy座標<=100 とする

・階層構造
 _root(メインのタイムライン)
  └代替マウスMC

・代替マウスMC自体に書くスクリプト
-------------------------------------------
// このムービークリップがロード(登場)したとき
onClipEvent (load) {
// マウスを隠す
Mouse.hide();
// このムービークリップの再生を停止
stop();
}

// マウスが動いたとき
onClipEvent (mouseMove) {
// このムービークリップの座標をマウスの座標と一致させる
this._x = _root._xmouse;
this._y = _root._ymouse;
// マウスのx座標が 50以上150以下でy座標が50以上100以下のとき
if (_root._xmouse>=50 && _root._xmouse<=150 && _root._ymouse>=50 && _root._ymouse<=100) {
// このムービークリップをフレーム2に進めて停止
gotoAndStop(2);
//それ以外のとき
} else {
// このムービークリップをフレーム1に進めて停止
gotoAndStop(1);
}
// 表示を即更新
updateAfterEvent();
}
-------------------------------------------
※ActionScript1.0 Flash Player 5 以上で使用可


動作検証しながら書いているとできてしまったので。
「代替マウス」
http://suzupara.iinaa.net/mixi/mouse_hide/


しかしどうもムズムズ(自己嫌悪)するので補足します。

自分で書いていて言うのも何ですが,
個人的な好き嫌いで言うとだいたい全部が好きではないです。
特に最初の「◎ エリアがボタンまたはMC(ムービークリップ)のとき」が一番好きではないです。
Flash 5 の枠から抜けきれなかった人が
Flash MX 以上で古いスクリプトと新しいスクリプトを混在させて使っているという印象で,チグハグですし,全体的管理もややこしくなります。
私でしたら,代替マウスMCにはスクリプトは一切書かずに全部_rootのフレームに書きます。
または ムービークリップ と ボタン に分けてスクリプトを書くか。
しかしこれらは,ご質問の条件設定を根底からくつがえすことなので詳細は書きませんが..。
>> 991: こっふー。さん
> これを、ロールアウトしても流れがジャンプせず、なめらかに最後までスクロールを果たしてからメインのタイムラインに戻すようにしたいのです。
_____
>> 962: にご紹介した「参考」のノートはお読みになったのでしょうか。それで解決できないのでしたら、その問題点をご説明いただかなければ、話を先に進められません。
>>961 毛 さん

ありがとうございます!正常に動きました!
返信が遅くなって申し訳ありません・・・。
>>994,995 ささきち さま
ほんとに丁寧に説明して頂き、ありがとうございました。完全に問題解決しました。
1つの事をやりたい時に、いろんな方法があるんですね。最も良い方法を選べる様にしていきたいと、思いました。
ありがとうございました。

ログインすると、残り970件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Flash 更新情報

Flashのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。