Bild wird nicht gezeichnet bei If-Abfrage [gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Der Eisvogel

Betreff: Bild wird nicht gezeichnet bei If-Abfrage [gelöst]

BeitragMo, Apr 14, 2008 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
ich Farge mit einer If-Abfrage ab, ob ein bestimmtes Feld eine bestimmte Zahl hat, doch bei einer Abfrage geht das irgendwie nicht.
Code: [AUSKLAPPEN]
For x=0 To 9
   For y=0 To 9
      If player(x,y)=1.02 Then DrawImage schiff_5k_img_sr,x*32,y*32,0
      If player(x,y)=1.12 Then DrawImage schiff_5k_img_sr,x*32,y*32,1
      If player(x,y)=1.22 Then DrawImage schiff_5k_img_sr,x*32,y*32,2
      If player(x,y)=1.32 Then DrawImage schiff_5k_img_sr,x*32,y*32,3
      If player(x,y)=1.42 Then DrawImage schiff_5k_img_sr,x*32,y*32,4
      If player(x,y)=2.02 Then DrawImage schiff_4k_img_sr,x*32,y*32,0
      If player(x,y)=2.12 Then DrawImage schiff_4k_img_sr,x*32,y*32,1
      If player(x,y)=2.22 Then DrawImage schiff_4k_img_sr,x*32,y*32,2
      If player(x,y)=2.32 Then DrawImage schiff_4k_img_sr,x*32,y*32,3
      If player(x,y)=3.02 Then DrawImage schiff_3k_img_sr,x*32,y*32,0
      If player(x,y)=3.12 Then DrawImage schiff_3k_img_sr,x*32,y*32,1
      If player(x,y)=3.22 Then DrawImage schiff_3k_img_sr,x*32,y*32,2
      If player(x,y)=4.02 Then DrawImage schiff_2k_img_sr,x*32,y*32,0
      If player(x,y)=4.12 Then DrawImage schiff_2k_img_sr,x*32,y*32,1
   Next
Next


Bei dieser Abfrage wird kein Bild gezeichnet:
Code: [AUSKLAPPEN]
If player(x,y)=1.32 Then DrawImage schiff_5k_img_sr,x*32,y*32,3

Bei allen anderen Abfragen wird ein Bild gezeichnet. Das Bild existiert auf jeden Fall. Das Dim-Fald natürlich auch. Es ist auch mit Float formatiert. Eines von den 100 Feldern, die ich abfrage hat auf jeden Fall den Wert "1.32".
Ich habe alles mögliche ausprobiert.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
  • Zuletzt bearbeitet von Der Eisvogel am Mo, Apr 14, 2008 23:34, insgesamt 3-mal bearbeitet

Firstdeathmaker

BeitragMo, Apr 14, 2008 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Float Zahlen sind in Blitz immer mit Vorsicht zu genießen. Ich würde sie bei Abfragen solcher Art am besten ganz weg lassen. Blitz verändert Nachkommastellen gerne mal geringfügig.

Und außerdem rate ich dir dringendst mal select und case anzuschauen.

Edit: was genau willst du denn machen? Vielleicht kann ich dir eine alternative Lösung vorschlagen bei der du keine Float Abgragen mit If machen musst.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Der Eisvogel

BeitragMo, Apr 14, 2008 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code ist für die BCC#16 und Select-Case kostet da ein Paar Kbyte und bei mir sind alle davon sehr wichtig. Ich habe ja jetzt schon Probleme mit der Gröse des Codes.

EDIT: Habe den Rat von Firstdeathmaker befolgt und Ints verwendet und es geht jetzt alles einwandfrei. Ich weiß irgendwie garnicht mehr wie ich auf Floats gekommen bin.

MfG
Marc-Peter
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

D2006

Administrator

BeitragMo, Apr 14, 2008 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Uff, dann ist Optimieren aber nicht so dein Ding, oder? Smile

Also vorweg: Ich würde an deiner Stelle auch keine Floats sondern Integer nehmen und dann statt z.B. "1.12" einfach "112" speichern.

Dadurch konnte ich deinen Code schonmal mit Select-Case verkürzen:

Code: [AUSKLAPPEN]
Select player(x,y)
   Case 102,202,302,402:fr=0
   Case 112,212,312,412:fr=1
   Case 122,222,322:fr=2
   Case 132,232:fr=3
   Case 142:fr=4
End Select
DrawImage schiff_2k_img_sr,x*32,y*32,fr


Ich finde schon, dass es wesentlich kürzer ist.

Geht natürlich noch besser. Und zwar wenn keine anderen Werte außer die vorgegebenen auftreten, kannst du auch das hier benutzen:

Code: [AUSKLAPPEN]
fr = (player(x,y) / 10) Mod 10
DrawImage schiff_2k_img_sr,x*32,y*32,fr


Das mal kurz, was. Wink

Übrigens ein weiterer Tipp: Benutz kürzere Variablennamen, wenn du Bytes sparen willst.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Der Eisvogel

BeitragMo, Apr 14, 2008 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem Select-Case Zeugs ist mir so noch garnicht in den Sinn gekommen aber ich werds gleich ausprobieren. Zu der 2-Zeilen-Methode:
Die kann ich nicht anwenden, da es verschiedene Bilder sind und diese widerum eine verschiedene Anzahl von Bildern hat. Oder ist es auch unter diesen Bedingungen möglich die 2-Zeilen-Methode anzuwenden?

EDIT: Ich habs jetzt so versucht:
Code: [AUSKLAPPEN]
Select player(x,y)
Case 1,6,10,13,15,20,24,27 : frame=0
Case 2,7,11,14,16,21,25,28 : frame=1
Case 3,8,12,17,22,26 : frame=2
Case 4,9,18,23 : frame=3
Case 5,19 : frame=4
Case 1,2,3,4,5 : image=schiff_5k
Case 6,7,8,9 : image=schiff_4k
Case 10,11,12 : image=schiff_3k
Case 13,14 : image=schiff_2k
Case 15,16,17,18,19 : image=schiff_5k_sr
Case 20,21,22,23 : image=schiff_4k_sr
Case 24,25,26 : image=schiff_3k_sr
Case 27,28 : image=schiff_2k_sr
Case 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 : DrawImage image,x*32,y*32,frame
End Select

Aber jetzt werden gar keine Bilder mehr gemalt. Bin blöd oder einfach nur unwissend?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Apr 14, 2008 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Du mußt Drawimage auch hinter der Selectschleife schreiben

Code: [AUSKLAPPEN]
    ....
    Case 24,25,26 : image=schiff_3k_sr
    Case 27,28 : image=schiff_2k_sr
End Select
DrawImage image,x*32,y*32,frame
[BB2D | BB3D | BB+]

Der Eisvogel

BeitragMo, Apr 14, 2008 23:34
Antworten mit Zitat
Benutzer-Profile anzeigen
@Rallimen
Mit der Möglichkeit habe ich es auch schon versucht, aber da kam eine Fehlermeldung.

Ich habe mit Hilfe von D2006 die Lösung:
Code: [AUSKLAPPEN]
      Select player(x,y)
   Case 1,6,10,13,15,20,24,27 : frame=0
   Case 2,7,11,14,16,21,25,28 : frame=1
   Case 3,8,12,17,22,26 : frame=2
   Case 4,9,18,23 : frame=3
   Case 5,19 : frame=4
End Select
Select player(x,y)
   Case 1,2,3,4,5 : image=schiff_5k_img
   Case 6,7,8,9 : image=schiff_4k_img
   Case 10,11,12 : image=schiff_3k_img
   Case 13,14 : image=schiff_2k_img
   Case 15,16,17,18,19 : image=schiff_5k_img_sr
   Case 20,21,22,23 : image=schiff_4k_img_sr
   Case 24,25,26 : image=schiff_3k_img_sr
   Case 27,28 : image=schiff_2k_img_sr
End Select
If player(x,y)<>0 Then DrawImage image,x*32,y*32,frame
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group