Masalah dengan penggunaan pengatur waktu

Saya menulis pengatur waktu untuk menunjukkan kepada pengguna seberapa banyak dia dalam adegan saat ini:

timer_txt.x = 352;
timer_txt.y = 705;
var nCount: Number = 0;
var myTimer: Timer = new Timer(50, nCount);

timer_txt.text = "Time: " + nCount.toString();
myTimer.start();

function countUp(e: TimerEvent): void {
   nCount++;
   timer_txt.text = "Time: " + nCount.toString();
   if (nCount > 60) {
      var formattedTime =
        ((Math.floor(nCount / 60)) + ":" + (nCount % 60 >= 10 ? "" : "0") + (nCount % 60));
      timer_txt.text = "Time: " + formattedTime.toString();
   }
}

Saya memiliki tombol reset untuk mengatur ulang objek lain di tempat kejadian tetapi tidak untuk timer.

Masalah saya adalah:

  1. Setiap kali saya mengklik tombol reset, timer menjadi semakin lambat dan saya tidak tahu alasannya sementara saya tidak melakukan perubahan apa pun pada pengatur waktu. Saya memiliki banyak flags dan banyak child di atas panggung. Ketika pengguna mengklik/menyentuh tombol reset, semua flags akan sama dengan 0 dan semua child akan menjadi removed dan add kembali ke panggung.

  2. Ketika pengguna pergi ke adegan lain (pengatur waktu harus berhenti bekerja sementara nilai pengatur waktu saat ini perlu disimpan dalam variabel) dan ketika pengguna kembali ke adegan ini lagi pengatur waktu ini akan bekerja seperti: previous value + counting the time.

  3. Setiap kali saya membukanya di ponsel, kecepatannya berbeda dengan PC. Apakah ada solusi untuk mengkodekannya agar kompatibel dengan waktu perangkat asli? ini adalah fungsi yang saya tulis:

    function timerAtoB(firstColor: int): void {
       lineColor = firstColor;
       //GRID;
       //Path A to B
       var PathAB: Grid;
       PathAB = new Grid(4, 35, 20, 22, canvas, lineColor);
       this.addChild(PathAB);
    }
    

Fungsinya untuk menghubungkan dimensi A ke dimensi B. Koneksi antara A dan B akan dibangun menggunakan kelas bernama Grid- kelas ini untuk menemukan jalur terpendek antara A dan B dan membuat koneksi di antara keduanya (yang saya tidak ingin melaluinya lebih dari ini karena itu lebih rumit).

dan saya memanggil fungsi ini dengan beberapa penundaan:

delayCallFunctions(1000, timerAtoB, wireColor);

Saat saya menjalankannya di ponsel saya, penundaan ini akan berfungsi dengan baik tetapi tidak pada waktu yang tepat. Misalnya, saya menulis 1000ms berarti menjalankan fungsi tersebut setelah sekitar 1 sec, tetapi di ponsel saya dibutuhkan lebih dari 1 sec untuk menjalankan fungsi tersebut.

Terima kasih sebelumnya atas waktu dan bantuan Anda.


person mazName    schedule 16.06.2017    source sumber
comment
Untuk edisi kedua, saya telah menggunakan kelas variabel. Setiap kali pengguna keluar dari adegan, nilai saat ini akan dikirimkan ke kelas dan ketika pengguna kembali ke adegan yang sama, kelas akan meneruskan variabel ke adegan tersebut. tapi jelas itu tidak berfungsi dengan baik!   -  person mazName    schedule 16.06.2017
comment
Anda tidak memiliki pendengar di pengatur waktu Anda   -  person BadFeelingAboutThis    schedule 16.06.2017


Jawaban (1)


Masalah Anda kemungkinan besar adalah setiap kali Anda mengunjungi kembali bingkai yang berisi kode yang Anda posting ini, instance pengatur waktu lain akan dibuat.

var nCount: Number = 0;
var myTimer: Timer = new Timer(50, nCount);

Kode itu akan mengatur ulang nCount Anda ke 0, dan membuat pengatur waktu baru setiap kali Anda mengunjungi frame.

Kemungkinan besar, yang ingin Anda lakukan adalah:

//just declare the vars
var nCount:Number;
var myTimer:Timer;

//assign them a value only if they are empty
if(nCount === NaN) nCount = 0;
if(!myTimer) myTimer = new Timer(50, 0);

Anda juga ingin melakukan myTimer.stop(); setiap kali Anda meninggalkan tempat kejadian.

Perbedaan kecepatan antara desktop/ponsel Anda kemungkinan besar terkait dengan kinerja karena penundaan 50 ms bukanlah waktu yang lama untuk melakukan sesuatu yang rumit secara komputasi dan perangkat seluler mungkin tidak dapat mengimbanginya sehingga akan lebih lambat. pertimbangkan untuk meningkatkan penundaan itu menjadi 100 md atau bahkan 250 md untuk melihat apakah itu membantu. Selain itu, singkirkan formattedTime var karena tidak diperlukan dan pengatur waktu akan bekerja lebih baik tanpanya.

Sebagai tip, Anda sebenarnya tidak memerlukan nCount var, karena pengatur waktu itu sendiri memiliki properti currentCount yang melacak berapa kali ia dicentang sejak timer.reset() terakhir

person BadFeelingAboutThis    schedule 16.06.2017
comment
Terima kasih atas petunjuk dan jawaban yang bagus. Masalah Kedua telah terpecahkan tetapi masalah Pertama dan Ketiga masih tetap ada meskipun saya menetapkan '1000ms' untuk pengatur waktu. - person mazName; 17.06.2017
comment
Jika Anda memerlukan bantuan terkait item 1 dalam pertanyaan Anda, harap edit pertanyaan Anda untuk menyertakan kode yang relevan (kode apa pun yang dipicu oleh tombol reset Anda). Untuk #3, mungkin jelaskan lebih banyak tentang apa yang terjadi dan bagaimana Anda menentukan adanya perbedaan kecepatan? - person BadFeelingAboutThis; 19.06.2017
comment
Saya telah mengedit pertanyaan dan memberikan informasi lebih lanjut tentang pertanyaan saya. Tolong beri tahu saya, jika ada informasi lebih lanjut yang diperlukan. - person mazName; 21.06.2017