Ergebnis 1 bis 7 von 7

Thema: Per Event Touch (mit Koordinaten) einen Switch an & aus switchen

  1. #1

    Per Event Touch (mit Koordinaten) einen Switch an & aus switchen

    Das ist eine Gegner-Event-Eventpage als PP:
    Code:
    @> Control Variables: [0274:pos NELU X] = Player's X Coordinate
    @> Control Variables: [0275:pos NELU Y] = Player's Y Coordinate
    @> Get Event ID: [0279:enemy location], Variable [0277][0278]
    @> Conditional Branch: Variable [0274:pos NELU X] == Variable [0279:enemy location]
      @> Conditional Branch: Variable [0275:pos NELU Y] == Variable [0279:enemy location]
        @> Wait: 0.0 seconds
        @> Control Switches: [0495:h dmg water] = ON
        @>
       : Else
        @>
       : Branch End
      @>
     : Else
      @> Control Switches: [0495:h dmg water] = OFF
      @>
     : Branch End
    @> Wait: 0.0 seconds
    Man soll also den Gegner berühren & dann soll der Switch 'h dmg water' auf an gestellt & wieder ausgestellt werden wenn man den Gegner nicht mehr berührt...
    Funktioniert das so. Es wirkt bisweilen so, als würde es funktionieren, aber könnt ihr mir sagen, ob das nicht zu Komplikationen mit anderen Gegner-Events führen kann?

    Danke euch, Leute, für eure nette, schnelle, kompetente Hilfe immer. :>

  2. #2
    Gibt es bei dem Maker, den du verwendest, kein "Event Touch"? Wäre eine alternative, anstelle eines PP.

    Auf den ersten Blick sieht es für mich so aus:
    Bleibt das Monster nach einer Berührung auf der gleichen Y-Koordinate, wird der Switch nicht ausgestellt, nur sobald sich die X-Koordinate ändert. Somit bleibt der Switch auch dann an, wenn das Monster 10 Felder unter/über dem Spieler ist.

  3. #3
    Okay, habe jetzt einen Event-Touch-Befehl draus gemacht & eine Abweichung von 1 Tiles der Koordinaten des Spielers zum Gegner eingefügt.
    Weil wegender Gegner ist Same Layer As Character. XD

    Ist das so koreckt:
    Code:
    @> Control Variables: [0274:pos NELU X] = Player's X Coordinate
    @> Control Variables: [0275:pos NELU Y] = Player's Y Coordinate
    @> Get Event ID: [0279:enemy location], Variable [0277][0278]
    @> Conditional Branch: Variable [0274:pos NELU X] == Variable [0277:enemy x]
      @> Conditional Branch: Variable [0275:pos NELU Y] == Variable [0278:enemy y]
        @> Conditional Branch: Variable [0277:enemy x] == 1
          @> Conditional Branch: Variable [0278:enemy y] == 1
            @> Wait: 0.0 seconds
            @> Control Switches: [0495:h dmg water] = ON
            @>
           : Else
            @>
           : Branch End
          @>
         : Else
          @> Wait: 0.0 seconds
          @>
         : Branch End
        @>
       : Else
        @>
       : Branch End
      @>
     : Else
      @> Wait: 0.0 seconds
      @> Control Switches: [0495:h dmg water] = OFF
      @>
     : Branch End
    @> Wait: 0.0 seconds
    Scheint zu funktionieren, aber ich scheue mich noch davor das jetzt wieder in jedes einzelne Gegner-Event einzupflegen.

    *:

  4. #4
    Ehrlich gesagt check ich nicht so ganz, was du da abfragst.
    Du fragst ja jeweils ab, ob enemy x u. y == 1. Das würde dann ja nur funktionieren, wenn der enemy auf dem Tile mit den Koordinaten (1;1) steht.
    Und natürlich ist es relevant, ob das Event same level ist. ^^ Ansonsten hätte es ja vorher auch nicht funktionieren können.

    Nach dem, wie mir Corti das beigebracht hat, geht das so:
    1. Speichere die Hero-Koordinaten in 2 Variablen

    2. Speichere die Event-Koordinaten des betreffenden Events in 2 Koordinaten, also:
    Code:
    @> Control Variables: [1317:event X/Y] = [EV0115]'s X/Y Coordinate
    3. Subtrahiere die Eventposition von der Heroposition, also:
    Code:
    @> Control Variables: [1319:Hero X] -= Variable [event X]
    @> Control Variables: [1320: Y] -= Variable [event Y]
    4. Multipliziere beide Variablen mit -1, falls sie unter 0 sind.

    5. Abfrage:
    Code:
    @> Conditional Branch: Variable [1319:Hero  X] < 2
      @> Conditional Branch: Variable [1320:Hero  Y] < 2
        @> Control Switches: [1326:switch] = ON
        @>
       : Else
        @> Control Switches: [1326:switch] = OFF
        @>
       : Branch End
      @>
     : Else
      @> Control Switches: [1326:swtich] = OFF
      @>
     : Branch End
    So fragst du den bereich rund um das Event ab. Problem könnte dabei werden, dass auch ein diagonal versetztes Feld dazu gehört, dann musst du vermutlich die Abfrage anders gestalten.

  5. #5
    Statt der Abfrage in Schritt 5 geht auch alternativ, wenn es darum geht maximal ein Tile (ohne Diagonal) Abstand zu haben:

    Code:
    @> Control Variables: [1319:Hero X] += Variable [1320]
    @> Conditional Branch: Variable [1319:Hero  X] = 1
        @> Control Switches: [1326:switch] = ON
        @>
       : Else
        @> Control Switches: [1326:switch] = OFF
        @>
    : Branch End
    siehe auch Manhattan-Metrik

  6. #6
    Danke euch beiden.

    Scheint zu funktionieren.
    Is der Code jetzt sooooooo
    Code:
    @> Wait: 0.0 seconds
    @> Control Variables: [0274:pos NELU X] = Player's X Coordinate
    @> Control Variables: [0275:pos NELU Y] = Player's Y Coordinate
    @> Control Variables: [0277:enemy x] = This Event's X Coordinate
    @> Control Variables: [0278:enemy y] = This Event's Y Coordinate
    @> Control Variables: [0274:pos NELU X] -= This Event's X Coordinate
    @> Control Variables: [0275:pos NELU Y] -= This Event's Y Coordinate
    @> Conditional Branch: Variable [0274:pos NELU X] < 0
      @> Conditional Branch: Variable [0275:pos NELU Y] < 0
        @> Control Variables: [0275:pos NELU Y] *= -1 
        @> Control Variables: [0274:pos NELU X] *= -1 
        @>
       : Else
        @>
       : Branch End
      @>
     : Else
      @>
     : Branch End
    @> Wait: 0.0 seconds
    @> Conditional Branch: Variable [0274:pos NELU X] < 2
      @> Conditional Branch: Variable [0275:pos NELU Y] < 2
        @> Control Switches: [0495:h dmg water] = ON
        @>
       : Else
        @> Control Switches: [0495:h dmg water] = OFF
        @>
       : Branch End
      @>
     : Else
      @> Control Switches: [0495:h dmg water] = OFF
      @>
     : Branch End
    @> Wait: 0.0 seconds
    richtig?

    Ich frage so dämlich, weil ich das ganze nicht eine milliarde mal kopieren will, nur um dann fest zu stellen, dass alles umsonst war. XD

  7. #7
    Tipp: Lass die leeren ELSE CASEs weg, wenn du sie nicht nutzt. Die machen den Code nicht nur unnötig lang, sonder, kosten noch dazu Performance, da der Maker jede Zeile einzeln durchgeht, egal ob was drin steht oder nicht.

    Ein Problem kann (wird) es aber noch geben: Da alle Gegner vermutlich den selben Switch für den Wasserschaden verwenden, wird jeder Gegner, in dessen Umkreis der Spieler nicht steht, den Switch ausstellen - völlig egal, ob der Spieler in einer vorherigen Abfrage eines anderen Gegner, in dessen Umkreis er tatsächlich steht, den Switch gerade erst eingeschaltet hat. Daher habe ich das ausstellen hier rausgenommen. Deswegen bräuchtest du streng genommen für jedes Event einen eigenen "dmg water"-Switch, das müsstest du also jedes Mal individuell anpassen.

    Davion ab hier eine etwas gekürzte Version deines Codes:

    Code:
    @> Wait: 0.0 seconds
    @> Control Variables: [0274:pos NELU X] = Player's X Coordinate
    @> Control Variables: [0275:pos NELU Y] = Player's Y Coordinate
    @> Control Variables: [0274:pos NELU X] -= This Event's X Coordinate
    @> Control Variables: [0275:pos NELU Y] -= This Event's Y Coordinate
    
    @> Conditional Branch: Variable [0274:pos NELU X] < 0
        @> Control Variables: [0275:pos NELU Y] *= -1
    : Branch End
    
    @> Conditional Branch: Variable [0275:pos NELU Y] < 0
       @> Control Variables: [0274:pos NELU X] *= -1 
    : Branch End
    
    @> Control Switches: [0495:h dmg water] = OFF
    @> Conditional Branch: Variable [0274:pos NELU X] < 2
      @> Conditional Branch: Variable [0275:pos NELU Y] < 2
        @> Control Switches: [0495:h dmg water] = ON
      : Branch End
    : Branch End
    
    @> Control Variables: [????:Gegner-Counter] += 1
    ...das mit den Switches könnte man umgehen, indem man die Gegner-Koordinaten alle geordnet in einem Event abfragt, da muss man dann allerdings die Gegner einzeln auswählen anstatt das über "this Event" zu regeln.

    Geändert von BDraw (11.05.2018 um 15:44 Uhr)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •