• 締切済み

Lite1.0でのシューティングゲームですが

いつも大変参考にさせていただいております。 さて、本題ですが、Lite1.0でシューティングゲームを作成しているのですが 動きと当たり判定の連動がうまく行きません。 今現在設定している敵MCのあたり判定は以下の通りです。 //自機(攻撃側)とのあたり判定 if (../pc:_y >= _y - 10 and _y + 10 >= ../pc:_y) { if (../pc:_x == _x) { if (/game:hp <> 0) { if (/game:dmg <> 1) { tellTarget ("../pc") { gotoAndPlay("dmg"); } tellTarget ("../../hp") { nextFrame(); } } } } } //弾とのあたり判定 if (../tama:fire == 1) { if (../tama:_y >= _y - 10 and _y + 10 >= ../tama:_y) { if (../tama:_x >= _x -10 and _x + 10 >= ../tama:_x) { tellTarget ("../tama") { gotoAndStop(1); } gotoAndPlay("baku"); } } } インスタンス名の説明をします。 pcが自機、tamaは自機が発射する弾。 gameがシーン1に置かれている全体のMC。 hpが自機のパワー数、dmgはダメージ。 このASを敵MCの1フレーム目に記載しております。 そして、2フレーム目に gotoAndPlay(_currentframe - 1); 3フレーム目~7フレーム目には /game:score += 10; ラベルはbakuとしています。 そして、8フレーム目に stop(); ラベルをendとしています。 タイムラインは(全てMC) シーン1→game→ステージ(敵や弾・自機)→敵(あたり判定をしているMC) となっております。 そして、以前の質問にあった、こちらの動きを付けたいと考えております。 ↓ http://oshiete1.goo.ne.jp/qa2802247.html あたり判定は問題なく出来ているのですが、 これに動きをつけると動作しなくなってしまう・・・ と言いますか、どのように連動させるべきかうまいこと分かりません。 ゲームのイメージとしてはインベーダーゲームと思って下さい。 また違った方法で動きをつける様になるのでしょうか。 説明が長くなってしまって申し訳ございませんが 宜しくお願いいたします。

  • Flash
  • 回答数2
  • ありがとう数0

みんなの回答

noname#35109
noname#35109
回答No.2

