"fl0w in games" clone

Du hast eine Idee für ein Projekt?
BlackJack

Beitragvon BlackJack » Dienstag 13. März 2007, 21:34

Also ich meinte, dass die Qualität eines rotierten Bildes nicht besonders ist, das würde ich nicht als Bug bezeichnet. Ist halt einfach nur ein einfacher Algorithmus.

Dein Bild sieht so aus, als wenn nicht beachtet wurde, dass die rotierten Bilder grösser sind als das Ausgangsbild.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 13. März 2007, 22:54

BlackJack hat geschrieben:Dein Bild sieht so aus, als wenn nicht beachtet wurde, dass die rotierten Bilder grösser sind als das Ausgangsbild.

Du hast recht - in der Anfangsphase habe ich das wirklich nicht beachtet. Später aber schon, nur davon habe ich dann keine Bilder mehr. Inzwischen funktioniert das ja auch passabel, nachdem ich eine Kopie des ungedrehten Bildes immer gespeichert habe und für jede Rotation das Ursprungsbild rotiere.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Dienstag 13. März 2007, 23:17

Das hätte man aber auch bei einem besseren Algorithmus so gemacht. Jede Rotation ist verlustbehaftet.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 13. März 2007, 23:26

BlackJack hat geschrieben:Das hätte man aber auch bei einem besseren Algorithmus so gemacht. Jede Rotation ist verlustbehaftet.

Ok, hast Recht.

Was mir aber jetzt so einfällt: an dieser Stelle hätte man auch Pygame intelligenter machen können, so dass es das speichern und rotieren im Hintergrund selbst macht. Ich sehe darin eigentlich keine größeren Nachteile. Die Rotationsfunktion würde dadurch hochwertiger scheinen als sie ist.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Mittwoch 14. März 2007, 10:55

Mach doch! ;)
Benutzeravatar
Michael Schneider
User
Beiträge: 566
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Beitragvon Michael Schneider » Mittwoch 14. März 2007, 20:46

Hallo,

ich kann jeden nur vor diesem "Spiel" warnen, es macht beim ersten Konsum süchtig!

Ich wäre auf jeden Fall dabei, wenn wir einen Clone programmieren wollen. Dabei würde ich Tkinter/Canvas/PIL als erstes versuchen, und wenn das nicht geht eben PyGame.
Beim Canvas wird das aber leider nichts mit Vektorgrafik. Allein aufgrund der Tatsache, dass man die Items nicht drehen kann. So sind Ovale leider immer axialsymmetrisch um die x- und y-Achse. :-( Und nur Kreise sind auch langweilig.
Deshalb würde ich vorschlagen, die Rotationszustände mit einem Set von Einzelbildern zu simulieren. Diese sollten aus Performancegründen bei Programmstart berechnet und zwischengespeichert werden.

Also, wenn es los geht, bin ich dabei!!

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Beitragvon Dill » Mittwoch 14. März 2007, 23:24

Ich wäre auf jeden Fall dabei, wenn wir einen Clone programmieren wollen.


schön :)


warum würdest du Tkinter/Canvas/PIL pygame vorziehen?
eine grosse hilfe dürfte die pygame-sprite-klasse mit kollisionsabfrage sein. das müsste man wenn man PIL nutzt ja alles selbst machen.

habe beides noch nie wirklich benutzt, lasse mich also gern eines besseren belehren.


ich habe das pyOde tutorial2 so abgeändert, dass ein kreis der maus folgt, solange der linke button gedrückt ist.
vor allem um zu anfang schnell zu ergebnissen zu kommen wäre ode nützlich, evtl. aber zu langsam.

pyode: http://pyode.sourceforge.net/
euclid: http://partiallydisassembled.net/euclid.html

Code: Alles auswählen


import pygame, ode, euclid
from pygame.locals import *


