PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [rm2k] "Fleiß gewinnt, Eleganz entscheidet"



Daen vom Clan
07.12.2007, 10:21
Guten Morgen liebe Techniker,
das Problem das ich habe lässt sich im Titel nicht mal grob umreißen, deswegen sorry für den etwas ungenauen Titel ;)

Also folgendes:
Problem:
Eine Variable kann 80 Werte haben. Je nachdem welcher Wert von 1-80 vergeben wurde soll ein anderes Charset im 4-Animation-Turn dargestellt werden.


Meine Lösung bisher (Fleißlösung):
Ein Autostart-Event hat 80 ForkConditions und vergibt pro Fork je einen Switch.
Also:
Variable = 1 , dann Switch1 = on usw.

Dort wo das Charset erscheinen soll gibt es ein 8 Events die je 10 Registerseiten haben und dort wird der Switch abgefragt und dementsprechend das Charset in 4-Ani-Turn dargestellt.


Meine Frage nun: Gibt es dafür eine elegantere Lösung?

Nemica
07.12.2007, 10:40
Zumindest die 80 Forks kannst du dir ersparen, indem du einfach set mit
nem Zeiger arbeitest. Also \s[deine Variable].

Marian
07.12.2007, 12:57
ich gehe mal davon aus, dass die switches der charsets die switches 101-180 sind. dazu gibts diesen code, der eigentlich ganz einfach ist:

http://npshare.de/files/36/7174/Unbenannt.PNG

das ganze kann je nachdem, welchen wert die switch-variable hat, mit jeder beliebigen switchnummer gemacht werden. wenn deine switches beispielsweise jetzt auf den positionen 276-352 liegen, dann muss der wert der switch-variable eben 275 betragen.

das wäre eine variante die als code cool aussieht.
und ne ganz einfache variante wäre, ein charset zu nehmen, es auf 4-animation-turn zu setzen und dann ein event, das abfragt, welchen wert die variable von 1-80 hat und dann einfach 80 forks zu machen, wo dann bei jeder halt einfach move event -> change graphic ist.

das wäre alles, wenn ich dein problem richtig verstanden hab. :)

Daen vom Clan
07.12.2007, 13:29
Problem ist dabei das JEDER Wert von 1-80 ein anderes Charset hat.
Lässt sich das damit vereinbaren?

Marian
07.12.2007, 13:34
darauf waren beide varianten ausgelegt. ;)

übelster Held
07.12.2007, 16:13
warum fragst du die switches ab und nicht den wert der vari?oO

Greyce
07.12.2007, 17:40
warum fragst du die switches ab und nicht den wert der vari?oO
Das frage ich mich allerdings auch ^^
Ich glaube nicht, dass es da eine andere Lösung gibt, als fleißig die Animationen per Hand einzustellen.
Allerdings würde ich das ganze wie folgt aufbauen:



[Eventname] [Autostart] [Switch wenn CE ansonst nicht]
<> Comment: Hier kommt der Code wie du auf den Wert der Variable kommst.
<> Call Event [Animation] seite [Animation_Var]
<> Delete Event temporary(wenn CE Switch ausmachen)




[Animation] [Call/Pushkey] [Animation_Var=1] [Eventseite 1]


[Animation] [Call/Pushkey] [Animation_Var=2] [Eventseite 2]


[Animation] [Call/Pushkey] [Animation_Var=3] [Eventseite 3]


Erklärung des ganzen:
Das erste Event errechnet den Wert der Variable "Animation_Var".
Danach ruft dieses per Call Event ein anderes Event auf(die Seite wird durch die soeben errechnete Variable bestimmt). Dieses sollte
das event sein wo du deine ganzen Animationen einstellst.
Auf der ersten Seite kommt die Animation hin wie sie sein soll, wenn
die Variable auf dem Wert 1 steht. Dasselbe gilt für die restlichen 79 Seiten ^^
Aber mit dem Call Event Befehl rufst du automatisch die Seite auf die du brauchst.
Bsp: Wenn die Variable den Wert 55 hat, wird Seite 55 aufgerufen.
Natürlich musst du dass bei jeder Seite in den Startbedingungen einstellen.
So ersparst du dir wenigstens die Forks und kannst die Seiten auch noch kopieren(Animation und Startbedingung muss natürlich angepasst werden).

