Ankündigung

Einklappen
Keine Ankündigung bisher.

flexibel Property bei Kollision übergeben/übertragen

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • GE-Python flexibel Property bei Kollision übergeben/übertragen

    Hallo alle zusammen,...
    mal wieder eine ziemlich einfache, dumme Anfängerfrage von mir.

    Wie mache ich das Scripte richtig?
    Ich möchte das wen ein Objekt mit einem andren Kollidiert, das objekt A, die Variable Prop Y, an das Objekt B, an die Prop X überträgt, bzw. addiert/Abzieht,. etc.
    Da das total unpraktisch ist, bei einer Kollision einen, im Objekt B festgelegten wert zu nutzen, möchte ich ein Script, um den wert in Objekt A, nur einmal ändern zu müssen und ihn so auch einfach während des Spiels, unproblematisch ändern zu können,...
    Lange rede, kurzer sinn:
    Ich möchte ein Script, das eine nachricht an das Objekt schickt, mit dem es Kollidiert und es mir ermöglicht, über die Logig Brics, eine Prop zuzuweisen, zu adieren, etc.

    Gruß Kia

    ps. kann ich das gleiche Script für mehrere Objekte verwenden oder muss ich es für verschiedene Objekte kopieren und umbenennen?
    Schließlich möchte ich ja, genau das gleiche, bei mehreren Objekten nutzen, oder kommt das da durcheinander, an wen es da die nachricht schicken muss,...
    notfalls kann man ja das Script kopieren und entsprechend ändern,... immer noch leichter, als alles über Logic brigs zu machen.

    Vielen Dank im Voraus, für eure Mühen.

  • #2
    Code:
    import bge
    
    controller = bge.logic.getCurrentController()
    
    # "wen ein Objekt mit einem andren Kollidiert"
    if all(sensor.positive for sensor in controller.sensors):
    
        objectA = controller.owner
    
        detector = controller.sensors[0] # Annahme: Der erste Sensor misst die Kollision
        objectB = detector.hitObject
    
        # "das objekt A, die Variable Prop Y, an das Objekt B, an die Prop X überträgt"
        objectB["X"] = objectA["Y"]
        # "bzw. addiert/Abzieht"
        #objectB["X"] += objectA["Y"]
        #objectB["X"] -= objectA["Y"]
    Dieses Script macht was Du beschrieben hast unter der Annahme:
    - Object A misst die Kollision
    - Der erste Sensor am python controller misst die Kollision
    - Es gibt nur Kollisionen mit Objekten die Property X haben (das kannst Du Durch setzten des Filters am CollisionSensor erreichen).

    Unter diesen Annahmen kannst Du das auch mit anderen Objekten verwenden. Aber: die Property-Namen sind hard-codiert.

    Du könntest beispielsweise das Zielproperty aus dem Filter des Sensors nehmen:
    Code:
    objectB[detector.propName] = objectA["Y"]
    Für das Quellproperty gibt es mehrere Varianten:

    Ein fest definiertes Property mit dem Namen des Properties:

    Code:
    sourceProperty = objectA["propertyToCopy"]
    ... = objectA[sourceProperty]
    (Das Property "propertyToCopy" sollte dann ein String mit dem Wert "Y" sein)


    Das Property aus einem Actuator herauslesen (damit vermeidest Du Tippfehler):

    Code:
    sourceProperty = controller.actuators[0].propName
    ... = objectA[sourceProperty]
    Dann hängst Du einen Property Actuator an den python controller. Der wird dann nicht aktiviert, aber Du kannst das Property für den Controller auswählen.

    Kommentar


    • Kia
      Kia kommentierte
      Kommentar bearbeiten
      Dankeschön!!!
Lädt...
X