PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Falscher Menüpunk trotz richtiger werte...



Multi-Master1988
09.10.2010, 22:06
Ha ich hab momentan ein kleineres Problem bei einem Auswahlmenü und zwar soll von dem unterem rechtem Kasten wieder zum oberen linken kasten gesprungen werden der Wert wird zwar auf auf 1 gesetzt aber der Corsur wird dann beim zweiten Menüpunkt hingesetzt allerdings muss ich dann auch 2mal eine pfeiltaste betätigen nur ich finde meine fehler im Code nicht hier mal bildlich und auch der Steuerungscode:

http://www.npshare.de/files/63ade9e3/Neu%20Bitmap.PNG



- SCRIPT -
<> Comment: ------------------------------------------------------------------------------------------------------------------------
<> Allow/Forbid Main Menu: Forbid
<> Comment: ------------------------------------------------------------------------------------------------------------------------
<> Show Picture: #19, Memory Rückseite, (40, 40), Mgn 100%, Tsp 0%, No trans. color
<> Show Picture: #18, Memory Rückseite, (104, 40), Mgn 100%, Tsp 0%, No trans. color
<> Show Picture: #17, Memory Rückseite, (168, 40), Mgn 100%, Tsp 0%, No trans. color
<> Show Picture: #16, Memory Rückseite, (232, 40), Mgn 100%, Tsp 0%, No trans. color
<> Comment: ------------------------------------------------------------------------------------------------------------------------
<> Show Picture: #15, Memory Rückseite, (88, 104), Mgn 100%, Tsp 0%, No trans. color
<> Show Picture: #14, Memory Rückseite, (152, 104), Mgn 100%, Tsp 0%, No trans. color
<> Show Picture: #13, Memory Rückseite, (216, 104), Mgn 100%, Tsp 0%, No trans. color
<> Show Picture: #12, Memory Rückseite, (280, 104), Mgn 100%, Tsp 0%, No trans. color
<> Comment: ------------------------------------------------------------------------------------------------------------------------
<> Key Input Processing: Var. [5], Wait until key pressed, Keys: Directional keys
<> Comment: ------------------------------------------------------------------------------------------------------------------------
<> Fork Condition: If Variable [5] == 3 then ...
. <> Change Variable: [10] += 1
. <> Fork Condition: If Variable [10] == 1 then ...
. . <> Show Picture: #20, Memory Corsur, (40, 40), Mgn 100%, Tsp 0%
. . <>
. : Else ...
. . <> Fork Condition: If Variable [10] == 2 then ...
. . . <> Show Picture: #20, Memory Corsur, (104, 40), Mgn 100%, Tsp 0%
. . . <>
. . : Else ...
. . . <> Fork Condition: If Variable [10] == 3 then ...
. . . . <> Show Picture: #20, Memory Corsur, (168, 40), Mgn 100%, Tsp 0%
. . . . <>
. . . : Else ...
. . . . <> Fork Condition: If Variable [10] == 4 then ...
. . . . . <> Show Picture: #20, Memory Corsur, (232, 40), Mgn 100%, Tsp 0%
. . . . . <>
. . . . : Else ...
. . . . . <> Fork Condition: If Variable [10] == 5 then ...
. . . . . . <> Show Picture: #20, Memory Corsur, (88, 104), Mgn 100%, Tsp 0%
. . . . . . <>
. . . . . : Else ...
. . . . . . <> Fork Condition: If Variable [10] == 6 then ...
. . . . . . . <> Show Picture: #20, Memory Corsur, (152, 104), Mgn 100%, Tsp 0%
. . . . . . . <>
. . . . . . : Else ...
. . . . . . . <> Fork Condition: If Variable [10] == 7 then ...
. . . . . . . . <> Show Picture: #20, Memory Corsur, (216, 104), Mgn 100%, Tsp 0%
. . . . . . . . <>
. . . . . . . : Else ...
. . . . . . . . <> Fork Condition: If Variable [10] == 8 then ...
. . . . . . . . . <> Show Picture: #20, Memory Corsur, (280, 104), Mgn 100%, Tsp 0%
. . . . . . . . . <>
. . . . . . . . : Else ...
. . . . . . . . . <> Fork Condition: If Variable [10] < 1 then ...
. . . . . . . . . . <> Change Variable: [10] = 8
. . . . . . . . . . <>
. . . . . . . . . : Else ...
. . . . . . . . . . <> Fork Condition: If Variable [10] > 8 then ...
. . . . . . . . . . . <> Change Variable: [10] = 1
. . . . . . . . . . . <>
. . . . . . . . . . : End of fork
. . . . . . . . . . <>
. . . . . . . . . : End of fork
. . . . . . . . . <>
. . . . . . . . : End of fork
. . . . . . . . <>
. . . . . . . : End of fork
. . . . . . . <>
. . . . . . : End of fork
. . . . . . <>
. . . . . : End of fork
. . . . . <>
. . . . : End of fork
. . . . <>
. . . : End of fork
. . . <>
. . : End of fork
. . <>
. : End of fork
. <>
: Else ...
. <> Fork Condition: If Variable [5] == 2 then ...
. . <> Change Variable: [10] -= 1
. . <> Fork Condition: If Variable [10] == 1 then ...
. . . <> Show Picture: #20, Memory Corsur, (40, 40), Mgn 100%, Tsp 0%
. . . <>
. . : Else ...
. . . <> Fork Condition: If Variable [10] == 2 then ...
. . . . <> Show Picture: #20, Memory Corsur, (104, 40), Mgn 100%, Tsp 0%
. . . . <>
. . . : Else ...
. . . . <> Fork Condition: If Variable [10] == 3 then ...
. . . . . <> Show Picture: #20, Memory Corsur, (168, 40), Mgn 100%, Tsp 0%
. . . . . <>
. . . . : Else ...
. . . . . <> Fork Condition: If Variable [10] == 4 then ...
. . . . . . <> Show Picture: #20, Memory Corsur, (232, 40), Mgn 100%, Tsp 0%
. . . . . . <>
. . . . . : Else ...
. . . . . . <> Fork Condition: If Variable [10] == 5 then ...
. . . . . . . <> Show Picture: #20, Memory Corsur, (88, 104), Mgn 100%, Tsp 0%
. . . . . . . <>
. . . . . . : Else ...
. . . . . . . <> Fork Condition: If Variable [10] == 6 then ...
. . . . . . . . <> Show Picture: #20, Memory Corsur, (152, 104), Mgn 100%, Tsp 0%
. . . . . . . . <>
. . . . . . . : Else ...
. . . . . . . . <> Fork Condition: If Variable [10] == 7 then ...
. . . . . . . . . <> Show Picture: #20, Memory Corsur, (216, 104), Mgn 100%, Tsp 0%
. . . . . . . . . <>
. . . . . . . . : Else ...
. . . . . . . . . <> Fork Condition: If Variable [10] == 8 then ...
. . . . . . . . . . <> Show Picture: #20, Memory Corsur, (280, 104), Mgn 100%, Tsp 0%
. . . . . . . . . . <>
. . . . . . . . . : Else ...
. . . . . . . . . . <> Fork Condition: If Variable [10] < 1 then ...
. . . . . . . . . . . <> Change Variable: [10] = 8
. . . . . . . . . . . <>
. . . . . . . . . . : Else ...
. . . . . . . . . . . <> Fork Condition: If Variable [10] > 8 then ...
. . . . . . . . . . . . <> Change Variable: [10] = 1
. . . . . . . . . . . . <>
. . . . . . . . . . . : End of fork
. . . . . . . . . . . <>
. . . . . . . . . . : End of fork
. . . . . . . . . . <>
. . . . . . . . . : End of fork
. . . . . . . . . <>
. . . . . . . . : End of fork
. . . . . . . . <>
. . . . . . . : End of fork
. . . . . . . <>
. . . . . . : End of fork
. . . . . . <>
. . . . . : End of fork
. . . . . <>
. . . . : End of fork
. . . . <>
. . . : End of fork
. . . <>
. . : End of fork
. . <>
. : Else ...
. . <>
. : End of fork
. <>
: End of fork
<> Comment: ------------------------------------------------------------------------------------------------------------------------