#1です。 #1の補足に気づくのが遅れて回答がずいぶん遅れてしまいました。 すみません。 複数の敵ムービークリップの座標をまとめて動かすには, まとめて1つのムービークリップに入れて, そのムービークリップごと動かすのが簡単だと思います。 Flash Lite 1.x は, とにかく構造を複雑にしなければ色々なものがちゃんと動きませんし, 色んな場所に色んなスクリプトを書く必要がありますから, その説明を書くのも理解するのも大変です。 ですから, 簡単なものを実際に作ってみましたので, とりあえずその簡単なものを作成してみて, それを作り替えながら次の段階のものを作って行ってください。 実際に作成手順を説明する前に, まず,ムービー全体の階層構造を書いておきます。  _root   ├ tama(ムービークリップ:玉)   └ ムービークリップ(インスタンス名 無名)       ├ teki0 (ムービークリップ(敵))       ├ teki1 ( 〃 )       ├ teki2 ( 〃 )       ├ teki3 ( 〃 )        … 省略 …       ├ teki38 ( 〃 )       └ teki39 ( 〃 ) ステージは勝手に 240×240 を想定しています。 初期画面の見た感じ。  □□□□□□□□□□□□□□  □■■■■■■■■■■□□□  □■■■■■■■■■■□□□  □■■■■■■■■■■□□□  □■■■■■■■■■■□□□  □□□□□□□□□□□□□□  □□□□□□□□□□□□□□  □□□□□□□●□□□□□□  □□□□□□□□□□□□□□  □エリアをステージだと思ってください  ■が teki0 ~ teki39 です  ●が tama です。 まず, 敵になる■をステージ上に作成します。 私の場合は,15×15px の四角い塗りを描きました。 その■をムービークリップに変換します。 基準点はどこでも良いですが,私は中央にしました。 その■のムービークリップに 「teki0」 というインスタンス名を付けます。 そして, その teki0 内のタイムラインの編集に入ります。 私は, teki0 内のタイムライン フレーム1 が■で, フレーム2~5が敵が爆発するアニメ, フレーム6 を空白キーフレームにしました。 そして,スクリプト用にレイヤーを追加して, 最初のフレームと最後のフレームに stop(); を書きます↓。 teki0 のタイムライン ////////////////////////////////////////////              ↓stop();      ↓stop();  □ レイヤー 筆・・|○        []|○|  □ レイヤー 筆・・|●|●>---->|●|○|                ↑爆発    ↑消える //////////////////////////////////////////// teki0 内のタイムラインの編集は以上で, ドキュメント(_root)の編集に戻ります。 teki0 をさらにムービークリップに変換します。 基準点は中央にすると,スクリプトを考えるときにわかりやすいと思います。 この teki0 が入ったムービークリップにインスタンス名を付けてもかまいませんが, この説明にはインスタンス名は不要ですから,一応,無名のムービークリップということにしておきます。 無名のムービークリップ 内のタイムラインの編集に入ります。 teki0 をコピペで右方向と下方向に40個になるまで増やします。 そして, 各40個のインスタンス名を次のように付けなおします。   ↓無名のムービークリップの基準点  teki0  teki1  teki2  … teki9  teki10 teki11 teki12 … teki19  teki20 teki21 teki22 … teki29  teki20 teki21 teki22 … teki29  teki30 teki31 teki32 … teki39 無名のムービークリップ内のタイムラインを, 3フレーム,2レイヤーにします。  □ レイヤー 筆・・|○ []|○| ←スクリプト  □ レイヤー 筆・・|●   []| ←teki0 ~ 39 そして,フレームにスクリプトを書いて行きます。 無名のムービークリップの フレーム1(コピペ可能) ------------------------------------- // ステージの横幅の設定 stg = 240; // teki の個数を設定 n = 40; // teki の速度を設定 spd = 2; // teki の降りる距離を設定 down = 4; // teki の動く向きのフラグの初期値 flg = 1; // teki0 の横幅を取得 w = teki0._width; ------------------------------------- 無名のムービークリップの フレーム3(コピペ可能) ------------------------------------- // --- 当たり判定 --- for (i=0; i<n; i++) { if (/tama/:_x<=_x+getProperty("teki" add i, _x)+10) { if (/tama/:_x>=_x+getProperty("teki" add i, _x)-10) { if (/tama/:_y<=_y+getProperty("teki" add i, _y)+10) { if (/tama/:_y>=_y+getProperty("teki" add i, _y)-10) { if (eval("teki" add i add "/:death")<>true) { // teki を再生開始 tellTarget ("teki" add i) { play(); } // 加速 spd = spd+0.15; } // 死 のフラグ death を true にする set("teki" add i add "/:death", true); } } } } // 右端 teki の座標を取得 RR = getProperty("teki" add i, _x); if (RR>R and eval("teki" add i add "/:death")<>true) { R = RR; } } // --- 左右の teki 座標を取得--- // 左端 teki の座標値の初期化 L = 1000; // 右端 teki の座標値の初期化 R = 0; for (i=0; i<n; i++) { // 左端 teki の座標を取得 LL = getProperty("teki" add i, _x); // teki? の座標が L より小さく,かつ,死んでなければ if (LL<L and eval("teki" add i add "/:death")<>true) { // teki? の座標を L に入れなおす L = LL; } // 右端 teki の座標を取得 RR = getProperty("teki" add i, _x); if (RR>R and eval("teki" add i add ":death")<>true) { R = RR; } } // ---移動--- _x = _x+(spd*flg); if (_x>stg-R-(w/2)) { flg = -1; _x = stg-R-(w/2); _y = _y+down; } else if (getProperty("", _x)<-L+(w/2)) { flg = 1; _x = -L+(w/2); _y = _y+down; } gotoAndPlay(2); ------------------------------------- これで,本題の敵の軍団の作成は終わりです。 ドキュメント(_root)の編集に戻ります。 玉(tama) ですが, これは,本題の敵の軍団の動作検証をするためのもので, 簡易的なものにしました。 実際はもっと凝ってくださってかまいません。 ステージ上に ● を描きます。 私は,直径 10px の塗りを描きました。 その塗りをムービークリップに変換します。 基準点は中央です。 その● のムービークリップに 「tama」 というインスタンス名を付けます。 そして, その tama 内のタイムラインの編集に入ります。 tama 内のタイムラインを, 2フレーム,2レイヤーにします。  □ レイヤー 筆・・|○|○| ←スクリプト  □ レイヤー 筆・・|●  []| ←●の塗り そして,フレーム2のみにスクリプトを書きます。 tama の フレーム2(コピペ可能) ------------------------------------- // 上まで行ったら if (_y<0) { // ランダムな下へ移動 _x = 5+random(230); _y = 250; } else { // それ以外は上へ _y -= 15; } gotoAndPlay(1); ------------------------------------- tama は敵に当たっても消えません。 簡易的なものです。 また,ゲームの終了もありません。 敵が全て消えるかもしれませんし, 消えずにステージより下にもぐって行ってしまうかもしれません。 どちらにしても終了はしません。 tama は出続けます。 これで,何度かムービープレビューして動作を見てもらうと, どうなったときにどうなるのかという動きがわかると思います。 あとは,これをカスタマイズしてみてください。 ※私の場合,上のように作成すると,   2.83 KB (2,908 バイト) と,容量的には,   全く問題はないと思われる SWF ができました。   しかし,   このような苛酷なループ処理スクリプトを,   実際の携帯が正常な再生速度で,   できるのかどうかはわかりません。 インベーダー って, あと自機もあって, さらに敵からも玉が出て, そして敵の玉避けの砦みたいなのがあって, その玉避け砦は玉によって徐々に壊れて行きますし, たまに UFO も出没しましたよね。 なつかしい,遠い日の想い出です...。 Flash で,それも Flash Lite 1.x で, 全て実現するのは無理かもしれません。 インベーダはシンプルで簡単に作成できそうなゲームですが, 実際はかなり難しいゲームだったのですよね。 感心します。 実際のアルゴリズムはどんなのだったのでしょうかね。 ムービークリップというような概念もないと思いますし, ピクセル(といっても当時はかなり大きなドット)単位で色を変えて行くなど, 少なくとも上記のものとは全く違うものだとは予測できますがすごそうです。 つくづくインベーダに感心感心。