def get_mouse_event(events):
    """
    gibt bei mouseevents die koordainaten
    und den status von button1 zurueck
    """
    for event in events:
        if event.type == MOUSEBUTTONUP:
            return {"down":0,"coord":event.dict["pos"][0:2]}
        if event.type == MOUSEBUTTONDOWN:
            return {"down":1,"coord":event.dict["pos"][0:2]}
        if event.type == MOUSEMOTION:
            return {"down":event.dict["buttons"][0],"coord":event.dict["pos"][0:2]}


# Initialize pygame
pygame.init()

# Open a display
srf = pygame.display.set_mode( (800,600) )

# Create a world object
world = ode.World()
world.setGravity( (0,0,0) )

# Create a body inside the world
body1 = ode.Body(world)
M = ode.Mass()
M.setSphere(2500.0, 0.05)
M.mass = 1.0
body1.setMass(M)
body1.setPosition( (70,70,0) )
   
fps = 50
dt = 1.0/fps
clk = pygame.time.Clock()

force_norm = 0  # betrag der kraft
button_down = 0 # linke maustaste gedrueckt?
force = None
cursor_pos = None

while True:
   
    # Clear the screen
    srf.fill( (255,255,255) )
   
    body_pos = body1.getPosition()[0:2]
   
    mouse_event = get_mouse_event( pygame.event.get() )
   
    if mouse_event:
        button_down = mouse_event["down"]
        cursor_pos = [ int(c) for c in mouse_event["coord"] ]
   
    if cursor_pos:
        if button_down:
            force_norm = 100 # volle kraft voraus
        else:
            # maustaste nicht gedrueckt: abbremsen
            force_norm = force_norm * (1 - 0.0003 * force_norm)
           
        # vektor zischen kreis und cursor
        force = euclid.Vector2(cursor_pos[0], cursor_pos[1]) - euclid.Vector2(body_pos[0], body_pos[1])
        # vektorbetrag anpassen
        force = force_norm * force.normalize()
       
        # eigentlich wollte ich ja setForce nutzen, aber das verhaelt sich seltsam
        # die auf den kreis wirkende kraft wird immer groesser!?
        # also setze ich direkt v
        body1.setLinearVel( (force[0], force[1], 0) )
        #body1.setForce( (force[0], force[1], 0) )
       
    world.step(dt)
   
    pygame.draw.circle(srf, (55,0,0), (body_pos[0],body_pos[1]), 20, 0)
   
    pygame.display.flip()
   
    # Next simulation step
    world.step(dt)
   
    # Try to keep the specified framerate   
    clk.tick(fps)
Benutzeravatar
Michael Schneider
User
Beiträge: 566
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Beitragvon Michael Schneider » Donnerstag 15. März 2007, 22:18

Dill hat geschrieben:
Ich wäre auf jeden Fall dabei, wenn wir einen Clone programmieren wollen.


schön :)


warum würdest du Tkinter/Canvas/PIL pygame vorziehen?
eine grosse hilfe dürfte die pygame-sprite-klasse mit kollisionsabfrage sein. das müsste man wenn man PIL nutzt ja alles selbst machen.


Hi Dill,

das hat erstmal zwei Hauptgründe:
1. kenne ich mich in Tkinter (noch) weitaus besser aus - obwohl ich aber tiefer in PyGame einsteigen möchte, und
2. ist es eine Frage der Dependencies. Viele User lassen sich abschrecken, wenn sie für ein Spiel ein halbes Duzend Abhängigkeiten installieren müssen - in der Regel sinkt die Vorfreude proportional zur wachsenden Anzahl zusätzlicher Programmpakete. ;-) Daher ist PIL einfacher zu installieren als PyGame + pyOde, wobei man auch auf PIL verzichten kann, wenn man es doch mit Canvasgrafik allein macht.

Für die Kollisionsanalyse gibt es die Canvas.find_xxx-Methoden. In unserem Fall eignet sich wohl Canvasinstanz.find_overlapping(x1,y1,x2,y2) am besten, mit der man alle Items bekommt, die den bezeichneten Bereich berühren.

