getTaimerがうまく動作してくれません

このQ&Aのポイント
  • getTaimerが効いていないのでしょうか?困っています。
  • スクリプトをムービークリップに入れたのですが、無効になった後に戻りません。
  • 衝突の後の少しの時間ボタンの使用を無効にしたいです。
回答を見る
  • ベストアンサー

getTaimerがうまく動作してくれません

いつも、ありがとうございます。FlashMXです。 衝突の後の少しの時間ボタンの使用を無効にしたいので以下のようなスクリプトをムービークリップに入れましたが、無効になった後に戻りません。 getTimerが効いていないのでしょうか?困っています。 onClipEvent (enterFrame) { if (_parent._parent.shin.hitTest(this)) { _parent._parent.shin.gotoAndStop("hit"); start = getTimer(); timer = 0.05*1000; if (getTimer()>start+timer) { _parent._parent.btn_l._visible = true; _parent._parent.btn_u._visible = true; _parent._parent.btn_r._visible = true; } else { _parent._parent.btn_l._visible = false; _parent._parent.btn_u._visible = false; _parent._parent.btn_r._visible = false; } } }

  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • perse
  • ベストアンサー率74% (113/152)
回答No.1

getTimer()で得られる値は swfファイルの再生を開始してから経過したミリ秒数です (以降、単に[経過時間]と呼ばせてもらいます)。 start=getTimer();  ・・・(1) で[経過時間]が変数startに入ります。 timer = 0.05*1000; で変数timerに50が入ります。 if (getTimer()>start+timer){}  ・・・(2) の条件は今現在の[経過時間]が(start+50)ミリ秒より大きい時です。 つまりどういうことかというと、 FlashがASを実行中、(1)を処理した後から (2)を処理するまでに50ミリ秒の時間を要したときです。 実際に(1)と(2)の上にそれぞれ trace(getTimer()) と書いてみてください。 多分同じ値になるでしょう。50ミリ秒もかかってないってことです。 なのでelse{}の部分に行ってしまうわけです。 ひとつの方法として フレーム 1 2 3 4 5 ボタン   ● ○ 衝突後にボタンの置いてあるタイムラインを再生する。 ボタンは1フレーム目だけに置いてあるので 画面上からは見えなくなります。 あとは5フレーム目あたりにthis.gotoAndStop(1)とでも書いて 1フレーム目に戻しますと、ボタンが表示されるという感じです。 ASだけでやりたいならsetIntervalでしょうか。

Flash-love
質問者

お礼

ありがとうございました。今、作っているものの構造上、ここには使わないで別の方法を取ることにしました。とても、参考になりましたので今度使ってみたいと思います。今後とも、よろしくお願いいたします。