Ich bin jetzt davon ausgegangen, dass die Animation nur einmal abgespielt wird, also verzeih mir wenn ich dich falsch verstanden habe.

~Waradience~

Marian
07.12.2007, 18:03
uehy, auf die idee bin ich garnicht gekommen, ich hab mich von der sache mit den switches ablenken lassen.
das was waradience vorschlägt, ist besser als meins. yoyo. :)

edit:
arrrh nein, das was waradience macht ist garnicht sooo geil.
oh gott. ich stelle grade fest, dass hier sauübel voll heftige codes für eine der billigsten sachen überhaupt gemacht wurden. :D

du hast ein event, mit dem der wert der vairable festgelegt wird, denk ich mal.
dann mach doch den rest einfach so:

http://npshare.de/files/36/4114/lol.PNG

das ist fast das gleiche wie das von waradience, blos ohne das common event und das event aufrufen-zeugs.
wozu sollte das denn eigentlich gut sein? oO

Daen vom Clan
07.12.2007, 20:16
uehy, auf die idee bin ich garnicht gekommen, ich hab mich von der sache mit den switches ablenken lassen.
das was waradience vorschlägt, ist besser als meins. yoyo. :)

edit:
arrrh nein, das was waradience macht ist garnicht sooo geil.
oh gott. ich stelle grade fest, dass hier sauübel voll heftige codes für eine der billigsten sachen überhaupt gemacht wurden. :D

du hast ein event, mit dem der wert der vairable festgelegt wird, denk ich mal.
dann mach doch den rest einfach so:

http://npshare.de/files/36/4114/lol.PNG

das ist fast das gleiche wie das von waradience, blos ohne das common event und das event aufrufen-zeugs.
wozu sollte das denn eigentlich gut sein? oO


Marian - DAS was du geschrieben hast ist die einfachste Lösung, doch nun kommt die wichtigste Frage die über Wohl oder Wehe entscheidet und der Grund ist warum ich so umständlich arbeiten muss:

Bei den Eventconditions im 2000er-Maker kann ich zwar Variable anwählen, dann einen Wert eingeben.
Dahinter steht jedoch "above" und DAS ist die Frage: Ist das ein Übersetzungsfehler oder bedeutet "Event Condition Variable 80 "above" " wirklich das dieses Event und seine Seite NUR aufgerufen wird wenn der Variablenwert 80 ist?

In meinen Gedanken war "above" alles mit 80 und drüber.


wozu sollte das denn eigentlich gut sein? oO
Lass dich überraschen... hoffe ich ;)

Greyce
07.12.2007, 20:17
wozu sollte das denn eigentlich gut sein? oO
Naja, falls er mit seinem Hero das Event nicht direkt anspricht, wie soll
es dann starten?^^°
Aber ich habe es genau so gemeint wie es auf deinen screens zu sehen ist.
Außerdem muss es kein CE sein, hab ich auch geschrieben.

~Waradience~

EDIT @ Daen vom Clan:
Sprichst du das Event direkt mit deinem Hero an oder soll es anderwertig aufgerufen werden?
Und wie lange soll diese Pose zu sehen sein?

The Best Isaac
07.12.2007, 20:24
Bei den Eventconditions im 2000er-Maker kann ich zwar Variable anwählen, dann einen Wert eingeben.
Dahinter steht jedoch "above" und DAS ist die Frage: Ist das ein Übersetzungsfehler oder bedeutet "Event Condition Variable 80 "above" " wirklich das dieses Event und seine Seite NUR aufgerufen wird wenn der Variablenwert 80 ist?

Die eigentliche Bedingung dahinter ist nicht "Variable > Wert" sondern "Variable >= Wert". Sollte also eigentlich gehen, denke ich.

