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

MX2004初心者です。

ライブラリにsakura_mc(10フレーム)があります。 さくらの花びらが手前に飛んでくるこまアニメです。

//乱数生成関数
function rndInit(maxNum){
  var a = math.random();
  var b = Math.ceil( a*maxNum );
  return b;
}
 MC = "sakura"
 SW = Stage.width;
 SH = Stage.height;
this.onEnterFrame = function(){
  if( rndInit(10) == 1 ){
  count ++;
  newName = MC + count;
  attachMovie( "sakura_mc", newName, 1 );
  //表示位置の設定
  this[ newName ]._x = Math.random()*SW;
  this[ newName ]._y = Math.random()*SH;
   }
}

 この方法だと、sakura_mcがステージ上ランダムな位置に連続で再生 してくれます。

 ただ、二つ以上のsakura_mcを同時にステージに再生はしてくれません。
 sakura_mcを同時にいっぱい再生させたい場合はどうすればよいでしょうか?
 sakura2_mcをつくって同じ命令を追加してもダメでした。
 よろしくお願いします。

A 回答 (2件)

同じ深度に複数のものは存在できません。


同じ深度に新たなものを作成すると,前の物は削除されます。

attachMovie("sakura_mc", newName, 1);
 ↓変更↓
attachMovie("sakura_mc", newName, count);

でうまく行くのではないかとは思いますが,
その他細かい点も気になったので,全文書いてみました。
★印のコメントを付けた次の行を若干変更しています。

--------------------------------------------
//乱数生成関数
function rndInit(maxNum) {
// ★ math → Math
var a = Math.random();
var b = Math.ceil(a*maxNum);
return b;

}
// ★変数 count の初期化(Flash MX 以前はなくても可)
count = 0;
MC = "sakura";
SW = Stage.width;
SH = Stage.height;
this.onEnterFrame = function() {
if (rndInit(10) == 1) {
count++;
newName = MC+count;
// ★深度を変える 1 → count
attachMovie("sakura_mc", newName, count);
//表示位置の設定
this[newName]._x = Math.random()*SW;
this[newName]._y = Math.random()*SH;
}
};
------------------------------------------------
    • good
    • 0
この回答へのお礼

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

 できました。が、どんどん桜の花びらが増えることに気づきました。

 if ( count >= 10 ){
this.onEnterFrame = null;
}
を中に足せば、10枚で止めることができました。

お礼日時:2007/06/19 20:30

#1 です。



先のことは色々問題が生じるとは思いましたが,
#1では,とりあえず現在の状況についてのみ回答しました。

> if ( count >= 10 ){
>  this.onEnterFrame = null;
> }
> を中に足せば、10枚で止めることができました。

それでも悪くはないと思いますが,
this.onEnterFrame = null; より delete this.onEnterFrame;
の方が良いようです。

イベントハンドラメソッドはdeleteで消せ!
http://f-site.org/articles/2004/05/22140833.html
Flashドキュメンテーション > delete ステートメント
http://livedocs.adobe.com/flash/8_jp/main/000018 …


あと,
this.onEnterFrame は削除されても,
sakura0~sakura9 はステージ上に残っていると思います。

-----------------------------------------------
if (count>=10) {
for (i=0; i<=count; i++) {
this[MC+i].removeMovieClip();
}
delete this.onEnterFrame;
}
-----------------------------------------------

のようにして,
removeMovieClip() を削除してやるか,
これでは,唐突に消えて不自然なようでしたら,
シンボル sakura_mc の最終フレームに

this.removeMovieClip();

と書いておいて,消す方が良いとは思います。
(複製した sakura0~sakura9 は深度0以上なので消せます。)

すでにそうしてあったらすみません。
 
    • good
    • 0
この回答へのお礼

詳しい回答ありがとうございます。また、面白いサイトををしえていただき、ありがとうございます。

お礼日時:2007/06/20 20:00

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