Ich habe pyOde und Dein Beispiel noch nicht getestet, sorry. Dafür habe ich mal versucht, das Vorgehen mit dem Canvas zu demonstrieren:
http://www.python-forum.de/viewtopic.php?p=61988#61988
Leider macht dieses Script aus irgendwelchen Gründen noch Probleme :cry:.

Aber PyGame bietet zweifellos bessere Möglichkeiten zur Maus-, Eingabe-, Soundsteuerung und Grafikkontrolle.

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Beitragvon Dill » Samstag 17. März 2007, 14:00

Michael Schneider hat geschrieben:1. kenne ich mich in Tkinter (noch) weitaus besser aus - obwohl ich aber tiefer in PyGame einsteigen möchte, und


ich kenne beides nicht, von daher ein punkt für tk. Oder für pygame, falls du dich hier weiterbilden möchtest.

Michael Schneider hat geschrieben:2. ist es eine Frage der Dependencies. Viele User lassen sich abschrecken, wenn sie für ein Spiel ein halbes Duzend Abhängigkeiten installieren müssen - in der Regel sinkt die Vorfreude proportional zur wachsenden Anzahl zusätzlicher Programmpakete. Daher ist PIL einfacher zu installieren als PyGame + pyOde, wobei man auch auf PIL verzichten kann, wenn man es doch mit Canvasgrafik allein macht.


das stimmt natürlich, aber man kann ja einen installer bauen, der das in die hand nimmt. oder py2exe nutzen, da hat man dann doch keine probleme mehr mit dependencies, oder?


Michael Schneider hat geschrieben:Für die Kollisionsanalyse gibt es die Canvas.find_xxx-Methoden. In unserem Fall eignet sich wohl Canvasinstanz.find_overlapping(x1,y1,x2,y2) am besten, mit der man alle Items bekommt, die den bezeichneten Bereich berühren.



wie ist es mit der performance? denke pygame ist eher darauf vorbereitet mehrere sprites über den bildschrim zu bewegen - kann dazu jmd was sagen?
und die kollisionsabfrage von pygame sollte besser + schneller sein, als das was wir mit den TK-mittel auf die beine stellen können.

noch was zum thema vektor oder pixel:
vektorgrafiken wären super.
was hätte man zb für freiheiten, wenn man die segmente der kreaturen dynamisch aus beziers aufbaut. :shock:
aber da scheint es wohl nichts zu geben, nicht nur in python, sondern überhaupt. einfach zu rechenintensiv. (sieht man ja an der flash-version, flash ist wahrscheinlich recht schnell)


ich habe angefangen das beipsiel oben zu erweitern (statt einem ball bewegent sich eine schlange) ist leider vor dem wochenende nicht mehr fertig geworden, kommt dann Di oder Mi.
Wir könnten das dann mal von pygame in TK portieren und dann weitersehen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 17. März 2007, 18:36

Dill hat geschrieben:das stimmt natürlich, aber man kann ja einen installer bauen, der das in die hand nimmt. oder py2exe nutzen, da hat man dann doch keine probleme mehr mit dependencies, oder?

Nein, py2exe bindet alles ein.

Dill hat geschrieben:noch was zum thema vektor oder pixel:
vektorgrafiken wären super.
was hätte man zb für freiheiten, wenn man die segmente der kreaturen dynamisch aus beziers aufbaut. :shock:
aber da scheint es wohl nichts zu geben, nicht nur in python, sondern überhaupt. einfach zu rechenintensiv. (sieht man ja an der flash-version, flash ist wahrscheinlich recht schnell)

Vielleicht eventuell cairo nutzen, dazu gibt es auch ein Python-Binding (Cairo wird von Monos libgdiplus verwendet, ebenso von Gecko 1.8 für SVG und Gecko 1.9 für alles, von GTK+ 2.8 für die meisten Widgets).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Beitragvon Dill » Samstag 17. März 2007, 18:55