Ich hoffe ihr könnt mir weiterhelfen.^^

Lg
Multi-Master1988

Cepanks
09.10.2010, 22:38
Dein Problem ist, dass die Variable zwar den Wert 1 zugewiesen bekommt, wenn sie auf 8 steht, aber in dem Durchlauf dann kein Bild mehr angezeigt wird. Daher musst du nochmal drücken, was dann eben die Variable auf 2 setzt.
Lösch das Variable [10] > 8 und Variable [10] < 1 aus dem Else-Case nach der Cursor-Anzeige und setz es stattdessen davor.

Also so:

If Variable [5] == 3
Variable [10] += 1
If Variable [10] > 8
Variable [10] = 1
End
// hier der Cursor-Anzeige-Code
Else
If Variable [5] == 2
Variable [10] -= 1
If Variable [10] < 1
Variable [10] = 1
End
// hier der Cursor-Anzeige-Code
End
End

Engel der Furcht
10.10.2010, 09:03
Ich mach die Cursorbewegung immer in einem separaten Event.
Das entweder PP (sanfter Move-Picture) oder über Call-Event aufgerufen wird (schneller Move-Picture)
In dieses Event kommt einfach die ganze Abfrage "If Variable 10 is XYZ" > "Show/Move Picture"

Das ganze geht aber auch mit einem Label in einem Event.
Du machst einfach vor der Tastenabfrage ein Label 1.
Dann bei jedem Tastendruck ein Goto Label 2
Label 2 kommt ganz nach unten,dahin kommt die ganze Abfrage "If Variable 10 is XYZ"
und vor Label 2 und ganz unten am Code kommt "Go to Label 1"

