Mi aplicación se ejecuta demasiado rápido en algunos dispositivos Android

Acabo de lanzar una aplicación, ¡Evite los picos! en el mercado de Android. Algunos amigos han descargado las aplicaciones en sus teléfonos / tabletas, y me han dicho que funciona demasiado rápido. Funciona bien en mi Android (HTC Dream). ¿Hay alguna forma de saber cuánto más rápido se ejecutaría en ciertos androides y cómo ajustarlo en consecuencia? He buscado bajo y alto y todavía no he encontrado una respuesta.

preguntado el 27 de agosto de 11 a las 16:08

Estoy un poco confundido: define corre demasiado rápido con mayor detalle. ¿La velocidad de fotogramas es incorrecta? ¿Un temporizador termina antes de lo debido? ¿Los algoritmos toman menos tiempo del que deberían? ¿Qué es exactamente lo que corre demasiado rápido? -

2 Respuestas

He visto tu juego en Android Market y lo he probado.

En realidad, no puede determinar la velocidad mínima y máxima que obtendrá en los distintos hardware existentes, ya que:

  • Todos los días aparecen nuevos equipos en el mercado
  • En un hardware determinado, otros factores pueden influir en la velocidad de ejecución de su aplicación.

Lo que debes hacer es hacer que tu juego sea independiente de la velocidad de fotogramas. Para hacerlo, evite que sus objetos se muevan a una distancia fija cada vez que actualice su posición. Prefiero hacer que se muevan a una distancia fija por una cierta cantidad de tiempo.

Para hacerlo, mida el tiempo transcurrido desde la última actualización cada vez que actualice la posición del objeto y calcule la distancia a la que moverse en consecuencia.

De esta forma, dependiendo de la calidad del hardware, estos objetos saltarán o se moverán bien, pero al menos lo harán a la misma velocidad, y esta velocidad la determinarás tú. Esto es un poco lo mismo cuando juegas un juego de FPS en una máquina nueva o en una vieja: la velocidad del movimiento es constante, solo que la velocidad de fotogramas no lo es. En la vieja máquina tienes la impresión de que los objetos saltan, mientras que en la nueva se mueven con gracia, pero funciona en ambos casos (bueno, dentro de ciertos límites, por supuesto, para la vieja máquina). Y una máquina NUNCA puede ser demasiado rápida de esa manera.

Para darle un pseudocódigo, para un paracaidista que cae de arriba a abajo de la pantalla:

  • este es el bucle a evitar:

    while (playing) { 
        update_positions();
        display();   
    }
    
    update_positions() {
        paratrooper.y -= 10; // the paratrooper's altitude decreases of 10 at each update
    }
    

En un hardware lento, se necesitarán horas para cruzar la pantalla. En un hardware rápido, esto será demasiado rápido, ni siquiera verás caer al paracaidista.

  • esta es la forma correcta de hacer:

    while (playing) { 
        update_positions();
        display();   
    }
    
    update_positions() {
        time_elapsed = getSystemTimeInMS() - lastUpdateTimeInMS();
        paratrooper.y -= 0.01 * time_elapsed; // the paratrooper's altitude decreases of 10 per second
    
        setLastUpdateTimeMS(getSystemTimeInMS()); // This way it includes the calculation time
    }
    

En un hardware lento, cruzar toda la pantalla puede requerir 15 pantallas, mientras que en un hardware rápido se necesitarían 45 pantallas, pero en todos los casos, su paracaidista cae a 10 dp por segundo.

Respondido 28 ago 11, 02:08

Gracias. esto ayudó mucho. - Mike

¿Parece que tu aplicación es un juego? Si es así, probablemente tengas un bucle de juego que simplemente ejecuta el juego lo más rápido posible. Encontré que esta publicación sobre la implementación de bucles de juego es muy útil: Bucles de juego, cuando creé mi juego que involucró tiempo.

Respondido 27 ago 11, 20:08

Gracias. Esto es exactamente lo que necesitaba. - Mike

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.