Cairo habe ich schon getestet. siehe posting weiter oben (seite 1).
es ist nicht schnell genug, evtl. habe ich aber etwas falsch gemacht ...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 17. März 2007, 19:03

Dill hat geschrieben:es ist nicht schnell genug, evtl. habe ich aber etwas falsch gemacht ...

Vielleicht mal ohne Pygame probieren?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Michael Schneider
User
Beiträge: 566
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Beitragvon Michael Schneider » Samstag 17. März 2007, 21:22

Leonidas hat geschrieben:
Dill hat geschrieben:es ist nicht schnell genug, evtl. habe ich aber etwas falsch gemacht ...

Vielleicht mal ohne Pygame probieren?


Nun, Flash Media ist ja in der Regel nicht SO anspruchsvoll, und wenn es damit schon Probs gibt, dann liegt das entweder an der Grafikkarte (mein Tip) oder am Programm. Also grob gesagt an der Hardware oder der Software. 8)

Grüße,
Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Michael Schneider
User
Beiträge: 566
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Beitragvon Michael Schneider » Samstag 17. März 2007, 23:13

Dill hat geschrieben:das stimmt natürlich, aber man kann ja einen installer bauen, der das in die hand nimmt. oder py2exe nutzen, da hat man dann doch keine probleme mehr mit dependencies, oder?

Da hast Du recht. Man hat aber nicht immer die Rechte - oder das Vertrauen, beliebige Dinge (Zusatzpakete oder individuelle Kompilierungen) zu installieren. Da wäre es schon nicht schlecht, wenn man alles mit Bordmitteln hinbekäme.

Dill hat geschrieben:
Michael Schneider hat geschrieben:Für die Kollisionsanalyse gibt es die Canvas.find_xxx-Methoden. In unserem Fall eignet sich wohl Canvasinstanz.find_overlapping(x1,y1,x2,y2) am besten, mit der man alle Items bekommt, die den bezeichneten Bereich berühren.

wie ist es mit der performance? denke pygame ist eher darauf vorbereitet mehrere sprites über den bildschrim zu bewegen - kann dazu jmd was sagen?

Wie es speziell mit Images/Sprites ist, kann ich nicht sagen. Ich denke, PyGame ist da nur eleganter, nicht aber unbedingt schneller. Schau Dir mal mein aktuelles Prove-of-Concept Programm an und sag mir, welche Auslastung Dein Rechner hat (unten rechts in der Ecke). Du findest den Code hier: http://paste.pocoo.org/show/1213/

Dill hat geschrieben:und die kollisionsabfrage von pygame sollte besser + schneller sein, als das was wir mit den TK-mittel auf die beine stellen können.

Was bewegt Dich zu dieser Aussage? Letztlich kochen beide nur mit Wasser, bzw. nutzen beide bounding boxes um zu prüfen, ob sich ein Teil überlagert oder nicht.

Dill hat geschrieben:noch was zum thema vektor oder pixel:
vektorgrafiken wären super.
was hätte man zb für freiheiten, wenn man die segmente der kreaturen dynamisch aus beziers aufbaut. :shock:

Ganz meine Meinung. Vektor in Canvas trifft sich gut. Muss man eben eine Kurve aus Kreissegmenten mit unterschiedlichen Mittelpunkten und Radien aufbauen.
Bezierkurven sind nicht unbedingt leicht zu berechnen, es gibt aber sehr performanceschonende Annäherungen. Mit der richtigen Software kann man viele Kurven einfach und komfortabel drehen. Aber willst Du wirklich Figuren und Animationen in Bezier-Kurven beschreiben?? :shock:

Dill hat geschrieben:Wir könnten das dann mal von pygame in TK portieren und dann weitersehen.

Wie wäre es, wenn wir mein Prove-of-Concept nach PyGame portieren? ;-)

Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

Beitragvon Dill » Sonntag 18. März 2007, 14:37

bin bis mo abend unterwegs unter kann mir deine neue version jetzt nicht ansehehn.
melde ich Di wieder!

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder