2010-01-16 20 views
9

Actualmente estoy empezando un motor de juego en Android, primera incursión en la plataforma y tiene los fundamentos en su lugar sin embargo estoy seguro de la mejor manera de acercarse independencia de la resolución cuando se utiliza SurfaceView para dibujar gráficos.independencia Resolución en Android SurfaceView

Buscando punteros en cuanto a cómo mantener el juego/sprites etc todos buscando lo mismo independiente de la pantalla, es obvio que no sería eficiente a escala todos los sprites cada cuadro o almacenar muchas variaciones para diferentes resoluciones

Respuesta

5

Simplemente escalará los sprites cuando los cargue. Supongo que los estás cargando como Bitmaps de un Recurso, ¿verdad? Si ese es el caso, entonces todo lo que necesita hacer es algo como esto:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.outHeight = spriteHeight * scale; 
options.outWidth = spriteWidth * scale; 

Bitmap sprite = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.sprite, options) 

Dónde escala se basa en el cambio del tamaño de la pantalla.

+0

Cheers Casey, con esta solución ¿crees que sería mejor para incorporar los sprites más altos posibles adecuados para las resoluciones más grandes de Android como el Nexus y luego reducir la escala de los gráficos para dispositivos más antiguos? – Tom

+0

Creo que sí, las cosas tienden a verse mejor cuando las bajas de escala que cuando las amplías. – CaseyB

+0

Así que probé este código y revisé la documentación ... por alguna razón, el sprite siempre sale con el mismo tamaño, incluso si codigo las variables OutHeight y OutWidth. – Tom

1

Hay dos enfoques simples:

Primeros:

En la creación de un punto de vista superficial, se llama:

onSizeChanged (int w, int h, int oldw, int oldh) 

Crear un par de variables globales, x & y por lo que si se reemplaza esto con:

onSizeChanged(int w, int h, int oldw, int oldh){ 
this.w=w; 
this.h=h; 
} 

Luego, en ningún cálculo de dibujo o juego que puede utilizar la ventana w y h.

Segundo:

llamada getWidth() & getHeight() en los cálculos de dibujo y juego.

Buena suerte con su juego!

+0

Gracias Laurence, supongo que mi pregunta está más dirigida a cómo lidiar con la escala si los mapas de bits en el juego para que el juego aparezca igual en todas las plataformas ... – Tom

Cuestiones relacionadas