problem mit keyhit
Übersicht

feuerball11Betreff: problem mit keyhit |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
(solangsam habe ich die probleme sat...)
also in dem code (steht am schluss) habe ich folgendes problem. bei der ersten durchlauf der schleife funktioniert sie wie sie soll. beim zweiten durchlauf nicht... nun zur erklärung: ich habe ein fahrzug was auf den globalen variabeln x und y gezeichnet wird. dan habe ich ein paar objecte in den types ballen. die ballen haben ein field namens hold. das sollte sagen ob das object am fahrzeug hängt oder nicht. wen die leertaste (57) gedrückt wird und sich das fahrzeug über ein object befindet soll das object aufgenommen werden. wen ein object aufgenommen ist, und man die lertaste wieder bestätigt, wird es fallen gelassen. beim ersten object klappt das prima. aber beim zweiten object (weiter habe ich noch nicht getestet, weils bei einem schon ärgerlich ist) klappt das überhaupt nicht. es wird nichtmal aufgenommen. ps: das ganze ist in einer function(falls das wichtig sein sollt) und nun der code: Code: [AUSKLAPPEN] For bal.ballen = Each ballen
If bal\hold = 1 Then bal\x = x+ 30*(Cos(winkel)) bal\y = y+ 30*(Sin(winkel)) Goto bal2 EndIf If KeyHit(57) If ImageRectCollide (bild(winkel/2),x,y,0,bal\x-2,bal\y-5,5,10) And bal\hold = 0 Then bal\x = x+ 30*(Cos(winkel)) bal\y = y+ 30*(Sin(winkel)) bal\hold = 1 Goto bal EndIf EndIf .bal2 If bal\hold = 1 And KeyHit(57) Then bal\hold = 0 EndIf .bal Next |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erst mal auf GoTo verzichten, so lässt sich nichts sauber programmieren... | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
warum?? | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wildes herumgehüpfe löst keine Probleme, es erhöht nur die Unordnung im Code. Mache saubere Bedingungen mit If...Then, dann kann dir auch mal einer Helfen.
Siehe Keyhit ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil Goto Spaghetticode verursacht, ganz einfach. Und du überreizt es auch noch dadurch, dass du einfach bestehende Schleifen mittendrin abbrichst. Da kommt nichts gutes bei zustande. Zuerst sollte man also eine gewisse Struktur in sein Programm rein bringen, denn nur so ist gewährleistet, dass man auch nach den ersten 10% Fortschritt auch die nächsten 90% schafft.
Deine Probleme rühren im übrigen daraus, dass der Status aus KeyHit-Abfragen nach dem ersten Abfragen auf 0 gestellt werden. Was ja auch logisch ist, denn sonst könnte so eine Abfrage auch nicht funktionieren. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmm... wie sollte ich es sonst machen??
kann ich keyhit wie eine variable benutzen?? aber Code: [AUSKLAPPEN] if keyhit(57) > 0 then
funktioniert auch nicht... also wie sollte ich es dann machen?? mir fällt da so kongreth nichts ein... *edit* also das mit dem goto ist eigentlich hauptsächlich eine struktur-frage richtig? |
||
- Zuletzt bearbeitet von feuerball11 am Mo, Apr 06, 2009 23:25, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tralla=KeyHit(57)
If Tralla Then Blub |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das mit dem "tralla" funktioniert.... danke | ||
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
GoTo ist gar nicht mal so schlecht. Allerdings nur für Leute die auch von programmieren sonst eine Ahnung haben. Anfänger sollten die Finger davon lassen, aber auch Profis sollten es nur mit Bedacht benutzen.
Ebenso ist GoTo nur für kleine Programme, bei größeren verliert man auch bei einem GoTo bereits sehr an Übersicht. Diese ganze Angst vor "Spagetticode" ist meistens unbegründet. Nur absolute Deppen benutzen GoTo so oft, dass halt solcher Code dabei rauskommt. Gegen einmal GoTo ist meistens nichts zu sagen. Aber meistens geht es auch anders. Z. B. mit Funktionen. Oder auch, falls man eine Schleife verlassen will, mit Exit. |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt keine Stelle, an der man auf Goto![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
my 2 cents
Ich löse es meistens so, dass ich eine Variable mit (wichtig!) sinnvollem Name setze, welche dann am Ende der Schleife Abgefragt wird auf 0 gesetzt wird und dann das ausgeführt werden muss was du sagst. Ich weiss Funktionen sind besser aber ich habe es mir halt so angewöhnt, und sehe nicht wieso ich es ändern sollt (es gibt ausnahmen wo ich Funktionen nehme) Goto wird jedes Projekt grösser als 2 KB verhunzen ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
ozzi789 hat Folgendes geschrieben: Goto wird jedes Projekt grösser als 2 KB verhunzen Wie gesagt, wenn man zu blöd ist oder es einfach falsch macht, dann ja. ![]() ![]() |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Egal ob richtig oder falsch, Goto ist der Teufel in Person >:0 | ||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wohl eher der teufel in befehl......... | ||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
du lenkst nur von der Tatsache ab ![]() Glaub mir wenn du die Functions begreifst wirst du sie lieben, dass ist das gleiche wie bei den Types ^^ |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
functionen habe ich bereits begriffen..... | ||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Deine Goto-Probleme lassen sich mittels Else ganz gut lösen.
Der Grund warum hier alle auf Goto rumhacken ist Rob's BB-Tut indem dir eingeflößt wird Goto zu meiden. Tatsächlich lassen sich viele Probleme auch mittels Funktionen oder zumindest Gosub lösen. Goto wird halt bei großen Programmen sehr unübersichtlich. Code: [AUSKLAPPEN] Repeat
Befehl() Goto Bla .returnbla Befehl2 Forever .Bla Blubb() Goto returnbla lässt sich sehr gut in Code: [AUSKLAPPEN] Repeat
Befehl() Bla() Befehl2 Forever Function Bla() Blubb() End Function verwandeln. Das wird auf der niedersten Stufe von PC zwar wieder in das erste Umgewandelt, jedoch sparst du dir so das Merken von 2 Sprungmarken und hast nur 1 Funktion im Kopf an der du sogar ablesen kannst welche Variablen gebraucht werden. Goto hat tatsächlich trotzdem einen Sinn: Code: [AUSKLAPPEN] For x=1 to 100
For y=1 to 100 if Bla(x,y)=true then Goto Raushier next next .Raushier Hier kommt exit nicht mehr hin. Da ist goto anzuwenden ganz in Ordnung. Ähnlich hast du es auch bei dir verwendet nur geht hier auch ein Else (Spart soweit ich weiß intern auch einen befehl, weil ein "Goto" von IF zu ENDIF wegfällt) |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch DarkCorner benutzte Goto in Stranded (1), da es richtig angewendet nicht böse ist. Er hat z.B. Labels wie .menu gemacht, insgesamt 3, was zwar rumgehüpfe verursacht, jedoch bei Gamestates nicht zu schlecht ist.
ozzi's Variante mit den Schaltervarianten umgeht zwar GoTo, ist jedoch nicht immer besser. Am besten baut man seinen Code so auf, dass das Zeugs dort ist wo es hingehört, also ohne Rumgehüpfe. Tschausens. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group