سؤال

ولقد فعلت سلسلة من الأسئلة حول J2ME لعبة النامية، وفي أحد الأيام، وعلق نيل كوفي

<اقتباس فقرة>   

وأما الجانب القيام issue-- كنت تريد حقا   للقيام 100 نقطة / ثانية في لعبة J2ME؟   كما أعتقد قد ذكر بينالي الشارقة، كنت   يجب حقا أيضا النوم إلى أخرى   النقطة المطلوبة للاستيقاظ، وليس ثابت   مدة كل مرة.

لسبب ما، هذا الشيء عالقا في ذهني، والآن أريد الأجوبة، ما أحتاج لجعل نومي gameloop إلى <م> المطلوب للاستيقاظ نقطة ، وأنا لا أعرف حقا حيث أن نقطة الانجاز (من الناحية النظرية).

لمصلحة من ردود الفعل، وهذا هو نسخة مبسطة من بلدي gameloop:

public void run() {
    Graphics g = this.getGraphics();
    while (running) {
        long diff = System.currentTimeMillis() - lastLoop;
        lastLoop = System.currentTimeMillis();
        input();
        this.level.doLogic();
        render(g, diff);
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            stop(e);
        }
    }
}

وشكرا لمساعدتكم !!

هل كانت مفيدة؟

المحلول

إذا قررت أنك تريد أن تجعل كل 10 ميلي ثانية، ثم لك:

loop {
  - record current time; render
  - do input/logic
  - check the current time, and calculate elapsed time
    - if less than 10 ms has elapsed, calculate the remaining time (10 millis - elapsed time); sleep for this duration
}

وأنا أفهم أنه قد يكون هناك مشاكل مع قرار مؤقت (على سبيل المثال، Thread.sleep (10) لا يجوز أن النوم لمدة 10 مللي ثانية بالضبط، وSystem.currentTimeMillis () قد لا يعود النتائج مع التفاصيل وصولا إلى 1 مللي ثانية). هذا هو نظام أساسي التابعة.

نصائح أخرى

وهناك مقال ممتاز على لعبة حلقات هنا ، إذا لم تكن قد قراءتها بالفعل.

ومن تجربتي الكتابة ألعاب J2ME، فأنت تريد أن تقليل وكم كنت تفعل أي شيء في حلقة اللعبة، على أنها لعبة حلقة مكتوبة ضعيف يمكن أن تستنزف بسرعة الهواتف بطارية ضئيلة. وهذا هو، إذا كنت من أي وقت مضى تقديم 10 ميلي ثانية، للتأكد من تحقق لمعرفة ما إذا كان أي شيء قد تغير، وإذا لم يكن كذلك، تخطي ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top