2010-12-15 9 views
5

Ich versuche zu entscheiden, ob es besser ist, ein vorgerendertes großes Bild für ein scrollendes Kartenspiel zu verwenden oder die Kacheln auf jedem einzelnen Bild individuell darzustellen. Ich habe versucht, das Spiel in beide Richtungen zu programmieren und erkenne keinen offensichtlichen Unterschied in der Geschwindigkeit, aber das könnte an meinem Mangel an Erfahrungen liegen.Pygame: Geflieste Karte oder großes Bild

Gibt es außer dem Speicher auch Gründe dafür, keine vorbereitete Karte zu verwenden?

Antwort

5

Der einzige Grund, den ich mir vorstellen kann, auf moderner Hardware (alles so schnell und mit so viel RAM wie zB ein iPhone) zu wählen, wären technische, die den Spielecode leichter nachvollziehbar machen . Es gibt nicht viel Leistung, um sie zu unterscheiden.

Eine Ausnahme, die ich denken kann, ist, wenn Sie einen wirklich massiven Hintergrund verwenden, und Kachel-Rendering in einer GPU, Kacheln können Texturen sein und Sie werden eine bescheidene Geschwindigkeit stoßen, da Sie nicht drücken müssen viel Daten zwischen CPU und GPU pro Frame, und es wird sehr wenig Video Ram verwenden.

+0

Danke für die schnelle Antwort. Ich denke für jetzt, bleibe ich bei der vorgerenderten Karte. Um zu vermeiden, die zusätzlichen Berechnungen zu versetzen und dann die Fliesen auf Geröll zu zeichnen. Meine Kartenbilder sind nur etwa 62kB groß. –

1

Speicher und Geschwindigkeit sind eng miteinander verwandt. Wenn Ihr Kachelsatz in den Videospeicher passt, aber die vorgerenderte Karte nicht, leidet die Geschwindigkeit.

0

Abhängig von der Größe der Karte, die Sie machen möchten, aber mit den tatsächlichen Technologien ist es sehr schwer zu sehen, eine Kachel-Karte "gerendert" länger als erwartet zu nehmen, gekachelte Spiele sind fast ausgelöscht, ist aber immer eine gute Übung und ein Ausgangspunkt für die Welt der Spiele-Programmierung

1

Vielleicht hängt es wirklich von der Größe der Karte, aber das sollte kein Problem sein, auch mit einem Low-Level-Computer.

Das Problem mit großen Bildern ist, dass es eine Menge Zeit braucht, um alle Sachen neu zu zeichnen, so dass Sie eine unflexible "Karte" bekommen.

Aber ein echter Vorteil mit einem optimierten Bild (verwenden Sie convert() - Funktion und 16 Bit) sind die schnellen Blittings.

Ich arbeite mit großen Bildern auch auf einem vielleicht mittleren guten Computer und ich habe rund 150 FPS durch das Blitting von riesigen Bildern, die nur ~ 100 benötigen? MB RAM

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

Der folgende Code erstellt ein Bild (5000 * 5000), zieht etwas darauf, (blitten dies den Bildschirm, füllt den Bildschirm) * 50-fache und am Ende sagt es, wie lange es dauert, um einen Blit und einen Flip zu machen.

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") 
Verwandte Themen