noname#35109
noname#35109
回答No.1

おそらく,書かれていない(多すぎて書くことができない)部分が多々あると思いますから, 意味不明な部分も多々ありますが, 一応うまく行った方法を書きます。 まず,敵機(インベーダ?)にインスタンス名を付けます。 ここではインスタンス名を「teki」としておきます。 構造自体を変えるとインスタンス名はなくてもすみますが, ややこしくなるのでなるべく構造を変えないようにするために, インスタンス名を付けることにしておきます。 インスタンス名を付けるのは変数の初期値を設定するためです。 これで階層構造は次のようになると思います。  _root   └game(MC)     ├ pc (自機:MC)     ├ tama(玉:MC)     └ teki (敵機:MC) そして, game(MC)の基準点をステージの左上のコーナーと一致させておきます。 つまり, MC内の座標を_rootのステージ座標と一致させるということです。 基準点についてもしわからない場合は次のURLを参考にしてみてください。 インスタンスの基準点 http://homepage3.nifty.com/ginga-b/MX/inst_refpoint.html 上記URLの, 「基準点の編集」 を参考に,game の基準点をステージの左上にしてください。 そして, _root のフレーム1に次のように, 変数の初期値を設定するスクリプトを用意しておきます。 ------------------------------------ // 敵が動くための変数 flg の設定 /game/teki:flg = 1; // // 以下は技巧的に(わざと)初期値を設定 /game:hp = 5; /game:dmg = 5; /game/tama:fire = 1; ------------------------------------ そして, ご質問で書かれている敵機(_root.teki)のフレーム1のスクリプトを次のようにします。 ----------------------------------------------- // ★↓以下を付け足し↓★ // x座標を spd ずつ加算or減算 _x += flg*5; // x座標が「ステージの幅-このMCの幅/2」になれば if (_x>=-_width/2+240) { // x座標を「ステージの幅-このMCの幅/2」で固定 _x = -_width/2+240; // y座標を高さ分下へ _y += _height; // そしてフラグの符号を変える flg = -1; // // x座標が「このMCの幅/2」になれば } else if (_x<=_width/2) { // x座標を「このMCの幅/2」で固定 _x = _width/2; // y座標を高さ分下へ _y += _height; // そしてフラグの符号を変える flg = 1; } // ★↑以上を付け足し↑★ // //自機(攻撃側)とのあたり判定 if (../pc:_y>=_y-10 and _y+10>=../pc:_y) { // ★↓次の行を変更↓★ if (../pc:_x >= _x-10 and _x+10>=../pc:_x) { if (/game:hp<>0) { if (/game:dmg<>1) { tellTarget ("../pc") { gotoAndPlay("dmg"); } tellTarget ("../../hp") { nextFrame(); } } } } } //弾とのあたり判定 if (../tama:fire == 1) { if (../tama:_y>=_y-10 and _y+10>=../tama:_y) { if (../tama:_x>=_x-10 and _x+10>=../tama:_x) { tellTarget ("../tama") { gotoAndStop(1); } gotoAndPlay("baku"); } } } ---------------------------------------------- 一応勝手にステージのサイズは240としています。 付け加えや変更部分は ★ 印を付けています。  tellTarget ("../../hp") {   nextFrame();  } この意味が結局わかりませんでしたが, この部分を除いてはうまく動作しましたよ。 ---全体的な感想です--- 上の "../../hp" もそうですし, 他の gotoAndPlay("dmg"); もそうですが, インスタンス名と変数名,フレームラベルと変数名に, 同じ名前を使われていますね。 ここらへんは混同しませんか? 私は上のうまく行ったサンプルを作りながら, 何が変数名で何がフレームラベルで何がインスタンス名なのかわからなくなりましたよ。 作者自体が混同せずに,うまく動作すれば, 名前がかぶっていても良いと思いますが, 別の意味を持つ物には,違う名前を付けた方が無難かと思います。

