Newb, Skript frage: Skript soll warten auf erfüllte Bedingun

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Koraktor
User
Beiträge: 12
Registriert: Samstag 2. August 2014, 18:32
Kontaktdaten:

Hey ho da draußen!

Ich bin gerade dabei mir Python selbst anzueignen weil dies die Sprache ist die in der Blender Gameengine (Python 3 in der Blender Version 2.70) verwendet wird.
Daher bitte ich um Entschuldigung für Anfänger fragen.

Kurze Einleitung:

ich habe ein Skript das für das einsammeln von Objekten in meinen „Point and Klick Adventure“ zuständig ist. Ich hab das Inventar auch schon soweit funktionsfähig (es verarbeitet eine Liste die den Inhalt beschreibt).
Wie man weiß kann man keine Sachen aufnehmen die nicht in Reichweite sind, also hier meine Frage:

gibt es einen Befehl in Python der das Skript stoppt bis eine bestimmt Bedingung erfüllt ist (das erreichen des Objektes)?

Ich kenne zwei ähnliche Befehle (sleep() und wait()) die so wie sie mir erklärt wurden nicht für so was geeignet zu sein scheinen.

Ich wäre daher sehr dankbar für eine Antwort ^^
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ohne mich jetzt mit der Blender API auszukennen, aber üblicherweise werden Events (Mausklicks, Tastendruck) innerhalb einer Schleife abgefragt. Wenn in dieser Schleife z. B. ein Mausklick erkannt wird, fragst Du den Event, an welcher Position dieser Mausklick erfolgt ist. Dann fragst Du Deine "Sachenobjekte" danach ab, ob sich eines davon auf dieser Position befindet.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Koraktor
User
Beiträge: 12
Registriert: Samstag 2. August 2014, 18:32
Kontaktdaten:

Ich hab mich anscheinend mit der Beschreibung verhauen ^^ meine Figur ist momentan in dem zustand das sie abfragt: ist der nimm butten gedrückt worden? ist die Maus über das Objekt? Ist links geklickt worden? Und ist das Objekt in der nähe? Und beim letzten Punkt ist die Problematik den es wird erkannt das dass Objekt nicht in der nähe ist, so habe ich das einprogrammiert das die Figur zu dem Objekt hinläuft. Hier soll das Skript solange warten bis in der Kollisionsabfrage der Name des Objekts auftaucht oder der Spieler abbricht.
Daher brauche ich einen Befehl der das Skript warten lässt bis das passiert. (so eine Art wait-if).

Danke fürs antworten ^^
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Koraktor hat geschrieben:Hier soll das Skript solange warten bis in der Kollisionsabfrage der Name des Objekts auftaucht oder der Spieler abbricht.
Daher brauche ich einen Befehl der das Skript warten lässt bis das passiert. (so eine Art wait-if).
Einen "Befehl" im eigentlichen Sinne gibt es nicht - Du meinst eher Funktion oder Methode. Die Frage ist doch, ob die Blender-API so etwas anbietet.

Aber: Wie funktioniert das Scripten denn dort allgemein? Schreibst Du *ein* Script für die gesamte Logik, oder schreibst Du lediglich kleinere Funktionen für eine bestehende Game-Engine, die bei auftretenden Events (Mausklick usw.) beliebige Funktionen aufruft?

Bei ersterem bräuchtest Du eine Art Event-Queue, in der Du die Aktionen für das Hingehen zum Objekt und das Aufnehmen einfügst, die dann nacheinander (for-Schleife!) abgearbeitet werden. Bei letzterem müsstest Du doch einfach "nur" eine Funktion aufrufen, die beim Erreichen eines Objektes aufgerufen wird.

Generell ist das imho eher eine Blenderfrage; ggf. bist Du in einem dafür spezialisierten Forum besser aufgehoben. Nicht, dass wir hier nicht gerne helfen, aber viele Blender-Fragen tauchen hier nicht auf und ich habe den Eindruck, dass die Regulars hier sich mit dem Thema nicht auskennen.

Wir brauchen da auf jeden Fall mal mehr Infos, sei es Quellcode, Quellcode-Schnipsel, Link zur API usw.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Koraktor
User
Beiträge: 12
Registriert: Samstag 2. August 2014, 18:32
Kontaktdaten:

Soweit ich das verstanden habe importiert Blender die Skripts einfach z.B. Hallo_Welt.py (bestehend aus print(„Hallo Welt“)). Wen man in einen Skript etwas bearbeiten will das mit Game-Engine zu tun hat importiert man die bge (Blender Game Engine) bzw GameLogic, ansonsten Skript man wie gehabt, was der Grund ist warum ich mich an euch wende.

Juuut wen ich hier falsch bin schwing ich meinen Alabaster Körper rüber in den Blender Game Forum.

Ich danke auf jeden Fall für die Hilfe ^^

ich komm wieder wen es was gibt was nicht mir Blender zu tun hat THX
BlackJack

@Koraktor: Vielleicht solltest auch ganz allgemein mal ein Tutorial zur Game Engine durcharbeiten um die Grundlagen zu lernen. Ich würde mal vermuten es verhält sich ähnlich wie GUI-Rahmenwerke wo man nicht selber die volle Kontrolle über den Programmfluss hat, sondern sich für bestimmte Ereignisse registriert und bei deren eintreten dann Rückruffunktionen ausgeführt werden. Es gibt zumindest ”Sensoren” die man 3D-Objekten zuweisen kann, und die beim erkennen von bestimmten Zuständen dann unter anderem auch Python-Code anstossen können.
Koraktor
User
Beiträge: 12
Registriert: Samstag 2. August 2014, 18:32
Kontaktdaten:

Jap habe ich bis zu einen gewissen Gard auch gemacht. Neben mir liegt das Buch „Python Kopf bis Fuß“ , hab mich mal durch den Kurs von codecademy gewühlt, schlage regelmäßig Sachen in der API nach und hab in Youtube/Google nach Tutorials gesucht. Das Problem besteht dabei das einige der genanten Quellen sich auf andere Programmiersprachen wie Java beziehen um sich „lästiges erklären von absoluten Basics“ zu ersparen. Nun stehe ich hier mit einen wissen das mehr löcher hat als ein Maschendrahtzaun.
Darum hab ich mir gedacht jetzt fragst du mal Leute die bestimmt mehr Ahnung haben und gust ob du was damit anfangen kannst.
BlackJack

@Koraktor: Also ich würde vorschlagen die Python-Grundlagen unabhängig von Blender zu lernen, und dann ein Blender-Game-Engine-Tutorial durchzuarbeiten. Für Python gibt es zum Beispiel ein Tutorial in der Python-Dokumentation.
Antworten