Ergebnis 1 bis 20 von 31

Thema: Event nur aktiv, wenn Held darauf steht?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Wenn ich es jetzt richtig verstanden habe:
    Erstelle das Event, auf das der Held laufen soll, und stelle ein das dort ein Pic angezeigt wird, und ein switch aktiviert wird. Als 2. Page machst du ein PP event das sich aktiviert wenn der switch an ist:



    Es wird also alle 0,1 sekunden geprüft ob der held noch die koordinaten hat, und wenn nicht wird das Bild gelöscht.

    Die beiden pages sind in einem event, und dieses kann einfach so kopiert werden.

  2. #2
    Wenn der Held vom Spieler gesteuert wird, dann kannst du auch folgendes machen:

    Held berührt Event -> Picture wird angezeigt. Dann wird über Key Input Proc gewartet, bis eine der Pfeiltasten aktiviert wird. Dann Picture wieder löschen.

    Sollen außer den Pfeiltasten noch weitere Tasten wirksam sein, aber nur auf die Pfeiltasten reagiert werden, dann musst du halt nach Key Input Proc noch ne Abfrage reinbauen und das ganze in ne Schleife packen. Ich hoffe, du verstehts, wie ichs mein.

  3. #3
    Kurz in den Raum gefragt, was passt an der Terrain ID-Lösung nicht? Spart massiv Code, ich mein, alles was es braucht ist:

    Var X = Hero X Coords
    Var Y = Hero Y Coords
    Set Terrain ID (X,Y,ID)
    fork (ID = 35) {show pic 1 blabla} else {erase pic 1}
    wait 0,0s

    Zitat Zitat von Leana Beitrag anzeigen
    Held berührt Event -> Picture wird angezeigt. Dann wird über Key Input Proc gewartet, bis eine der Pfeiltasten aktiviert wird. Dann Picture wieder löschen.
    Nett gemeint, aber wenn man eine Taste gedrückt hält, aktiviert sie ein "Wait Until Key Hit" nicht, sprich wenn man nicht kurz auf dem Feld stehenbleibt, funzt das nicht (dem Maker fehlt echt eine "Until Hero Moves"-Bedingung)

  4. #4
    Zitat Zitat von Dhan Beitrag anzeigen
    Kurz in den Raum gefragt, was passt an der Terrain ID-Lösung nicht?
    Ich denke mal, die ist nicht ideal, weil sowas ja meistens für eine Ortsnamenanzeige o.ä. genutzt wird, und dafür braucht man weit mehr als 1 Terrain ID. Und entsprechend viele verschiedene (für nichts anderes nutzbare) Tiles im Chipset. Und das zahlt sich nicht aus.

  5. #5
    @sushi: ich dachte, du wüsstest es? Na dann:
    Erst einmal "Variable [0001:HeldXPos] = Sprite Hero X Coordinate" setzen
    dann "Variable [0002:HeldYPos] = Sprite Hero Y Coordinate" setzen
    "Variable [0003:EventXPos] = Sprite Event001/This Event X Coordinate" setzen
    "Variable [0004:EventYPos] = Sprite Event001/This Event Y Coordinate" setzen
    Dann eine Bedingung "wenn Variable [HeldXPos] = Variable [EventXPos] dann
    wenn Variable [HeldYPos] = Variable [EventYPos] dann
    *Hier soll stehen, was eben passiert*
    bla
    bla
    *hier, am Ende, dann Waits*

  6. #6
    @Cherry: Dann kombiniert man das mit einen Below Hero On Hero Touch Event an der Stelle des Ortes, das ganz einfach noch eine Variable verändert - für jeden Ort eine Vari und der PP ändert sich dementsprechend in

    Var X = Hero X Coords
    Var Y = Hero Y Coords
    Set Terrain ID (X,Y,ID)
    fork (ID = 35) {
    __fork (Ortsvari = 1) {show pic 1 Dorf1.png }
    __fork (Ortsvari = 2) {show pic 1 Dorf2.png }
    ..
    } else {erase pic 1}
    wait 0,0s

    (bzw bei sehr vielen Orten PPP)

    edit: bei diesem Skript brauchts noch einen Switch, der vom Below-Hero-Ortsevent aktiviert wird und hinter erase pic 1 deaktiviert wird und Bedingung für die ganzen show pics ist - das Terrain-PP ist nämlich nen Tick schneller als das Below-Hero-Ortsevent


    Aber du hast mich da auf was Wichtiges gebracht:
    @Sushi: Was ist überhaupt der Kontext? Also was genau willst du dir bauen? Bei vielen Sachen hats Alternativideen oder sonstigen Krams für den man das Problem selbst kennen muss ^^

    Geändert von Dhan (02.09.2010 um 00:30 Uhr)

  7. #7
    Zitat Zitat von Dhan Beitrag anzeigen
    Aber du hast mich da auf was Wichtiges gebracht:
    @Sushi: Was ist überhaupt der Kontext? Also was genau willst du dir bauen? Bei vielen Sachen hats Alternativideen oder sonstigen Krams für den man das Problem selbst kennen muss ^^
    Also mein Problem ist: Ich möchte, dass ein Bild angezeigt wird wenn man vor einem Objekt steht. Beispielsweise man geht vor eine Kiste (ohne irgendwas zu drücken) und dann erscheint über der Kiste ein Bild mit "öffnen". Dieses Bild erscheint nur, wenn der Held: 1.direkt vor der Kiste auf dem Feld steht; 2. auch in die Richtung der Kiste schaut.

    Ich habe es so gesehen jetzt. Jedem Event wird 2 Variablen zugeordnet, einmal die X-Koordinate und eben die Y-Koordinate.



    Probleme treten dann auf, wenn ich mehrere solcher Events auf einer Map habe, da die Bildnummer gleich ist und das ein PP ist, sodass dann alle auf der Map aktiviert werden - zumindest das löschen des Picture, da der Held ja die Koordinaten nicht erfüllt, sondern auf einem anderen Feld steht.

    Was ich nun will, ist eine vereinfachte und kompakte Version davon. Also am besten eben ohne groß Variablen, denn wenn man sowas 4-5mal auf einer Map hat, bin ich ja pro Map bei mindestens 10Variablen, dass wär eine Mammutarbeit ohne Grenzen.
    Vielleicht doch mit der Terrain ID? Dann würde ich dich die Variablen umgehen?

  8. #8
    Bin mal so frei und zitiere mich selbst:
    Zitat Zitat von Leana Beitrag anzeigen
    Wenn der Held vom Spieler gesteuert wird, dann kannst du auch folgendes machen:

    Held berührt Event -> Picture wird angezeigt. Dann wird über Key Input Proc gewartet, bis eine der Pfeiltasten aktiviert wird. Dann Picture wieder löschen.

    Sollen außer den Pfeiltasten noch weitere Tasten wirksam sein, aber nur auf die Pfeiltasten reagiert werden, dann musst du halt nach Key Input Proc noch ne Abfrage reinbauen und das ganze in ne Schleife packen. Ich hoffe, du verstehts, wie ichs mein.
    Hier brauchst du nur eine Variable und könntest das Event beliebig oft kopieren, ohne etwas ändern zu müssen.

  9. #9
    Jo, in dem Fall gehts mit Leanas Lösung weil wenn man erstmal in richtiger Position ist nur ein Richtungswechsel vom Feld führt und der aktiviert den Enter Password auf jeden Fall, allerdings musses noch leicht erweitert werden damit man, wenn man gegen die Truhe drückt, das Bild noch sieht, mit einer einfachen Richtungsabfrage in das Enter Password geht das aber.

    Mit meiner Methode wärs auch leicht machbar, insbesondere weil das Feld unter der Truhe ja meist nicht sichtbar ist - du packst das einmalige Terrain unter die Truhe, speicherst ständig die Heldenkoords und erweiterst sie um einen Schritt in Blickrichtung.
    Der Vorteil dieser Methode wäre immer noch, dass du pro Karte lediglich ein Event brauchst, insbesondere wenn das Öffnen-Bild bei jeder Truhe gleich ist


    Auch eine sehr simple Lösung: ordne Events sternförmig um die Truhe wie hier:

    Die weißen Scherben machen einfach:
    Below Hero, On Hero Touch
    fork(Hero Face Dir Richtung Truhe) {show pic, switch bla ON}

    Die roten Scherben:
    Below Hero, On Hero Touch
    erase pic, switch bla OFF

    Und die Truhe:
    Seite 1: Same Level as Hero, On Hero Touch
    show pic, switch bla ON
    Seite 2: Same Level as Hero, Push Key, Bedingung switch bla
    (normaler Truheninhalt)

    ("Scherben" sind hier nur zur Übersicht, natürlich sind die Events unsichtbar)

    braucht viele Events aber keine einzige Variable und funktioniert garantiert problemfrei und die Events sind ja sehr schnell erstellt und sehr schnell kopiert
    würd ich dir sogar empfehlen - je einfacher der Code, desto besser und einfacher gehts wohl nicht

  10. #10
    Mir ist grad aufgefallen, dass beim 2k die "unerwünschten" Richtungstasten nicht deaktiviert werden können. Dann ist meine Lösung eigentlich viel zu umständlich. Dhans 2. Vorschlag ist aber so oder so besser

  11. #11


    Mach doch einfach ein PP dass die Heldenposition und Blickrichtung abfragt und dann eben schaut, ob die Position Anlass für'n Pic gibt.
    Du weißt ja auf welche Koordinaten du das jeweilige Event (Truhe, Kiste, bla) gepackt hast. Dann fragst du eben ab, ob die Koordinaten des Helden gleich der eines der umliegenden Felder ist und falls ja, wie die Blickrichtung ist.

    Ein bedeutender Mehraufwand ist das auch nicht, da du je nur, sobald du das Truhenevent platziert hast, ein paar neue Forks einbauen musst - was per Copy&Paste sogar sehr fix geht.
    Mit dieser Methode hättest du alles wichtige in einem Event - solltest aber zu große Maps vermeiden, da ich mir gerade nicht sicher bin, wie sich das auf die Performance auswirkt wenn man da zu viele Abfragen reinpackt.

    Alternative Idee wäre, du fragst ab, ob auf einemd er vier an den Helden angrenzenden Feldern ein Event liegt - wenn ja, setzt du ne Variable, die auf dieser Map für's Bilder anzeigen gut ist, auf die jeweilige Event-ID. (bspw.) Wenn da nichts ist, isse eben 0.
    N anderes Event hat als Startevent dass die Variable größer 0 ist - und zeigt das Bild an, je nach dem Wert der Variable eben.

    EDIT:
    Hier mal als Script.

    Man kann einen NPC ansprechen, eine Truhe öffnen, auf nen Schalter treten und ein Schild lesen.
    Man braucht eigtl. nur Copy&Paste wenn man was neues einbauen will, man muss nur bei der Abfrage die Event-ID angleichen - also am besten dem Event erst nen Namen geben, nachdem du dir die ID gemerkt hast. Bei Ttuhen musst außerdem noch für jede Truhe nen Switch angleichen, damit bei ner geöffneten Truhe nicht auch "Öffnen" erscheint - eben den, den du auch bei Truhe verwendet hast.
    Die Methode hat vor allem den Vorteil, dass du zum einen bei den Events selbst nichts außer der ID beachten musst und dass du sie auch für bewegliche Events wie eben NPCs nutzen kannst. Bei Dhans Methode würde es schon sehr kompliziert, da weder die Terrain-ID noch extra-Events die drumrum platziert werden da komfortabel wären.

    Ich bin mir zwar gerade nicht sicher ob das genau das ist,w as du wolltest, aber auch okay. Es ist... multifunktiuonal. xD

    Hier mal der Code aus dem Script zur Veranschaulichung.

    Hier der 1. PP:
    Zitat Zitat von EasyEventExporter
    - SCRIPT -
    <> Change Variable: [1] = X position on map (tiles) of hero
    <> Change Variable: [2] = Y position on map (tiles) of hero
    <> Get Event ID: (V[1], V[2]), Store in var. [3]
    <> Fork Condition: If Variable [3] == 0 then ...
    . <> Fork Condition: If Hero is facing up then ...
    . . <> Change Variable: [2] -= 1
    . . <>
    . : Else ...
    . . <> Fork Condition: If Hero is facing right then ...
    . . . <> Change Variable: [1] += 1
    . . . <>
    . . : Else ...
    . . . <> Fork Condition: If Hero is facing down then ...
    . . . . <> Change Variable: [2] += 1
    . . . . <>
    . . . : Else ...
    . . . . <> Fork Condition: If Hero is facing left then ...
    . . . . . <> Change Variable: [1] -= 1
    . . . . . <>
    . . . . : End of fork
    . . . . <>
    . . . : End of fork
    . . . <>
    . . : End of fork
    . . <>
    . : End of fork
    . <> Get Event ID: (V[1], V[2]), Store in var. [3]
    . <> Wait: 0,0 sec.
    . <>
    : End of fork

    Und der 2.PP:
    Zitat Zitat von EasyEventExporter
    - SCRIPT -
    <> Fork Condition: If Variable [3] == 0 then ...
    . <> Fork Condition: If Variable [4] != V[3] then ...
    . . <> Change Variable: [4] = V[3]
    . . <> Move Picture: #1, (29, 228), Mgn 100%, Tsp 100%, 0,3 sec., Wait
    . . <> Erase Picture: #1
    . . <>
    . : End of fork
    . <>
    : End of fork
    <> Comment: --------------------------------------------------------------------------------------------------------------------
    <> Comment: NPCs
    <> Comment: --------------------------------------------------------------------------------------------------------------------
    <> Fork Condition: If Variable [3] == 6 then ...
    . <> Fork Condition: If Variable [4] != V[3] then ...
    . . <> Change Variable: [4] = V[3]
    . . <> Show Picture: #1, Lesen, (29, 228), Mgn 100%, Tsp 100%
    . . <> Move Picture: #1, (29, 228), Mgn 100%, Tsp 0%, 0,3 sec.
    . . <>
    . : End of fork
    . <>
    : End of fork
    <> Comment: --------------------------------------------------------------------------------------------------------------------
    <> Comment: SCHILDER
    <> Comment: --------------------------------------------------------------------------------------------------------------------
    <> Fork Condition: If Variable [3] == 3 then ...
    . <> Fork Condition: If Variable [4] != V[3] then ...
    . . <> Change Variable: [4] = V[3]
    . . <> Show Picture: #1, Reden, (29, 228), Mgn 100%, Tsp 100%
    . . <> Move Picture: #1, (29, 228), Mgn 100%, Tsp 0%, 0,3 sec.
    . . <>
    . : End of fork
    . <>
    : End of fork
    <> Comment: --------------------------------------------------------------------------------------------------------------------
    <> Comment: TRUHEN
    <> Comment: --------------------------------------------------------------------------------------------------------------------
    <> Fork Condition: If Variable [3] == 4 then ...
    . <> Fork Condition: If Switch [1] == OFF then ...
    . . <> Fork Condition: If Variable [4] != V[3] then ...
    . . . <> Change Variable: [4] = V[3]
    . . . <> Show Picture: #1, Oeffnen, (29, 228), Mgn 100%, Tsp 100%
    . . . <> Move Picture: #1, (29, 228), Mgn 100%, Tsp 0%, 0,3 sec.
    . . . <>
    . . : End of fork
    . . <>
    . : Else ...
    . . <> Change Variable: [4] = V[3]
    . . <> Move Picture: #1, (29, 228), Mgn 100%, Tsp 100%, 0,3 sec., Wait
    . . <> Erase Picture: #1
    . . <>
    . : End of fork
    . <>
    : End of fork
    <> Wait: 0,0 sec.
    <> Comment: --------------------------------------------------------------------------------------------------------------------
    <> Comment: SCHALTER
    <> Comment: --------------------------------------------------------------------------------------------------------------------
    <> Change Variable: [1] = X position on map (tiles) of hero
    <> Change Variable: [2] = Y position on map (tiles) of hero
    <> Get Event ID: (V[1], V[2]), Store in var. [3]
    <> Fork Condition: If Variable [3] == 5 then ...
    . <> Fork Condition: If Switch [2] == OFF then ...
    . . <> Fork Condition: If Variable [4] != V[3] then ...
    . . . <> Change Variable: [4] = V[3]
    . . . <> Show Picture: #1, Druecken, (29, 228), Mgn 100%, Tsp 100%
    . . . <> Move Picture: #1, (29, 228), Mgn 100%, Tsp 0%, 0,3 sec.
    . . . <>
    . . : End of fork
    . . <>
    . : Else ...
    . . <> Change Variable: [4] = V[3]
    . . <> Move Picture: #1, (29, 228), Mgn 100%, Tsp 100%, 0,3 sec., Wait
    . . <> Erase Picture: #1
    . . <>
    . : End of fork
    . <>
    : End of fork
    <> Wait: 0,0 sec.
    Auf der Map, auf die sich das Bezieht, hat mein NPC eben die Event-ID 6, die Truhe 4, der Schalter 5 und das Schild die ID 3.
    Die beiden Switches Truhe1 und Schalter1 sind eben die üblichen Switches die in Truhen- und Schalter-Events verwendetw erden um dem Maker zu sagen dass das Teil aktiviert/geöffnet wurde.

    Ich muss aber gestehen ich bin mir nicht sicher wie's bei dem Teil mit der Performance bei größeren Maps mit vielen Events aussieht, aber ich denke es sollte nicht zu Problemen kommen...
    Achja, und: Wenn man auf nem Event steht, das direkt unter einem liegt, hat das immer Vorrang. Da ist noch n kleiner Bug drin - der Schalter wurde aktiviert, also zeigt der Maker das "drücken" Bild nicht an - aber auch kein anderes, da er NUR den SChalter gerade abfragt, auch wenn man vor etwa nem Schild steht.
    Ich weiß gerade nicht wie ich das lösen könnte. =/
    Mit einigen extra-Abfragen, klar, aber das würde das ganze wieder für meinen Geschmack zu umständlich machen.
    Da wäre es vermutlich am besten, fürs Erste so zu mappen, dass die Situation nicht auftritt...

    EDIT2:
    Wozu genau brauchst das jetzt eigtl. wenn man AUF einem Event steht? Schalter bspw. aktivieren sich ja meist schon durch berührung. Bei Truhen, etc. gehts ja darum,d ass der Held DAVOR steht.
    Wenn du's nur für Teleporter etc. brauchst ist der Bug egal, nur eben bei nur einmalig benutzbaren Sachen isses was komplizert... Hast du viele Events die unter diese Kategorie fallen?

    Geändert von BDraw (04.09.2010 um 15:46 Uhr)

  12. #12
    Hier mal eine Lösung für: Ich steh auf dem Event und es zeigt ein Bild. Dann geh ich runter und das Bild ist weg.
    Obendrein:
    1. nur 4 Variablen
    2. kopierbar -> mehrere pro Map


    Geändert von Felski (13.09.2010 um 00:20 Uhr)

  13. #13
    Hat auf den ersten Blick 3 große Probleme.
    1. - Man kann eben nicht mehrere auf eine Map packen, da dann alle auf dieselbene Variablen zugreifen und sich in die Quere kommen würden. Man müsste bei jedem dann die Variablen austauschen.
    2. - Bei deinem Truhenbeispiel: Ich stehe vor ner Truhe, drücke nach "oben" - bewege mich aber nicht, weil ja die Truhe davor steht. Trotzdem verschwindet dann das Bild,w eil die Taste abgefragt wird anstatt der Bewegung.
    3. - Wenn der Held weit oben auf der Map steht kann es passieren, dass das Picture außerhalb der Map angezeigt wird.

    Mag aber sein, dass ich da auch nur wo aufm Schlauch stehe, da du ja gerade sagtest, es sei kopierbar....

    Geändert von BDraw (13.09.2010 um 10:04 Uhr)

  14. #14
    Ich habs nicht getestet aber es könnte sein, dass der Maker die Rechenzeiten derart langsam verteilt, dass die PPs tatsächlich jeweils sequentiell durchgeführt werden - dennoch, der Maker beherrscht keine synchronized-Funktion für Threads, daher bleibt das unsauber auch wenns praktisch klappen kann.


    Was mich wundert, ist, dass du (BDraw) fragst, wozu Sushi es braucht... das hat er doch geschrieben.
    Zitat Zitat von Sushi
    Ich möchte, dass ein Bild angezeigt wird wenn man vor einem Objekt steht. Beispielsweise man geht vor eine Kiste (ohne irgendwas zu drücken) und dann erscheint über der Kiste ein Bild mit "öffnen". Dieses Bild erscheint nur, wenn der Held: 1.direkt vor der Kiste auf dem Feld steht; 2. auch in die Richtung der Kiste schaut.

  15. #15
    Jop, aber mich hatte gewundert, dass er erst fragte wie man es macht, dass ein Pic angezeigt wird wenn man AUF nem Event steht, und dann plötzlich VOR nem Event (eben bspw. ner Truhe).
    Ich weiß jetzt nicht ob er's nur für Events benutzen will, die vor dem Helden stehen (dann wäre der Ganze Quark der ausgelöst wird, wenn der Held vor UND auf was steht eh erledigt), oder für beides, oder auch für NPCs - die sich ja bewegen, wodurch eben das Platzieren von Events drumrum hinfällig wäre.
    Dazu kommt, dass man bei Schaltern berücksichtigen muss, dass die meist nur einmal benutzt werden können, was man auch wieder extra berücksichtigen muss.

    War mir zumindest jetzt nicht ganz ersichtlich, daher bin ich mal von allem ausgegangen.
    Wenn er's für was ganz spezielles braucht kann man das Script eben auch dadrauf zuschneiden; bei allgemeinem Gebrauch dagegen muss man zusehen, dass das Script nicht in Fall xy rumzickt und möglichst vielfältig einsetzbar ist, ohne dass an's ständig anpassen muss.

    Geändert von BDraw (13.09.2010 um 10:05 Uhr)

  16. #16
    es ist kopierbar, weil zwei dieser events nicht aufeinander liegen!
    es ist also zeit zwischen zwei events
    das sie dann dieselbe variable benutzen ist dann kein problem

    Edit:
    habs eben mal mit 2 Events dieser Art getestet die nebeneinander liegen. Das geht nicht.
    Aber solange du zwei dieser Events nicht nebeneinander setzts geht es einwandfrei.
    Edit2:
    Bei mir ists nur ein Event auf One Hero Touch.
    Wenn man davon runter geht ist das Bild auch schon wieder weg. Also sind alle Variablen wieder frei.

    Geändert von Felski (13.09.2010 um 15:53 Uhr)

Berechtigungen

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