erinyanko
質問者

補足

結構流れてしまったので、見たいただけるか不安ですが・・・。 ご返答ありがとうございました。 色々と動作をしていたら返事が遅くなってしまいました。すみません。 一応動きをつけることはできたのですが、 実は敵は一機ではなく、横10の縦4の40機いるのです。 そうすると、動きをつけた所ばらばらになってしまって それをうまくコントロールする書き方が判っていづに時間がかかっています。 一段下がる時に全機一緒に移動させたいのです。 (本家のインベーダーの様ですね) もしお力をおかしいただけるようでしたら ご伝授の程、宜しくお願いいたします。

関連するQ&A

  • シューティングゲームの自機の当り判定

    以前の質問で、アクションスクリプトの記述がなかったので、詳しく説明します。http://oshiete1.goo.ne.jp/qa3535566.html 自機は、キーボードで操作します。 if(Key.isDown(87)){ gotoAndPlay(3) } if(Key.isDown(83)){ gotoAndPlay(5) } 3は上向きグラフィック、5は下向きグラフィックです。 246フレームには、 gotoandplay(1) と記述しています。 当たり判定は、別レイヤーにあります。 ステージ上の自機にmyshipというインスタンス名を付けています。 敵弾に当たると自機はbangjikiになります。 if(this.hitTest(_root.myship.hitarea)){ _root.myship.gotoAndPlay("bangjiki") _parent.removeMovieClip() }

  • シューティングゲームの当たり判定

    現在directxを用いた(DXライブラリは使わない)インベーダーゲームを作っているのですが、当たり判定の部分がなぜかうまくいきません。自機と敵の弾の当たり判定部分のコードを載せるのでどなたかご享受ください。 //============敵の攻撃======================== if(enemy[rand_atk].tamaflag == 0 && shot_save % 100 == 0 ){ __enemy[rand_atk].tamaflag = 1; __enemy_atk[rand_atk].x = enemy[rand_atk].x+17; __enemy_atk[rand_atk].y = enemy[rand_atk].y+17; } for(i = 0; i < 11; i++){ __if(enemy[i].tamaflag == 1){ ____enemy_atk[i].y+=1; ____if(enemy_atk[i].y >= 480){ ______enemy[i].tamaflag = 0; ______enemy_atk[i].y = -20; //画面外へ ____} ____if( ( move.x - 7 < enemy_atk[i].x && move.x + 32 > enemy_atk[i].x ) && ________( move.y - 13 < enemy_atk[i].y && move.y + 24 > enemy_atk[i].y ) ){ ______move.zanki--; ______enemy[i].tamaflag = 0; ______enemy_atk[i].y = -20; //画面外へ ____} __} } move.x,move.yは自機のx,y座標で横32縦24 敵の弾の大きさは横7縦13 rand_atkはrand_atk = timeGetTime() % 11;でランダムに攻撃させようとしています。

  • Flash Lite1.1について

    Flashで携帯ゲームのブロック崩しを作りたくて、あるサイトからflaサンプルを見つけました。 製作者のコメントに「ブロックを全部崩しても何も起きませんので、エンディング等は自作してください。 」とあったので、早速4フレーム目にゲームオーバー画面を5フレーム目にクリア画面を作ってみました。 そして元々のソースから if(ball._y>235){ gotoAndPlay(1); } を if(ball._y>235){ gotoAndPlay(3); } にしたまではよかったのですが、 ブロックが全て無くなったらクリア画面に移動させる方法が分からず困っています。 元々のソースは↓になります。 // ボール移動 ball._x += vx; ball._y += vy; // 壁とボールの当たり判定 if(ball._x<5 && vx<0){ vx = -vx; } if(ball._x>235 && vx>0){ vx = -vx; } if(ball._y<5 && vy<0){ vy = -vy; } //ボールが下に落ちたらゲームオーバー if(ball._y>235){ gotoAndPlay(1); } // パドルとの当たり判定 if(ball._x>pad._x-40-5 && ball._x<pad._x+40+5 && ball._y>pad._y-5-5 && ball._y<pad._y+5+5 && vy>0){ vy = -vy; vx = (ball._x-pad._x)/80*15; } // ブロックとの当たり判定 for(i=1;i<=40;i++){ bx = eval("block" add i)._x; by = eval("block" add i)._y; if(ball._x>bx-20-5 && ball._x<bx+20+5 && ball._y>by-5-5 && ball._y<by+5+5 && eval("block" add i)._visible==true){ eval("block" add i)._visible = false; //左端or右端に当たった場合 if(ball._x<bx-20 || ball._x>bx+20){ vx = -vx; }else{ //上端or下端に当たった場合 vy = -vy; } } } どの場所にどのように書くべきかいろいろ探してみたのですが、パソコン用の作り方しか見つからす゜携帯用のFlash Lite1.1には対応していない物ばかりで困っています。 ActionScriptについては初心者であまり詳しくなく、本当に恥ずかしい限りです。 どうかお解かりになる方おりましたらお力をお貸し下さい。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • FLASH LITE1.1 制限時間を任意に設定

    FLASH LITE1.1でクイズの制限時間を任意に設定しようとしているのですがうまくいきません。 やろうとしていることは、 ユーザーが入力テキストに制限時間(秒)を入力し、その時間が経過したら特定のフレームに跳ぶ、 ということです。 具体的には次のようにしています。 入力テキストの変数を「lmt」としてルートの2フレームに配して停めておき、*キーでスタートさせます。 ルートの3フレームにMC「c_mc」を置き、ダイナミックテキストの変数「cnt」を設定して、「c_mc」の1フレームから10フレームをループさせることで秒数を表示し(10fps)ます。 そして、ルートの3フレームに次のASを書いています。 tellTarget("/c_mc"){play();} if(lmt == /:cnt){gotoAndPlay("tokutei");} if の条件がうまく書けていないかと思うのですが、evalを使ったり、""を使ったりしても結局うまくいきませんでした。 おわかりになる方、ぜひご教授いただきたいと思いますので、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • プログラミングのHSPなんですが、このソースの文字(敵、自)をチカチカ

    プログラミングのHSPなんですが、このソースの文字(敵、自)をチカチカするのをどうにかしたいです。 redrawをどこにすればいいですか?このソースがおかしいのでしょうか? ソースがおかしければ正しいソースを書いていただけないでしょうか? よろしくお願いします /* よけゲー */ 自機位置x=100 : 自機位置y=100 screen 0,300,300 repeat gosub *自機移動 gosub *敵 gosub *味方 loop *自機移動 stick key,15 if key&1 : 自機位置x-=4 if key&4 : 自機位置x+=4 if key&2 : 自機位置y-=4 if key&8 : 自機位置y+=4 await 10 cls return *敵 mes "敵" return *味方 pos 自機位置x ,自機位置y mes "自" return

  • MCのgotoAndPlay制御について

    今現在すごく初歩的なものを作っています。 まず、MCですが、1~10フレームは歩く動作、11~20フレームは座る動作 と言ったフレームで動作を表現したものです。 このMC内で1~10フレームを繰り返すようにgotoAndPlay(1)と10フレーム目に書きました。 そして、このMCに onClipEvent (load) { // スピードの初期値 spd = 5; } onClipEvent (enterFrame) { // spd ずつ右へ移動 this._x += spd; if(this._x>100){ spd = 0; this.gotoAndPlay(11); } } といったように A地点~B地点は歩いている動作をさせながら5ずつ移動させ、100まで来たら停止させ、 そのB地点では座る動作(MCの11フレーム目から)をスタートさせるようにしました。 しかし、実際はMCの11フレーム目で固まった状態です onClipEvent (enterFrame)なので当たり前なのは分かっているのですが、 他に方法が分かりません。 何かなるべく完結な方法はありますでしょうか?

    • ベストアンサー
    • Flash
  • 深度とhittest

    いろいろ調べて、本も買って読んでみたのですが、解決することができなかったので質問させてください。 3つのオブジェクトがあります(tamaとtekiとjiki) //メインのタイムライン上 onClipEvent(load){ a=1; count=1; } onClipEvent(enterFrame){ jiki.attachMovieClip("tama","tama"+a,a) if(KeyDOWN(SPACE){ jiki.attachMovieClip("tama","tama"+a,a) _root."tama"+a._x=jiki._x _root."tama"+a._y=jiki._y a++; } //弾のスクリプト if(this.hittest(teki)){ this.removeMovieClip(); teki.removeMovieClip(); } 弾を撃って弾が敵に当たったなら弾と敵を両方消すということをしたいです。 弾の深度を考えず、attachMovie("tama","tama",1)としたときはきちんと消すことが出来ました。しかしそれだと弾を連射することができません。なので深度を使ってattachMovie("tama","tama"+a,a)としたとき、連射はできるようになったのですが、今度は敵にあたらなくなってしまいました。どうすれば敵と深度aにある弾があたるようになるか教えていただけませんか?若しくはヒントだけでもいただけないでしょうか?? 宜しくお願いします。

    • ベストアンサー
    • Flash
  • mcのx座標が50以上になったら次フレーム

    タイトルどおり、 mcのx座標が50以上になったら次フレーム という処理をしたく、 mcに次のアクションスクリプトを記述しました。 onClipEvent(enterFrame){ this._x += 10; } onClipEvent(load){ if(this._x >= 50){ nextFrame(); } } しかし何故か次のフレームに行ってくれません。 どこか間違っているのでしょうか。。。 nextFrame();をgotoAndPlay(2);にしても駄目でした。

    • ベストアンサー
    • Flash
  • Flash lite 1.1で待受け作成

    Flash lite1.1で、 デジタル時計(HH:MM)のついた待受けを作りたいと思っています。 仕様としては背景で5枚の画像を1分ごとにループさせて、 画像ごとにデジタル時計を表示させる位置を変えたいと思っています。 (1枚目の画像の時はセンターに、2枚目の画像の時は下部に、という感じ) 現在、下記のような方法で書こうと思って作り始めたのですが 躓いてしまいましたので宜しければご助言をお願いいたします。 まず時計部分については、 ステージ直下に空のMC「myTime」を作って 表示用のレイヤーにダイナミックテキストを配置し、 変数 v_time をセットしました。 で、action用レイヤーに ---------- 1フレーム ---------- call("func"); gotoAndPlay(2); ---------- 2フレーム ---------- call("func"); ---------- 3フレーム ---------- gotoAndPlay(2); ---------- 4フレーム ---------- ●ラベル「func」 nowHour = fscommand2("GetTimeHours"); nowMin = fscommand2("GetTimeMinutes"); //10未満なら頭に0をつける if (v_hour<10) { v_hour = "0" add v_hour; } if (v_minutes<10) { v_minutes = "0" add v_minutes; v_time = nowHour add ":" add nowMin; と、書きました。 これで時計の表示だけはうまくいきました。 これとは別に、ステージ直下に画像表示用のムービークリップ 「myImage」を作り、1~5フレームに各画像を配置しました。 …と、ここまで自力で調べながらやってみたのですが この先がわからず困っています。 イメージとしては ・nowMin の値から myImage のフレーム位置を移動 また同様に ・nowMin の値から myTime のx,y座標を変更 という感じかな?と思っているのですが、 どのように書けばよいでしょうか? また、他に効率の良いやり方がありましたらご教授頂けませんでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 出力するとエラーメッセージが出ます

    FLASHCS4でAS3.0を使ってます。 インスタンス名「_1mc」と言うオブジェクトを作成し、そのオブジェクトが浮遊するアニメーションを作成して、そのオブジェクトにマウスカーソルが触れるとマウスオーバーで「_1mc」の「61」へ移動し、マウスアウトで「1」に移動するように作りました。 そしてプレビューすると動作は特に問題なく作動しますが、出力には下記のようなメッセージが表示されます。このままでも問題ないのでしょうか?または別の記述方法を行う事で、このメッセージは回避出来るのでしょうか?その場合の記述方法を教えてください。 --------------------------------------------------------------- TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at takaragawa_fla::MainTimeline/xEnterFrame() --------------------------------------------------------------- 「_1mc」を設置してあるフレームには下記のスクリプトを記述しました var step1X:int=Math.floor(Math.random()*1)+5; var step1Y:int=Math.floor(Math.random()*1)+5; if (Math.random()<0.5) { step1X*=-1; } if (Math.random()<0.5) { step1Y*=-1; } _1mc.addEventListener(Event.ENTER_FRAME, x1EnterFrame); function x1EnterFrame(evt) { _1mc.x+=step1X; _1mc.y+=step1Y; if (_1mc.x>=800||_1mc.x<=0) { step1X*=-1; } if (_1mc.y>=550||_1mc.y<=0) { step1Y*=-1; } } //ロールオーバーの設定 _1mc.addEventListener(MouseEvent.ROLL_OVER,xOver); //ロールアウトの設定 _1mc.addEventListener(MouseEvent.ROLL_OUT,xOut); //ロールオーバーしたとき function xOver(evt:MouseEvent):void { _1mc.gotoAndPlay(61); } //ロールアウトしたとき function xOut(evt:MouseEvent):void { _1mc.gotoAndPlay(1); } -------------------------------------------------------------- 以上ですので、アドバイスをお願い致します。よろしくお願い致します。

専門家に質問してみよう