Problem mit Auflösung in Pygame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

Hi zusammen,

hatte da eine Idee für ein Spiel und habe mich nun daran gemacht, diese umzusetzen. Diesmal geht's Richtung Lemmings, DOS Ära.

Nun habe ich ein Problem mit der Auflösung. Ich möchte meine Games stets in FULLSCREEN und 4:3 und möglichst pixelig; Old School eben. Am liebsten wäre mir 320 x 240, aber Pygame unterstützt dies nicht... (das Bild ist abgeschnitten??) die kleinste native Auflösung welche FULLSCREEN unterstützt ist 640 x 480 wie's scheint. Das wäre ja auch OK, aber ist viel komplizierter, weil ich alle Sprites immer doppelt so gross abspeichern muss (320 x 240 zeichnen und dann vergrössern). Und dies verursacht auch andere Probleme. In Lemmings kann ja die ganze Welt zerstört werden, und die übrigbleibenden Pixel sind zum Teil nur einzelne. Wenn ich nun zum Beispiel einen Lemming habe, der schiesst (z. Bsp. wie in Worms mit einer Pistole, bei der man das Projektil gar nicht sieht - es wird also im selben Frame errechnet, wo es aufschlagen wird?) - kann ich mir kaum vortsllen, wie ich das so schnell rechnen soll. Die Flugbahn muss jedes ihrer Pixel abchecken, um zu errechnen, wo es einschlägt (obwohl es viiieel schneller ist als 1 Pixel / Frame). Noch tragischer: Die Kollisionsabfrage mit den gegnerischen Lemmings... ich hatte mir vorgestellt, einen auf Multiplayer zu machen, wo sich Lemming Teams gegenseitig bekriegen können. Wie könnte man dies schnell rechnen..?

Ich sehe noch weitere Probleme, die ich im Moment nicht lösen kann, aber ich glaube das rechnerische (das eben mit der Auflösung zusammenhängt wie mir scheint), ist das grösste im Moment glaub ich.

Auch habe ich immer wieder Probleme mit Winkel resp. Kreisberechnungen... da muss ich nochmals über die Bücher (braucht's ja zum Beispiel zum Zielen in alle Richtungen mit Zielvisier etc)

Hat jemand gerade einen Ansatz für mich, damit ich wieder etwas weiterkomme?

Wär toll, vielen Dank!

es grüsst:


Henry
Ich code, also bin ich.
deets

Fuer dein Grafik-Problem: warum renderst du nicht alles in einen Buffer der Groesse 320x200, und skalierst es hoch? Dabei kannst du auch noch nette Effekte wie Zeilen mit Zwischenraeumen und aehnliches einbauen. Und generell solltest du vielleicht eher auf OpenGL zur Visualisierung setzen, dann ist Rotation/Skalierung preiswert zu haben.

Fuer die Bullet-Problematik: das laesst sich ueber sogenanntes "sweeping" loesen,

http://www.box2d.org/manual.html#_Toc258082970

Such mal nach "bullets" bzw. sweep. Ich wuerde dir eh empfehlen, auf Box2D zu setzen fuer alle moegichen Dinge in deinem Spiel - auch die Physik fallender und laufender Lemminge zB, Kollisionsabfragen usw.

Last but not least: multiplayer ist notorisch schwierig, gerade was echtzeitige Interaktion angeht. Da gab's hier vor kurzem mal nen Thread zu ein paar Loesungsansaetzen.
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

Hi deets,

vielen Dank für die netten Tipps! Aber ich kann kein C++. Ich bin schon oft darüber "gestolpert", dass Pygame oft etwas "hinkt" oder ungenau ist (vordefinierte Funktionen zum Zeichnen etc), aber muss ich wirklich C++ lernen, um "echte" Games programmieren zu können? Oder könnte ich auch auf Python Basis mit OpenGL und 2DBox arbeiten und so die effektivsten Ressourcen davon "anzapfen"?

danke
Ich code, also bin ich.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Wie deets ja schon gesagt hat, solltest du in einen Buffer schreiben, welchen du dann beliebig skalieren kannst. Mit Pygame sollte das kein Problem sein und auch durch die Hardware beschleunigt werden. Um Box2d zu nutzen musst du auch kein C++ verwenden, das hättest du mit einer einfachen Suche aber auch selber herausgefunden.

Wenn du glaubst, dass Pygame nicht das macht was es soll, dann liegt das eher daran, dass du nicht verstehst was Pygame macht ;-) Effizientes zeichnen von Grafiken ist keine ganz triviale Angelegenheit und man muss den einen oder anderen Kompromiss eingehen. Du weißt wahrscheinlich einfach nur nicht, wann dies der Fall ist und wann nicht.

Auch über die Geschwindigkeit beim Zeichnen brauchst du dir keine sorgen machen. Deine Anforderungen sind so gering, die würde auch ein PC aus den Neunzigern schaffen. Du musst die Berechnungen eben nur geschickt anfangen und nicht selber Pixel für Pixel zeichnen. Die Herausforderung ist, dies vernünftig zu programmieren.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

alrighty, dann schau ich mir das Bufferzeugs und Box2d mal genauer an!

vielen Dank
Ich code, also bin ich.
Antworten