IF Anweisung falsch plaziert? Hilfe.

Previous topic - Next topic

Veritas

Meine IF Anweisung funktioniert nicht. Warum? Was mache ich jetzt schon wieder falsch. setze ich statt b=10 KEY(42) und drücke diese setzt er SPEED auch um -20 runter
....


b=0
SPEED=50

Code (glbasic) Select
IF KEY (57) THEN

FOR x=b TO 25
IF b=10 THEN SPEED=SPEED-20

FOR i=-90 TO 290 STEP SPEED  // Der Y-Wert der Bilder im Durchlauf
DRAWRECT 100, 100, 200, 200, RGB(255, 255, 255)

DRAWSPRITE Code[x], 100, i  // Code[x] lädt die Werte der Tabelle an der jeweiligen Stelle x

SHOWSCREEN

NEXT

NEXT
Die SPEED Werte ändere ich natürlich noch ausgewogen, aber bei dem Kontrast sieht man schnell ob's klappt oder nicht. Deswegen.
Tower: 2,5Ghz Quadcore/  8GB DDR2 Ram/ 1066Mhz FSB / ATI HD Radeon 4860.
Mobil:  DELL Studio XPS 16 / 2,53GHz intel Centrino 2 Duo / 4GB DDR 3 Ram/ 1066Mhz FSB/ ATI Radeon 4670 mobility

Never Argue with Idiots. They'll drag you down
to their level and beat you with experience.

Schranz0r

Öhmmm dein Code.... öhhhh.... :)

Was hast du den vor?
Da gibts zu 100% ne schickere Lösung!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Tiuz

Hallo Veritas,

in deinem Programm wird b nie = 10.
Du benutzt es ja nur um die Laufvariable x der ersten Schleife  zu initialisieren.

Tiuz.

Kosta

Das was mir gleich ins Auge springt, ist deine IF-Anweisung... (KEY)

wenn du THEN benutzt, führt er nur das nächste (und nur dieses) Kommando innernhalb vom IF aus.

Ist das hier geplant ? Oder ist hier nur der Code abgekürzt ?

Und wie Tiuz schon sagte, in deiner Schleife änderst du den b-Wert nicht.

der Rest habe ich mir grad nicht durchgesehen (ist doch etwas anstrengend zu lesen) :-/
Intel QuadCore, Geforce8600GT,512MB,4GB Ram, 26" TFT
HP nw8440 Schläppy
GP2X Mk2 (Firmware 3.0)

GLBASIC Blog:
http://www.glbasic.com/forum/index.php?blog=51.0

Veritas

FÜr schickere Lösungen bin ich stets zu haben, aber momentan programier ich halt noch so wie ich denke ^^. Sonst wär ich jetz auch mit meinen Frage nich hier, genau das ist mein Problem.
Aber jetzt zur Schleife.
Ich bastel noch an meinem Dattelautomaten und probier parallel ein paar Funktionen aus um zu gucken obs geht und später pflanz ich die dann zusammen/ineinander.
Hier gehts um die Animation. Man soll ein weißes Rechteck sehn durch das die Bilder durchwandern.
Wie die Trommel eines einarmigen Banditen eben.
Das mit dem Wandern der Bilder klappt bloß halt, das sie dann logischerweise auch außerhalb des Rechtecks noch zu sehen sind, was nicht sein soll.
Das ist noch ein Problem zudem soll das letzte Bild nicht aus dem Rechteck rauswandern sondern drin stehen bleiben. Wär ja sonst blöd iwie.

Das andere Problem ist das so eine Rolle zum Ende hin langsamer werden soll. Das ist das was ich damit versuche umzusetzen.

Und das dritte Problem wofür mir im moment noch keine richtige Lösung einfällt ist, das diese Automaten genau da weiterlaufen wo sie stehen geblieben sind. Wenn's jetzt von 26 Ereignissen beim 20 stoppt (Meinetwegen durch RND(26)  soll die nächste Runde auch beim 20. Starten und dann weiter über 26 - 0,1,2,3,4, usw laufen. Also die Tabellenwerte erneut von oben nach unten durchlesen.

Wenn ihr irgendwelche Ratschläge habt wie man schneller "schlau" wird, was das schreiben angeht, dann nur zu. Ich versuche natürlich so zu schreiben wie ich denke das das Programm gelesen wird, was mir bisher mehr gebracht hat als wahrlos drauf loszutexten =D, aber das klappt halt auch nur bedingt.