Daen vom Clan
07.12.2007, 20:43
Die eigentliche Bedingung dahinter ist nicht "Variable > Wert" sondern "Variable >= Wert". Sollte also eigentlich gehen, denke ich.

Nein, denn der Wert muss eindeutig sein.
Wenn ich 20 nehme, dann werden auch die Chars 1-19 angezeigt.

So scheint das also nicht zu klappen, bzw. ist es saudämlich das Variablen nicht mit "same" benutzt werden können innerhalb des Kriteriums des Event-Editors *seufz*

Also um es nochmal einfach zu skizzieren:

Eine Variable kann den Wert 0 - 80 enthalten.
Je nach Variable soll an einer immergleichen Stelle ein anderes Charset im 4-Ani-Turn angezeigt werden.

Eine Lösung ist oben präsent, gibt es eine weniger arbeitsintensive Lösung?

Greyce
07.12.2007, 21:06
Du wirst nicht drum herum kommen die Animationen per Hand einzustellen.
Der Maker hat keine Funktion mit der er grafiken nach variablen anzeigen kann,
also ist das afaik unmöglich.
Um meine Frage nochmal zu wiederholen:
Sprichst du das Event direkt mit deinem Hero an oder soll es anderwertig aufgerufen werden?
Wenn es nämlich gecallt wird brauchst du erst gar nicht auf jeder Eventseite
eine Startbedingung(also Vari above blabla..) festlegen.
Das wäre wichtig zu wissen.

Daen vom Clan
07.12.2007, 22:09
Also, während des Spiels errechnet sich der Wert der Variable aus diversen Gegebenheiten.
Dann kann der Held auf eine Karte kommen in dem in einem Autostart-Event normalerweise die Abrechung und Darstellung laufen soll, danach kommt ein "show screen" und das Ergebnis soll angezeigt werden, der Held bleibt dabei bewegungsunfähig.

Hilft dir das?

Greyce
07.12.2007, 23:12
Wie gesagt, dass Grafik einstellen auf den Event Seiten wird dir nicht erspart bleiben.
Jedoch ersparst du dir mit der folgenden Methode(die ich schon weiter oben erklärt habe), dass einstellen der Startbedingung(die Variable).

Das einzige was du tun musst ist ein Event zu erstellen, wo auf jeder Seite
die gewünschte Animation ist. Aber das wars auch schon wieder.

In deinem Autostart Event fügst du am Schluss des Codes den Befehl Call Event ein.
Du wählst nun "Event referenced by Variables" aus. Für die Erste Variable solltest
du eine neue Anlegen. Nenne sie zB. "Event_Nr".
Die zweite Variable wird die seihen, die zwischen 1 und 80 sein kann.
Du musst nur darauf achten, dass die Variable "Event_Nr" auf die ID des Animationsevents gesetzt ist.

So wird automatisch die Seite aufgerufen, auf die die Variable gesetzt ist und
man erspart sich die Startbedingung.

Zusammenfassend: Ohne Fleiß, kein Preis ^^

Falls du das nicht verstanden haben solltest, kann ich dir auch ein Script hochladen, nur könnte das ein paar Tage dauern(viel zu tun und so).

~Waradience~

Cherry
08.12.2007, 00:12
es gäbe schon noch eine fleißlose Möglichkeit, die ich dir aber wahrscheinlich nicht zumuten kann: die Grafiken durchnummerieren und mit dem Power Patch mit CopyFile die entsprechende Datei kopieren. Dann müsste man noch "Change Graphic" nehmen, damit der Maker die Datei neu ladet.
mfG Cherry

