Ren'Py: Transform()

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Milkymalk
User
Beiträge: 12
Registriert: Freitag 11. Mai 2012, 22:22

Hallo,
Ich bin ganz neu hier, sehr neu in Python und bin gerade etwas ratlos.

Erstmal, ich bin nicht sicher, ob das hier die richtige Kategorie ist, aber es sieht mir danach aus. Es geht um das hm, wie auch immer man sowas bei Python nennt, "Ren'Py" und seine Transform() und renpy.show() Funktionen:
http://www.renpy.org/wiki/renpy/doc/ref ... /Transform
http://www.renpy.org/wiki/renpy.show

Ich habe folgenden Code geschrieben:

Code: Alles auswählen

    class Hero:
        def __init__(self):
            self.x = -2
            self.y = 0
            return

        def move_left():
            renpy.show('playersprite walkleft',tag=playersprite)
            self.transform = Transform(child=playersprite, linear=0.9, xpos=(grid_xzero + ((self.x-1)*grid_width) - int(0.25*grid_width)))
            self.x -= 1
            return
            
        def move_right():
            renpy.show('playersprite walkright',tag=playersprite)
            self.transform = Transform(child=playersprite, linear=0.9, xpos=(grid_xzero + ((self.x+1)*grid_width) - int(0.25*grid_width)))
            self.x += 1
            return
Im Speziellen geht es um die Methoden move_left und move_right.

Da ich Python gleichzeitig mit Ren'Py angefangen habe zu benutzen weiß ich nicht, wieviel proprietär von Ren'Py stammt und wieviel allgemein Python ist. Daher erläutere ich das hier etwas.
Im init:-Teil des Scripts wird folgendes deklariert:

Code: Alles auswählen

image playersprite walkright:
    "Grafik/Battle/Player/walkright_0.png"
    pause .3
    "Grafik/Battle/Player/walkright_1.png"
    pause .3
    repeat
    
image playersprite walkleft:
    im.Flip("Grafik/Battle/Player/walkright_0.png", horizontal=True)
    pause .3
    im.Flip("Grafik/Battle/Player/walkright_1.png", horizontal=True)
    pause .3
    repeat
Ich glaube, diese Notation ist speziell für Ren'Py. Es gibt die "Bilder" (eher "Animationen") walkleft und walkright, die jeweils das Keyword playersprite haben. Bilder mit dem gleichen Keyword sind zueinander exklusiv: Wird eines angezeigt, verschwinden alle anderen.

Das Problem ist jetzt Folgendes: Die Methoden machen exakt Nichts. Keine Fehlermeldung, aber auch kein Bild, das erscheint, das bereits angezeigte Bild mit dem Keyword playersprite bewegt sich nicht, es passiert rein gar nichts bis das Script die pause-Anweisungen abgearbeitet hat und mit dem restlichen Script weitermacht.
Wahrscheinlich benutze ich renpy.show() und Transform() einfach komplett falsch, aber aus der Dokumentation werde ich nicht schlauer, und im Ren'Py-Forum kommt schon seit gestern keine Antwort, wohl weil es eher ein Pythonproblem ist als eines der Ren'Py-Sprache.
Zuletzt geändert von Anonymous am Freitag 11. Mai 2012, 22:55, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also, zuallererst sind die ganzen return Statements völlig sinnlos, weil sie nicht mehr machen, als sowieso passiert. Zweitens kann es sein, dass einfach playersprite unbekannt ist. Wo werden denn die ganzen Namen definiert, die in deinem Quellcode referenziert werden?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Milkymalk
User
Beiträge: 12
Registriert: Freitag 11. Mai 2012, 22:22

Danke erstmal für die Antwort, ich habe eigentlich nicht mehr damit gerechnet :)

Definiert wurde alles, das kann ich dir versichern, entweder vorher schon oder im Ren'Py-Modul. "image playersprite walkright:" definiert ein Bild mit dem Tag "playersprite", daher ist das bekannt.

Ich habe jetzt herausgefunden, daß das Problem ganz woanders lag: Ich habe versucht, die Methode mit "hero.move_left" aufzurufen, statt mit "hero.move_left()", weil mir nicht bewußt war, daß ich die Klammern auch brauche, wenn ich gar keine Argumente übergeben will.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich habe auch noch was.

Kann es sein das vor jedes

Code: Alles auswählen

renpy.show()
ein

Code: Alles auswählen

renpy.scene()
gehört?

Ich finde das renpy Vorgehen aber etwas verwirrend. Hast du mal umfangreichere Python Beispiele gefunden?

Beispiele die etwas mit 'class Hero' und 'def __init__' machen so wie in deinem Code konnte ich nicht finden.
Milkymalk
User
Beiträge: 12
Registriert: Freitag 11. Mai 2012, 22:22

Nein, 'renpy.scene()' löscht nur das Bildlayer, das ist quasi wie mit dem Schwamm über die Tafel zu gehen. Man könnte auch jedes angezeigte Displayable einzeln mit 'renpy.hide()' verschwinden lassen, so ist es aber einfach simpler.
Sr4l hat geschrieben:Ich finde das renpy Vorgehen aber etwas verwirrend. Hast du mal umfangreichere Python Beispiele gefunden?

Beispiele die etwas mit 'class Hero' und 'def __init__' machen so wie in deinem Code konnte ich nicht finden.
Ich auch nicht - das war ja mein Problem. Ich mußte eine Menge Kreuzvergleiche zwischen der Ren'Py-Dokumentation (die unter aller Sau, unvollständig und veraltet ist) und diversen Seiten über Python allgemein machen. Ich war ja nicht einmal sicher, ob ich 'Transform()' richtig eingesetzt hatte (hatte ich übrigens nicht einmal ansatzweise), weil es zwar viele Argumente nimmt, das Beispiel dazu aber nur minimal ausgestattet und gar nicht erklärt ist. Deswegen hat mich das ja auch 5 Tage gekostet, das so hinzubekommen, daß es läuft.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Wenn du dich nicht vor mehr Code fürchtest könntest du dir pygame anschauen, damit bist du flexibler, musst aber auch mehr selber machen.

Von RenPy habe ich vor deinem Post noch nie was gehört und vielen hier im Forum wird es ähnlich gehen.
Milkymalk
User
Beiträge: 12
Registriert: Freitag 11. Mai 2012, 22:22

Ich fürchte mich nicht :-) Ich habe mit AGS schon mal ein Spiel in C++ geschrieben. Aber für meine Zwecke bringt Ren'Py fast alles mit, was ich brauche und sonst selbst schreiben müßte - es reduziert den Aufwand enorm. Mein Problem kam eher davon, daß ich etwas einbauen wollte, wofür Ren'Py nicht gedacht ist und es deswegen auch kaum bis gar nicht dokumentiert oder mit mitgebrachten Funktionen vereinfacht.

PyGame schaue ich mir sicher mal an, aber momentan bin ich glücklich :D
Antworten