Игровой цикл работает нормально, но экран Android не прорисован - PullRequest
0 голосов
/ 17 октября 2018

игровой цикл:

 public void gameLoop() {
     long lastLoopTime = System.nanoTime();
    final int TARGET_FPS = 1;
     final long OPTIMAL_TIME = 1000000000 / TARGET_FPS;
     while (gameRunning) {
         long now = System.nanoTime();
         long updateLength = now - lastLoopTime;
         lastLoopTime = now;
         double delta = updateLength / ((double) OPTIMAL_TIME); //time 
 related 
 values multiplied with delta
        lastFpsTime += updateLength;
         fps++;
         if (lastFpsTime >= 1000000000) {
             System.out.println("(FPS: " + fps + ")");
             lastFpsTime = 0;
             fps = 0;
         }
         //update();
         try {
             sleep((lastLoopTime - System.nanoTime() + OPTIMAL_TIME) / 
 1000000);
        }
         catch(InterruptedException e){
            e.printStackTrace();
          }
     }
}

draw2: метод отрисовки работал отлично, когда я тестировал его с помощью метода update в прошлый раз.Я использовал цикл для вызова методов во временном интервале с заданным fps.Почему-то они не вызываются и не рисуют что-либо на экране (белое).

public void draw2(){
    Bitmap bmp = Bitmap.createBitmap((int) xscreen, (int) yscreen, 
Bitmap.Config.ARGB_8888);
    Image.setImageBitmap(bmp);
    Paint paint = new Paint();
    Canvas canvas = new Canvas(bmp);
    canvas.drawColor(Color.rgb(0,0,0));

    for (int i = 0; i < Stars.size(); i++){
        paint.setColor(Color.argb(255,255,255,255));

canvas.drawCircle(Stars.get(i).x,Stars.get(i).y,Stars.get(i).radius,paint);
    }
    for(int i = 0; i < Planets.size();i++){
        Trailsize = Planets.get(i).Trails.size();

        Planets.get(i).update((float)0.1);
        paint.setColor(Color.argb(255,150,150,150));
paint.setColor(Color.argb(255,Planets.get(i).red,Planets.get(i).green,
Planets.get(i).blue));

canvas.drawCircle(Planets.get(i).getX(),Planets.get(i).getY(),20,paint);

        for (int k = 0; k < Trailsize;k++){
            float b = 255 * (k / Trailsize);
            float trail = Planets.get(i).trail;
            int alpha = (int)(50 + b);
            if (Trailsize == Planets.get(i).trail) {
                alpha = (int) (255 - b + 50);
            }
            if (alpha > 255){
                alpha = 255;
            }
            paint.setColor(Color.argb(alpha, Planets.get(i).red, 
Planets.get(i).green, Planets.get(i).blue));
            paint.setStrokeWidth(10);
            if (k != 0) {
                canvas.drawLine(Planets.get(i).Trails.get(k).x, 
Planets.get(i).Trails.get(k).y, Planets.get(i).Trails.get(k - 1).x, 
Planets.get(i).Trails.get(k - 1).y, paint);
            }
        }
    }
    Image.setImageBitmap(bmp);
}

Рисование работает при вызове при создании, но я получаю белый экран, только когда пропускаю этот цикл.Я не знаю, почему метод рисования не вызывается и экран только белый.Помощь будет оценена.Спасибо за чтение!

...