Etwa so:


Label1
Tastenabfrage
If Variable is 2
Variable -1
then Goto Label 2
Else if Variable is 3
Variable +1
then go to Label 2
...

Goto Label 1

Label2
If Variable 10 is 1
then show Picture 1 "Cursor"
else
If Variable 10 is 2
then show Picture 1 "Cursor"
else
If Variable 10 is 3
then show Picture 1 "Cursor"
....
Go To Label 1

Multi-Master1988
10.10.2010, 19:06
@ Cepanks

Danke dir daran hatte ich nicht gedacht aber habe deinen Code genommen diesen ein wenig verändert und nun klappt es einwandfrei.^^

@ Engel der Furcht

Die Corsur ´bewegung mache ich nur dann in einem PP oder Call-Event wenn der Code zu unübersichtlich wird oder es sich nicht vermeiden lässt.

Das mit dem Labels habe ich persönlich noch nicht ausprobiert arbeite aber auch ungerne mit denen.
Steinigt mich dafür!

Edit:
Falls Jemand andere Wege kennt oder posten möchte bitte sehr man lernt nur wenn man etwas neues endeckt.

Lg
Multi-Master1988

R.F.
10.10.2010, 21:14
Das mit dem Labels habe ich persönlich noch nicht ausprobiert arbeite aber auch ungerne mit denen.
Steinigt mich dafür!
In einer normalen Programmiersprache ists ja auch nicht gern gesehen, aber beim Maker bieten sich Labels nun mal an, zumindest, wenn man weiß, wie man sie benutzen soll. Manchmal sind sie einfach nur sinnvoller, weil dann die Übersicht besser ist, als wenn z.B. zig verschachtelte fork-Blöcke kommen.

Cherry
10.10.2010, 21:36
Wegen Labels mal allgemein: Es gibt für Label eine sehr gute Anwendungsmöglichkeit, nämlich anstatt Loops. http://cherrytree.at/misc/smilies/001smile.gif

Label sind nämlich schneller, außerdem haben Loops folgenden Bug:

