2010-12-15 18 views
5

Estoy tratando de decidir si es mejor usar una imagen grande previamente renderizada para un juego de mapas en desplazamiento o hacer que los mosaicos sean individuales en la pantalla de cada cuadro. Intenté programar el juego en ambos sentidos y no veo ninguna diferencia obvia en la velocidad, pero eso podría deberse a mi falta de experiencia.Pygame: Mapa de mosaico o imagen grande

Además de la memoria, ¿hay alguna razón de velocidad para no usar un mapa procesado previamente?

Respuesta

5

La única razón que se me ocurre para elegir uno sobre el otro en hardware moderno (algo tan rápido y con tanto ram como, por ejemplo, un iPhone) serían los técnicos que hacen que el código del juego sea más fácil de seguir . No hay mucho rendimiento sabio para distinguirlos.

Una excepción que puedo pensar, es si está utilizando un fondo verdaderamente masivo y está haciendo renderizado de mosaicos en una GPU, los mosaicos pueden ser texturas y obtendrá un modesto aumento de velocidad ya que no necesita presionar mucha información entre cpu y gpu por cuadro, y usará muy poco RAM de video.

+0

Gracias por la respuesta rápida. Creo que por ahora, voy a seguir con el mapa pre-renderizado. Para evitar los cálculos adicionales para compensar y luego dibujar las fichas en pedregal. Mis imágenes de mapa solo tienen unos 62kB. –

1

La memoria y la velocidad están estrechamente relacionadas. Si su conjunto de mosaicos cabe en la memoria de video, pero el mapa pre-renderizado no lo hace, la velocidad se verá afectada.

0

Depende del tamaño del mapa que desea hacer, sin embargo, con las tecnologías reales es muy difícil ver que un mapa de mosaico "renderizado" tarde más de lo esperado, los juegos basados ​​en mosaicos casi se extinguen, sin embargo siempre una buena práctica y un punto de partida para el mundo de la programación de juegos

1

Tal vez realmente dependa del tamaño del mapa, pero esto no debería ser un problema incluso con un equipo de bajo nivel.

El problema con las imágenes grandes es que lleva mucho tiempo volver a dibujar todas las cosas en él para que obtenga un "mapa" inflexible.

Pero una ventaja real con una imagen optimizada (use convert() - function y 16 bit) son los blittings rápidos.

Yo también trabajo con imágenes grandes en una computadora medianamente buena y tengo alrededor de 150 FPS formando imágenes enormes que requieren solo ~ 100? MB de RAM

image = image.convert()#video system has to be initialed 

El siguiente código crea una imagen (5000 * 5000), dibuja algo en él, (blit esto a la pantalla, ocupa toda la pantalla) * 50 veces y al final le dice el tiempo que tomó hacer un blit y un flip.

def draw(dr,image,count,radius,r): 
    for i in range(0,5000,5000//count): 
     for j in range(0,5000,5000//count): 
     dr.circle(image,(r.randint(0,255),r.randint(0,255),r.randint(0,255)),[i,j],radius,0) 

def geschw_test(screen,image,p): 
    t1 = p.time.get_ticks() 
    screen.blit(image,(-100,-100)) 
    p.display.flip() 
    return p.time.get_ticks() - t1 

import pygame as p 
import random as r 

p.init() 
image = p.Surface([5000,5000]) 
image.fill((255,255,255)) 
image.set_colorkey((255,255,255)) 
screen = p.display.set_mode([1440,900],p.SWSURFACE,16) 
image = image.convert()#extremely efficient 
screen.fill((70,200,70)) 
draw(p.draw,image,65,50,r)#draw on surface 
zahler = 0 
anz = 20 
speed_arr = [] 
while zahler < anz: 
    zahler += 1 
    screen.fill((0,0,0)) 
    speed_arr.append(geschw_test(screen,image,p)) 
p.quit() 
speed = 0 
for i in speed_arr: 
    speed += i 
print(round(speed/anz,1),"miliseconds per blit with flip") 
Cuestiones relacionadas