Pantoffelninja
08.12.2007, 00:37
Nein, denn der Wert muss eindeutig sein.
Wenn ich 20 nehme, dann werden auch die Chars 1-19 angezeigt.
*kopfschüttel*
Marians zweite Methode ist die einfachste mir bekannte Methode, da bei gleicher Bedingungserfüllung die höherwertigste Seite aufgerufen wird und die anderen Seiten ignoriert werden. (Bei den Seiten 1-16 [Also Wert der Variable=16] wäre das also Seite 16, die aktiv wird.)
Demzufolge würde es klappen. Und wenn du keinen Lust drauf hast, für jede Seite einen Code einzugeben (oder Copy & Paste zu betreiben, falls es immer der gleiche Code ist), einfach einen Common Event aktivieren und (außer bei Copy & Taste) Forks für die Variablen benutzen.

Daen vom Clan
08.12.2007, 00:53
*kopfschüttel*
Marians zweite Methode ist die einfachste mir bekannte Methode, da bei gleicher Bedingungserfüllung die höherwertigste Seite aufgerufen wird und die anderen Seiten ignoriert werden. (Bei den Seiten 1-16 [Also Wert der Variable=16] wäre das also Seite 16, die aktiv wird.)


Leider nicht.
Ich habe es angetestet, mach das mal bitte im 2000er nach.
Erstelle drei Events und stelle bei jedem Event das Anzeigekriterium auf Variablenwert 20, 21 und dann 22 und schiebe die Variable auf 22. Dann werden auch die Events von 20 und 21 angezeigt.


Nachtrag: Ich glaube ich habe eine Lösung gefunden. Ich schätze ich habe mich da oben geirrt, das scheint doch zu gehen! Ich teste das morgen mal aus.

The Best Isaac
08.12.2007, 00:59
Leider nicht.
Ich habe es angetestet, mach das mal bitte im 2000er nach.
Erstelle drei Events und stelle bei jedem Event das Anzeigekriterium auf Variablenwert 20, 21 und dann 22 und schiebe die Variable auf 22. Dann werden auch die Events von 20 und 21 angezeigt.

Hast du die Reihenfolge der Eventseiten beachtet? Der Maker geht bei der Darstellung der Seiten nämlich von rechts nach link. Das heißt, wenn ganz rechts die Seite mit der Bedingung für 20 ist, und es nach links hochgezählt wird, wird die "20er-Seite" angezeigt, da diese noch "vor" (für den Maker) den anderen Seiten liegt und die Bedingung erfüllt (>= 20). Also ich hab das eben mit dem Maker ausprobiert und es hat funktioniert.
Hier mein Testprojekt (http://eightyseven.ei.funpic.de/sonstiges/test.rar).

Edit: Zu spät. =/

übelster Held
08.12.2007, 12:22
wenn es nicht gänge, könnte man kaum zahlen per events anzeigen lassen..^.-

Beril
09.12.2007, 12:29
Wenn du mehrere Events hast, zB eins für den Fall das Var1=1-10 und noch eins für Var1=11-20, dann musst du nur bei Event 1 noch eine zusätzliche, (grafisch-)leere Seite mit Var1=11 machen.
Hoffe du verstehst wie ich das meine...

übelster Held
09.12.2007, 18:25
bei zuvielen eventseiten wirds aber kritisch.. weil für den maker jede eventseite wie ein event mit nur einer seite wewertet wird.. d.h.
wenige events mit massig seiten, brauchen genau so viel zeit zum laden der map und verfingern die geschwindigkeit, wie die gleiche anzahl an einseitigen events...

Daen vom Clan
09.12.2007, 21:52
Also, ich habe das Projekt für das die Frage Pate stand gestern abgeschlossen und es klappt bestens und sieht einfach nur genial aus!

Kameraden, ich danke euch von Herzen, gute Arbeit, ihr Techniker :)

Marian
09.12.2007, 22:56
wann erfährt man denn, wofür das ganze denn gebraucht wurde? :D

Daen vom Clan
10.12.2007, 00:00
wann erfährt man denn, wofür das ganze denn gebraucht wurde? :D

Öhm, auf jeden Fall für Sternenkind-Saga, ob wir allerdings so kurz vor dem Release der Demo noch ein paar Screens bringen müssen wir noch ausklamüsern :)