Der Befehl Break Loop springt zum nächsten Ende eines Loops. Beachte: eines Loops, nicht umbedingt immer des richtigen!

Beispiel:


<> Loop
<> Message: 1
<> Break Loop
<> Loop
<>
: End Loop
<> Message: OHA!
<>
: End Loop
<> Message: 2

Du siehst 1, OHA!, 2. Erwarten würde man 1, 2. Kommt eben daher, dass der zum nächstbesten ": End Loop" springt, und das ist hier eben das innere, also das falsche.

Handschuh
11.10.2010, 14:19
Mal aus neugier, wenn ich das so lese:
Wie verarbeitet eigentlich der Maker diese Labels? .. bzw. GoTo's ... wegen der Geschwindigkeit :o
Ich weiß, dass es im Makerbereich gang und gebe ist den zu nutzen, aber ich erinner mich grad wie unser Prof im ersten Semester hoch und heilig betont hat, in der Regel keine GoTo's zu verwenden, außer wenn man wie in diesem Fall einfach aus der Schleife rausspringt - aus Effizienzgründen

R.D.
11.10.2010, 14:40
Naja ist eher so, das es damals als Dogma genommen wurde, als einer mal meinte das man GOTO's auch ganz gut mit anderen Kontrollstrukturen simulieren kann (while etc).
Trotzdem sind Sprünge sehr nützlich, das wirst du merken wenn du ein Spiel mal mit C++ schreibst oder so (Java hat afair noch kein GOTO, das Wort ist aber reserviert), dort hat man ja gerne mal viele Schleifen, die sich mit Sprüngen imho besser machen, sogar den Code ist lesbarer... Solange mans nicht übertreibt und Spaghetticode generiert. Sprünge sind wohl auch schneller, bezüglich Effizienz.
(Ist aber besser wenn man lernt Sachen mit Kontrollstrukturen zu machen, dadurch kann man später dann besser mit Sprüngen umgehen).

Der Maker wird einfach eine Sprungmarke setzen und dann hinspringen, wie in nomalem Delphicode.

Handschuh
11.10.2010, 14:48
Ja, das stimmt - damit der Code nicht unübersichtlich wird hatte ich gar nicht geschrieben. Mir gings zusätzlich um die Abarbeitung des Makers (gerade wenn man komplexere Sachen macht), also wie der Maker vorgeht um den "gesuchten" Sprungpunkt zu finden - hoffe doch nicht, dass es jedesmal den ganzen Code durchwuselt ^^

edit: btw. ich arbeite(te) mit Kontrollstrukturen in C(++) - inwiefern hilft mir das mit dem Umgang von Sprüngen?

R.D.
11.10.2010, 15:40
Naja, du lernst halt nach Regel zu arbeiten, würdest du gleich mit Sprüngen anfangen könntes es dazu führen, das du wie gesagt Spaghetticode machst, den du dann selbst nicht mehr lesen kannst.

Und wie gesagt, die Sprüngen werden wahrscheinlich wie bei Maschinensprache gemacht, also einfach an die Stelle im Code springen auf den das GOTO zeigt o.o

Dhan
12.10.2010, 17:02
Generell: Regeln für echte Hochsprachen würd ich nicht so einfach auf den Maker übertragen - ich würd drauf tippen, das Schleifen als Struktur besser vereinfacht werden können. Der Maker interpretiert sehr direkt, wird daher kaum vereinfachen so wie es ein Compiler tut.

@R.D.: Der Maker benutzt synchrone Prozesse, ob er da "direkt" springen kann ist so ne Sache, wobei ich noch nie getestet hab, wie die Machine des Makers umschaltet. Wie in Maschinensprache bezweifle ich mal, der Maker wird nicht so nahe an der CPU arbeiten (aber genau weiß ichs andererseits auch nicht)

R.D.
12.10.2010, 17:31
Ah okay, ich dachte das immer ich das so aus Delphi kenne... (also nicht das springen wie in ASM, sondenr das direkt)