関連するQ&A

  • 移動位置が狂ってしまう

    いつもお世話になります。 「ボタンの有効と無効」及び「左右ボタンで方向切替」を合体させてアクションスクリプトを記述しました。ボタンが1個の時に、falseとtrueで有効・無効を教えていただきました。 次にボタンを2個とした場合、右ボタンを押し、即座に左ボタンを押すとやはり移動位置が狂ってしまいます。私にとっては行数が増え、どのように対処すればいいのかわかりません。 教えてください。 //クラスのインポート import mx.transitions.Tween; import mx.transitions.easing.*; //画像1枚の横幅を設定 var g_w:Number = 120; //画像の枚数を設定 var g_n:Number = 7; //カウンタ用変数 var cnt:Number = 0; //「L_btn」を非表示にしておく L_btn._visible = false; //「R_btn(→ボタン)」クリック時の動作を定義 R_btn.onRelease = function():Void { //もしカウンタが 画像の枚数-1 未満であれば (cnt<g_n-1) { var myTween = new Tween(my_mc, "_x", Regular.easeOut, my_mc._x, my_mc._x-g_w, 3, true); //bt1のボタン機能を無効にする R_btn.enabled = false; //myTweenのモーション終了時に実行するメソッドを定義 myTween.onMotionFinished = function() { //ボタン機能を有効にする R_btn.enabled = true; } //L_btnを表示する L_btn._visible = true; //なおかつカウンタが 画像の枚数-2になれば if (cnt == g_n-2) { //R_btnを非表示にする R_btn._visible = false; } //カウンタに1を加算 cnt++; } } //L_btnクリック時の動作を定義 L_btn.onRelease = function():Void { //もしカウンタが 0 より大きい場合は if (cnt>0) { var myTween = new Tween(my_mc, "_x", Regular.easeOut, my_mc._x, my_mc._x+g_w, 3, true); //bt1のボタン機能を無効にする L_btn.enabled = false; //myTweenのモーション終了時に実行するメソッドを定義 myTween.onMotionFinished = function() { //ボタン機能を有効にする L_btn.enabled = true; } //R_btnを表示する R_btn._visible = true; //なおかつカウンタが 1 になれば if (cnt == 1) { //L_btnを非表示にする L_btn._visible = false; } //カウンタから1を減算 cnt--; } };

    • ベストアンサー
    • Flash
  • Keyを押している時間によって・・・

    ゴルフゲームでKeyを押している時間によって、飛距離が変わるゲームがあります。 同じような操作機能を作りたいと思い、質問させて頂きました。 どうぞよろしく御願いします。 途中まで書いてみたのですが・・・getTimerとか使うんでしょうか? _root.startFlag = false; start_btn.onPress = function(){ if(_root.startFlag == false){ _root.startFlag = true; _root.startTime = getTimer(); } _root.start_btn.onRelease = function() { _root.startFlag = false; } } this.onEnterFrame = function(){ if(_root.startFlag == true){ if(ms<3000){ ms =getTimer() - _root.startTime; _root.dispTime = ms / 1000; this.createEmptyMovieClip("view_mc",0); view_mc.lineStyle(5,0xFF0000,100) view_mc.moveTo(0,100) view_mc.lineTo(ms/25,100) } if(ms>3000){ms=3000} }; }

    • ベストアンサー
    • Flash
  • 「ボタンロールオーバー時のインスタンス同士の重なり」による動作について

    「ボタンロールオーバー時のインスタンス同士の重なり」による動作について flashcs4、as3で制作をしています。 配置してあるボタンインスタンスにマウスオーバーしたときに、 ボタンの上に吹き出しが表示されるというものをつくろうとしています。 現在記述しているスクリプトは まず、stageにhukidasiをaddChildして表示リストに追加。visibleをfalseにしておく。 btn1にマウスがロールオーバーしたときにhukidasiのvisibleをtrueにして表示。ロールアウトしたときはvisibleをfalseにして非表示にする。 というものです。 こちらの反応はいちおう実現できたのですが、ロールオーバー時にボタン(btn1)と吹き出し(hukidasi)が重なっている部分にマウスをもっていくと、吹き出しが点滅して消えたり表示されたりを繰り返してしまうのです。 サンプル http://homepage2.nifty.com/meary/testtest.html それを解消させるために、吹き出し(hukidasi)はボタン(btn1)の子としてaddChildして、 btn1.mouseChildren=falseとして吹き出しにボタンの機能を持たせないようにしてみると前述のような反応はなくなりました。 ですが、このように吹き出しをボタンの子とすると、ボタンの領域に吹き出しの大きさも追加されてしまいまして、そのようなことは望んでいないのです。 ボタンの領域をマウスが外れたら吹き出しが消える、というようにしたいのです。 このようなことを実現するにはどういったスクリプトが必要でしょうか。 ご教授お願いいたします。 現在記述しているスクリプト -------------------------------------------- //吹き出しインスタンスを生成 var hukidasi:Hukidasi=new Hukidasi(); hukidasi.x=90; hukidasi.y=80; //吹き出しを表示リストに追加 stage.addChild(hukidasi); hukidasi.visible=false; btn1.addEventListener(MouseEvent.ROLL_OVER,btn1_handleRollOver); btn1.addEventListener(MouseEvent.ROLL_OUT,btn1_handleRollOut); //btn1のロールオーバー、アウト時のメソッド function btn1_handleRollOver(event:MouseEvent){ hukidasi.visible=true; } function btn1_handleRollOut(event:MouseEvent){ hukidasi.visible=false; } --------------------------------------------

    • ベストアンサー
    • Flash
  • 経過時間について

    こんにちは 経過時間を0から表示して、ボタンが押されたら経過時間の計測・表示をストップし次のフレームに行き、また0から経過時間を表示したいのですが、どうすればいいでしょうか? 時間を表示させるdisptime.textとbtnというボタンをステージに配置しています。↓いろいろ試してみたのですが、フレーム移動した際に経過時間を0から表示させる方法がわかりません。。 flash8を使っています。 stop(); startflag=true; this.onEnterFrame=function(){ if(startflag==true){ starttime=getTimer(); keika=getTimer();-starttime; disptime.text=Math.floor(keika/1000); } }; btn.onRelease = function(){ startflag=false; nextFrame(); };

    • ベストアンサー
    • Flash
  • 行数を固定して納品書を作成したが、いらない部分がでる

    こんばんは、提出時間がせまっているので、 あせって、質問しました。 今、アクセスにて納品書のレポートの作成中です。 Q_売上テーブルとQ_売上明細テーブルをつかって、 レポートを作成し、5行に固定したかったので、 下記のようなVBAを記述しました。 行は、固定されましたが、 なぜか1行しかない時などに、 商品区分だけが2行目3行目に1行目の内容をコピーして はいってくるのです。 どこがおかしいのかわからず、苦戦中です。 ご教授、よろしくお願いいたします。 Option Compare Database Dim AAA As Integer Dim BBB As Integer Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) AAA = 0 BBB = DCount("伝票番号", "Q_売上明細テーブル", "伝票番号='" & Me!伝票番号 & "'") End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) AAA = AAA + 1 Me!テキスト54 = AAA If AAA Mod 5 = 0 Then If AAA < BBB Then Me!改ページ55.Visible = True Me.Section(3).Visible = True ElseIf AAA = BBB Then Me!テキスト54.Visible = True Me!商品区分.Visible = True Me!商品名.Visible = True Me!数量.Visible = True Me!単価.Visible = True Me!金額.Visible = True Else Me!テキスト54.Visible = False Me!商品区分.Visible = False Me!商品名.Visible = False Me!数量.Visible = False Me!単価.Visible = False Me!金額.Visible = False End If Else Me!改ページ55.Visible = False Me.Section(3).Visible = False If AAA < BBB Then Me.NextRecord = True Me!テキスト54.Visible = True Me!商品区分.Visible = True Me!商品名.Visible = True Me!数量.Visible = True Me!単価.Visible = True Me!金額.Visible = True ElseIf AAA = BBB Then Me.NextRecord = False Me!テキスト54.Visible = True Me!商品区分.Visible = True Me!商品名.Visible = True Me!数量.Visible = True Me!単価.Visible = True Me!金額.Visible = True Else Me.NextRecord = False Me!テキスト54.Visible = False Me!商品区分.Visible = True Me!商品名.Visible = False Me!数量.Visible = False Me!単価.Visible = False Me!金額.Visible = False End If End If End Sub

  • エクセルVBAでShapesまたはDrawingObjects

    シート上のフォームなどを表示/非表示するためtest04を書きましたが、「実行時エラー438 オブジェクトはこのプロパティまたはメッソッドをサポートしていません」となります。 しかし、Test05のように同じことをForNextで回せばうまくいきます。 また、Test06のようにShapesをDrawingObjectsに書き換えただけでもうまくいきます。 では、Test04がエラーになるのはなぜでしょうか? Sub test04() With ActiveSheet.Shapes If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub Sub test05() For Each sp In ActiveSheet.Shapes If sp.Visible = False Then sp.Visible = True Else sp.Visible = False End If Next End Sub Sub test06() With ActiveSheet.DrawingObjects If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub

  • アクセス2000 5行で改ページ

    アクセス2000のレポートで、5行で改ページをさせようと以下のようにコードを記述しましたがうまくいきません。 どなたかアドバイスをお願いします。 配置されているテキストボックスは、 [氏名] [人事区分チェック1] [人事区分チェック2] [人事区分チェック3] [人事区分チェック4] [人事区分チェック5] [人事区分チェック6] [人事区分チェック7] [その他の内容] [役職] [採用年月日] [契約終了日] [備考] でコードは以下の通りです。 Dim i, j Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) i = 0 j = DCount("*", "採用時提出書類管理クエリ", "[教授会]=reports![92 人事関係報告書]![教授会]") End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) i = i + 1 If i Mod 5 = 0 Then If i <= j Then Me![bpage].Visible = True Else Me![氏名].Visible = False Me![人事区分チェック1].Visible = False Me![人事区分チェック2].Visible = False Me![人事区分チェック3].Visible = False Me![人事区分チェック4].Visible = False Me![人事区分チェック5].Visible = False Me![人事区分チェック6].Visible = False Me![人事区分チェック7].Visible = False Me![その他の内容].Visible = False Me![役職].Visible = False Me![採用年月日].Visible = False Me![契約終了日].Visible = False Me![備考].Visible = False End If Else Me![bpage].Visible = False If i < j Then Me.NextRecord = True Me![氏名].Visible = True Me![人事区分チェック1].Visible = True Me![人事区分チェック2].Visible = True Me![人事区分チェック3].Visible = True Me![人事区分チェック4].Visible = True Me![人事区分チェック5].Visible = True Me![人事区分チェック6].Visible = True Me![人事区分チェック7].Visible = True Me![その他の内容].Visible = True Me![役職].Visible = True Me![採用年月日].Visible = True Me![契約終了日].Visible = True Me![備考].Visible = True ElseIf i = j Then Me.NextRecord = False Me![氏名].Visible = True Me![人事区分チェック1].Visible = True Me![人事区分チェック2].Visible = True Me![人事区分チェック3].Visible = True Me![人事区分チェック4].Visible = True Me![人事区分チェック5].Visible = True Me![人事区分チェック6].Visible = True Me![人事区分チェック7].Visible = True Me![その他の内容].Visible = True Me![役職].Visible = True Me![採用年月日].Visible = True Me![契約終了日].Visible = True Me![備考].Visible = True Else Me.NextRecord = False Me![氏名].Visible = False Me![人事区分チェック1].Visible = False Me![人事区分チェック2].Visible = False Me![人事区分チェック3].Visible = False Me![人事区分チェック4].Visible = False Me![人事区分チェック5].Visible = False Me![人事区分チェック6].Visible = False Me![人事区分チェック7].Visible = False Me![その他の内容].Visible = False Me![役職].Visible = False Me![採用年月日].Visible = False Me![契約終了日].Visible = False Me![備考].Visible = False End If End If End Sub データが5件未満は正しく表示されますが、5件を超えると2ページ目が4件しか表示されなかったりします。 グループ化がされており、[bpage]という改ページが入っています。 よろしくお願いします。

  • 衝突している間、違うポーズに変えたい

    いつもありがとうございます。MAXOS10でFlash8です。 障害物に衝突している間は、違うポーズにしたいのでhitTestを使って以下のようなスクリプトを障害物のmcに入れました。 衝突すると、泳ぐ人は立ち上がるポーズになるのですが、その後、障害物がなくなっても立ったまま、泳いでいってしまいます。 ポーズは、泳ぐ人のmcに複数作ってフレーム移動で変えています。 衝突していた、障害物がなくなったら元のように泳いでほしいのですが、 うまくいきません。よろしく、お願いします。 onClipEvent (enterFrame) { tmp = this.hitTest (this._parent._parent.swim_02); if (tmp == true) { _parent._parent.swim_02.gotoAndPlay ("gool"); _parent._parent.swim_02._x = this._x; } }

  • 【AS3.0】Timerとタイムライン

    現在、10秒経過すると画像が切り替わって1秒経過するとまた元に戻り、また10秒経過すると同じように切り替わるというループアニメーションを作成しています。 しかし、フレームを使ったタイムラインアニメーションとtimerを使ったスクリプトで上手く同期しません。 タイムラインの作りはフレームレート30で レイヤー上:mc01 mc02と同じ1秒(30フレーム)ごと画像が切り替わっていくだけのループアニメーション(下の画像と連動していて10秒経過で切り替わるアニメーション) レイヤー下:mc02 mc01と同じ1秒(30フレーム)ごと画像が切り替わっていくだけのループアニメーション mc01とmc02は画像が違うだけで同じ動きをしています。mc01をvisible=false;で消しています。10秒経過したら1秒間true;になるように下記スクリプトに記述しています。 ■スクリプト-------------------------------------- var myTimer:Timer = new Timer(10000, 0); myTimer.addEventListener("timer", timerHandler); myTimer.start(); function timerHandler(event:TimerEvent):void { trace( "UP") mc01.visible = true; myTimer.reset(); myTimer.start(); } var myTimer2:Timer = new Timer(11000, 0); myTimer2.addEventListener("timer", timerHandler2); myTimer2.start(); function timerHandler2(event:TimerEvent):void { trace( "down") mc01.visible = false; myTimer.reset(); myTimer.start(); }*/ ■------------------------------------------------ はじめの何回かは上手く同期するのですが、段々ズレが激しくなっていきます。 そもそもタイムラインを使ったアニメーションとタイマーは上手く同期しないものなのでしょうか? 他によい方法がありましたらご助力願います。

  • C# 簡単なシューティング 自機移動について

    かなりの初心者で困っています。 簡単なシューティングを作ろうとおもっています。 使用ソフトはVisualC#2005です。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //自機(右移動) private void button3_Click(object sender, EventArgs e) { if (timer1.Enabled == false) { timer2.Enabled = false; timer1.Enabled = true; } else { timer1.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; } } private void timer1_Tick(object sender, EventArgs e) { pictureBox1.Left = pictureBox1.Left + 2; } //自機(左) private void button4_Click(object sender, EventArgs e) { if (timer2.Enabled == false) { timer1.Enabled = false; timer2.Enabled = true; } else { timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; } } private void timer2_Tick(object sender, EventArgs e) { pictureBox1.Left = pictureBox1.Left - 2; } //自機(上) private void button1_Click(object sender, EventArgs e) { if (timer3.Enabled == false) { timer4.Enabled = false; timer3.Enabled = true; } else { timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = false; } } private void timer3_Tick(object sender, EventArgs e) { pictureBox1.Top = pictureBox1.Top - 2; } //自機(下) private void button2_Click(object sender, EventArgs e) { if (timer4.Enabled == false) { timer3.Enabled = false; timer4.Enabled = true; } else { timer1.Enabled = false; timer2.Enabled = false; timer4.Enabled = false; } } private void timer4_Tick(object sender, EventArgs e) { pictureBox1.Top = pictureBox1.Top + 2; } } } 自機は画像(PictureBox)でボタンによって上下左右に移動します。 FormのSizeは800,630です。 自機の移動がボタンなのでキー入力によって操作できるようにしたいのですが、 それと、自機の移動範囲を画面からでないようにしたいです。 あまりC#を理解できてない上でつくったのでおかしな点が多々あると思います。 教えていただける方がいると助かります。

専門家に質問してみよう