Liebe Grüße Veritas
Tower: 2,5Ghz Quadcore/  8GB DDR2 Ram/ 1066Mhz FSB / ATI HD Radeon 4860.
Mobil:  DELL Studio XPS 16 / 2,53GHz intel Centrino 2 Duo / 4GB DDR 3 Ram/ 1066Mhz FSB/ ATI Radeon 4670 mobility

Never Argue with Idiots. They'll drag you down
to their level and beat you with experience.

Kitty Hello

Das Bild kannst Du mit VIEWPORT abschneiden, damit's nicht den Automaten übemalt.
Schneller/Langsamer macht man mit SIN oder einafch damit, dass Du bei jedem Durchlauf die Geschwindigkeit auch verminderst.
3. versteh' ich nicht ganz.

Tiuz

Hallo Veriatas,

Einfache Lösung:
-  Verschieb deine Symbole in einer Kette von unten nach oben über den Bildschirm.
-  Wenn das oberste den Rand erreicht hat, setz es unten wieder an.
- Zeichne danach eine feste Lochmaske (Automatenguckloch), die alles was nicht zu sehen seinen soll verdeckt.

Wenn du es realistischer haben willst, must du die perspektivische Verzerrung und Geschwindigkeitsänderungen berücksichtigen, die durch die Draufsicht auf die Rolle entstehen. (STRETCHSPRITE ?, Geschwindigkeit als Funktion der y Position?)

Tiuz.

Schranz0r

Einfach als erstes deine "Rollen" zeichnen und dann die "Automatenmaske" drüber, mit der Aussparung für das Ergebniss.
Jetzt kannst du wie Tiuz schon sagte ein Sprite mit allen Bildern als "Kette" nehmen und von oben nach unten wandern lassen.
Ist der Bandit aktiv, kannst du pro durchlauf deine Geschwindigkeit verringern
.
Und wenn du es wirklich perfekt machen willst, also Optisch, dann machs in 3D und klatsch da deine Bilder drauf und prüfe das Ergebniss anhand des Rotationswinkels.
(würde ich am liebsten selber gleich mit anfangen :) )
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Veritas

Ja ist auf jedenfall ne spannende Sache. Zumindest für mich als noch "NICHT" Programmierer . Auf 3D komm ich später zurück ich wollts erstmal 2D machen. Also nachdem ich sehr verwundert über Viewport war und dieser auch das "rect" verschoben hatte und ichs nun endlich da hab wo ichs will (erst noch genauer durchsteigen muss), kümmere ich mich um die anderen tollen Ideen hier und versuch mal ein paar paralell umzusetzen. Welche der Möglichkeiten braucht denn weniger Rechenleistung? (die mit der Kette/ oder die mit der Tabelle)

Nochmal zu Punkt 3.
Die Tabelle funktioniert ja wie ein Kreislauf, bei jedem mal drücken läuft sie von vorne nach hinten durch usw. . Momentan würde sie dann vom ersten bis zum letzten Tabellenwert durchlaufen.

So, jetzt ist die Sache nur die, dass man dann ja immer auch das selbe Ergebnis hätte. Also wär sowas wie RND(25)  nicht schlecht. Dann läuft sie jetzt beispielsweise von 0 - Zufallswert sagen wir mal 20 und stoppt mit Tabellenwert 20. (Erstmal muss ich hinkriegen das das Bild für Wert 20 dort stehenbleibt und nicht auch aus dem Bild rausläuft wie jetzt)

Wenn ich jetzt wieder den "Hebel" runterziehe und es authentisch sein soll wärs ziemlich genial wenn es dann von Tabellenwert 20 einfach weiterläuft (also ich versuch erstmal das mit der Tabelle weiter und widme mich später dem Spriteset) und dann am Tabellen-ende wieder zum Anfang springt.

 
Liebe Grüße Veritas


ps.: IF KEY ... THEN ist richtig, es soll die Schleife ja nur einm,al durchführen wenn man die Taste gedrückt hat(te).  Mein Problem ist die andere IF Anweisung mit der Geschwindikeit gewesen und ists auch immernoch.
Tower: 2,5Ghz Quadcore/  8GB DDR2 Ram/ 1066Mhz FSB / ATI HD Radeon 4860.
Mobil:  DELL Studio XPS 16 / 2,53GHz intel Centrino 2 Duo / 4GB DDR 3 Ram/ 1066Mhz FSB/ ATI Radeon 4670 mobility

Never Argue with Idiots. They'll drag you down
to their level and beat you with experience.