Problem mit Grafiken in Blitz Plus

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Sicarius

Betreff: Problem mit Grafiken in Blitz Plus

BeitragMi, Apr 10, 2013 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich habe für mein Programm ein paar kleine Grafiken mit Gimp gebastelt, diese haben aber, wenn ich sie benutze immer so komische Flecken drin. Bei einigen Pixeln stimmen die Farben nicht mehr, obwohl die sowohl in Gimp als auch in anderen Programmen problemlos dargestellt werden.
Weiß irgendwer woran das liegt?

Danke für eure Hilfe!

DAK

BeitragMi, Apr 10, 2013 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Lad mal ein Beispielbild hier hoch.

Was mir spontan einfällt, ist das Blitz+ PNG und JPG recht eng sieht. Wenn dein Grafikprogramm sie nicht genau so abspeichert, wie B+ es erwartet, kann es zu Lesefehlern kommen.

Lad die Bilder noch mal in Paint rein und speicher sie damit ab. Da ist die Kompression nicht ganz so gut, aber dafür geht's.
Gewinner der 6. und der 68. BlitzCodeCompo

Addi

BeitragMi, Apr 10, 2013 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Farbtiefe benutzt du den in deinem Spiel und
mit welcher Farbtiefe wurde das Bild gemacht?
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62
 

Sicarius

BeitragMi, Apr 10, 2013 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich hab mal eins von den Bildern hochgeladen, es ist aber ein .bmp, somit sollte ich ja eigentlich keine Probleme mit B+ haben.
Im Spiel hab ich eine Farbtiefe von 32bit, vom Bild weiß ich es nicht, wo finde ich das denn?

So ich hab die Bilder jetzt auch noch mal mit Paint abgespeichert, das hat aber auch nichts gebracht.

user posted image

Addi

BeitragMi, Apr 10, 2013 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Rechtsklick auf das Bild, unter Eigenschaften auf Details gehen und dort nach der Bittiefe suchen Wink,
aber ich denke, dass das dann wohl eher nicht daran liegt, da die Maximale Farbtiefe einer bmp bei 24 liegt.

Skallierst du das Bild im Code oder benutzt du MaskImage?
Wird das Bild auf einem anderen Rechner richtig dargestellt?
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62
 

Sicarius

BeitragMi, Apr 10, 2013 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ah, es hat eine Bittiefe von 8bit. Sollte die Bittiefe also mit der vom Programm übereinstimmen und sollte ich damit dann lieber .jpeg benutzen?
Es wird sonst gar nicht aufgerufen, nur geladen und gezeichnet.
Auf einen anderen PC funktioniert es auch nicht, da konnte ich es aber nur als .exe testen

Addi

BeitragMi, Apr 10, 2013 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier es mal mit einer anderen Farbtiefe, wenn das auch nicht geht, dann nimm mal ein anderes Format (.png). Ansonsten weiß ich leider nicht weiter.
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62
 

Sicarius

BeitragMi, Apr 10, 2013 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, das werde ich mal ausprobieren, danke

Edit: hat nicht funktioniert, ich werde, sobald ich dafür Zeit habe, die Grafiken nochmal neu mit Paint erstellen

biggicekey

BeitragMi, Apr 10, 2013 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig auch mal deinen Code her mit dem du die Grafiken lädst. Vielleicht liegt es ja doch am Alpha oder Maskimage.
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]
 

Sicarius

BeitragMi, Apr 10, 2013 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
aber nicht schimpfen! Ich weiß, dass er schlecht ist, das erkenn sogar ich
Code: [AUSKLAPPEN]
AppTitle "Pong"
Graphics 640,480,32,2
SetBuffer BackBuffer ()
ClsColor 255,255,255
Cls
Color 0,0,0

SeedRnd (MilliSecs())


;Grafiken
maus = LoadImage("Grafiken/pointer.bmp")
hoch = LoadImage("Grafiken/hoch.bmp")
runter = LoadImage("Grafiken/runter.bmp")
P = LoadImage("Grafiken/P.bmp")
W = LoadImage("Grafiken/W.png")
S = LoadImage("Grafiken/S.bmp")
Esc = LoadImage("Grafiken/ESc.bmp")

;Sounds
Ping = LoadSound("Sounds/Ping.wav")
Pong = LoadSound("Sounds/Pong.wav")
Seite = LoadSound("Sounds/Seite.wav")
FehlerSound = LoadSound("Sounds/Fehler kurz.wav")
LevelUpSound = LoadSound ("Sounds/Level Up.wav")

HidePointer


Repeat
 Cls
 Color 0,0,0
 SetFont TimesNewRoman100
 Text 320,70, "Pong",1,1
 SetFont TimesNewRoman40
 TextinKasten1 (320,180,"Singlplayer")
 TextinKasten2 (320,250,"Mulitplayer")
 TextinKasten3 (320,320,"Steuerung")
 TextinKasten4 (320,390,"Ende")
 Mausbewegung (maus)
 Flip
 ZeitStartmenue = MilliSecs()
 If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX1,PositionKastenY1,BreiteKasten1,HoeheKasten1) Then Gosub Singlplayer
 If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX2,PositionKastenY2,BreiteKasten2,HoeheKasten2) Then Gosub Multiplayer
 If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX3,PositionKastenY3,BreiteKasten3,HoeheKasten3) Then
  Repeat
   Cls
   SetFont TimesNewRoman60
   Text 320,50,"Steuerung",1,1
   SetFont TimesNewRoman40
   Text 200,140,"Singelplayer",1,1
   Text 450,140,"Multiplayer",1,1
   Line 60,115,60,275
   Line 580,115,580,385
   Line 320,115,320,385
   Line 60,165,580,165
   Line 60,115,580,115
   Line 320,385,580,385
   Line 60,275,320,275
   SetFont TimesNewRoman30
   DrawImage hoch,80,180
   Text 140,185,"hoch"
   DrawImage runter,80,230
   Text 140,235,"runter"
   DrawImage W,340,180
   Text 400,185, "Spieler 1 hoch"
   DrawImage S,340,230
   Text 400,235,"Spieler 1 runter"
   DrawImage hoch, 340,280
   Text 400,285,"Spieler 2 hoch"
   DrawImage runter,340,330
   Text 400,335,"Spieler 2 runter"
   DrawImage P,80,330
   Text 140,335,"Pause"
   DrawImage Esc,80,400
   Text 140,405,"Zurück"
   TextinKasten7 (537,435,"Zurück")
   If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX7,PositionKastenY7,BreiteKasten7,HoeheKasten7) Then
    Delay 100
    Exit
   EndIf
   Mausbewegung (maus)
   Flip
  Until KeyHit (1)
 EndIf

 If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX4,PositionKastenY4,BreiteKasten4,HoeheKasten4) Then
  Repeat
   Cls
   Text 320,100,"Wirklich Beenden?",1,1
   TextinKasten5 (160,300,"Ja")
   TextinKasten6 (480,300,"Nein")
   Mausbewegung(maus)

   If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX5,PositionKastenY5,BreiteKasten5,HoeheKasten5) Then
    Delay 100
    End
   EndIf

   If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX6,PositionKastenY6,BreiteKasten6,HoeheKasten6) Then
    Delay 100
    Exit
   EndIf

   Flip
  Until KeyHit(1)

 EndIf

 If KeyHit(1) Then
  Repeat
   Cls
   Text 320,100,"Wirklich Beenden?",1,1
   TextinKasten5 (160,300,"Ja")
   TextinKasten6 (480,300,"Nein")
   Mausbewegung(maus)

   If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX5,PositionKastenY5,BreiteKasten5,HoeheKasten5) Then
    Delay 100
    End
   EndIf

   If Taste = 1 And ImageRectOverlap (maus,x,y,PositionKastenX6,PositionKastenY6,BreiteKasten6,HoeheKasten6) Then
    Delay 100
    Exit
   EndIf

   Flip
  Until KeyHit(1)

 EndIf

Forever








End
;Unterprogramme

.Singlplayer
Repeat
 Cls

 FehlerAnfang = Fehler

 ;Gui
 SetFont TimesNewRoman15
 ZeitText$ = "Zeit: " + Float(Int((Zeit/1000)*100))/100 + "s"
 Text 130,10,ZeitText,0,1
 Text 450,10,"Fehler: " + Fehler,0,1
 Text 320,10,"Level: " + Level,1,1
 For I = 20 To 640 Step 20
  Line 320,I,320,I + 10
 Next

 Line 0,20,640,20


;KIschläger
 If BX > 450 Then
  Rect 620,BY - 5,2,40
 EndIf
 If BX < 450 And BX > 440 Then
  RRY = BY
 EndIf
 If BX < 450
  Rect 620,RRY,2,40
 EndIf

;Schläger steuern

 If KeyDown (208) Then RLY = RLY + BGe + 2
 If KeyDown (200) Then RLY = RLY - BGe - 2
 If RLY < 20 Then RLY = 540
 If RLY > 540 Then RLY = 20
 Rect 20,RLY,2,40

;Treffer überprüfen und melden

 If BX < 22 And (BY > RLY + 45 Or BY < RLY - 20) Then
  For I = 1 To 3
   Cls
   Rect 20,RLY,2,40
   Rect 620,RRY,2,40
   SetFont TimesNewRoman15
   Oval Bx,BY,20,20
   ZeitText$ = "Zeit: " + Float(Int((Zeit/1000)*100))/100 + "s"
   Text 130,10,ZeitText,0,1
   Text 320,10,"Level: " + Level,1,1
   Text 450,10,"Fehler: " + Fehler,0,1
   For J = 20 To 640 Step 20
    Line 320,J,320,J + 10
   Next
   Line 0,20,640,20
   Color 255,0,0
   PlaySound (FehlerSound)
   SetFont TimesNewRoman60
   Text 320,240,"Fehler!!!",1,1
   Flip
   Delay 400
   Color 0,0,0
   Oval BX,BY,20,20
   Text 320,240,"Fehler!!!",1,1
   Flip
   Delay 400
   Color 0,0,0
  Next
  ZeitFehler = Zeit - MilliSecs
  Zeit = Zeit - ZeitFehler
  Fehler = Fehler + 1
 EndIf

 If BX < 22 And (BY < RLY + 45 Or BY > RLY - 20) And FehlerAnfang = Fehler Then PlaySound (Pong)

;Ball

 Oval BX,BY,20,20
 BX = BX + Bdx
 BY = BY + Bdy

;Spielbereich begrenzen

 If BX > 600 Then
  Bdx = -BGe
  PlaySound(Pong)
 EndIf
 If BX < 22 Then
  Bdx = BGe
 EndIf
 If BY > 450 Then
  Bdy = -BGe
  PlaySound(Seite)
 EndIf
 If BY < 20 Then
  Bdy = BGe
  PlaySound(Seite)
 EndIf

 Zeit = MilliSecs () - ZeitStartmenue

;Levelaufstieg

 If Int(Zeit/1000) = 40 * Level Then
  Cls
  PlaySound(LevelUpSound)
  BGe = BGe + 1
  SetFont TimesNewRoman60
  Text 320,250,"Level Up!",1,1
  SetFont TimesNewRoman15
  ZeitText$ = "Zeit: " + (40 * Level) + "s"
  Text 320,10,"Level: " + Level,1,1
  Text 130,10,ZeitText,0,1
  Text 450,10,"Fehler: " + Fehler,0,1
  For I = 20 To 640 Step 20
   Line 320,I,320,I + 10
  Next
  Line 0,20,640,20
  Oval BX,BY,20,20
  Rect 20,RLY,2,40
  Rect 620,RRY,2,40
  Flip
  Delay 1500
  Level = Level + 1
 
  ZeitLevelUp = MilliSecs - Zeit
  Zeit = Zeit - ZeitLevelUp
 EndIf

 Flip

 If KeyHit (25) Then
  FlushKeys
  Repeat
  Cls
  Rect 20,RLY,2,40
  Rect 620,RRY,2,40
  SetFont TimesNewRoman15
  Oval Bx,BY,20,20
  ZeitText$ = "Zeit: " + Float(Int((Zeit/1000)*100))/100 + "s"
  Text 130,10,ZeitText,0,1
  Text 320,10,"Level: " + Level,1,1
  Text 450,10,"Fehler: " + Fehler,0,1
  For J = 20 To 640 Step 20
   Line 320,J,320,J + 10
  Next
  Line 0,20,640,20
  SetFont TimesNewRoman60
  Text 320,240, "P A U S E",1,1
  Flip
  If KeyHit (25) Then
   ZeitPause = MilliSecs - Zeit
   Zeit = Zeit - ZeitPause
   FlushKeys
  EndIf
  If KeyHit (1) Then
   Ende = 1
   Exit
  EndIf
  Forever
  FlushKeys
 EndIf

Until KeyHit(1) Or Ende = 1

 Zeit# = 0
 Level = 1
 Ende = 0
 Delay 100

Return

.Multiplayer

Repeat
 Cls

 FehlerAnfangL = FehlerL
 FehlerAnfangR = FehlerR

;GUI
 SetFont TimesNewRoman15
 ZeitText$ = "Zeit: " + Float(Int((Zeit/1000)*100))/100 + "s"
 Text 290,10,ZeitText,0,1

 For I = 20 To 640 Step 20
  Line 320,I,320,I + 10
 Next

 Line 0,20,640,20
 Line 280,0,280,20
 Line 360,0,360,20

 Text 160,10,"Fehler: " + FehlerL,1,1
 Text 480,10,"Fehler: " + FehlerR,1,1

;Schläger rechts steuern
 If KeyDown (208) Then RRY = RRY + BGe + 2
 If KeyDown (200) Then RRY = RRY - BGe - 2
 If RRY < 20 Then RRY = 620
 If RRY > 540 Then RRY = 20
 Rect 620,RRY,2,40

;Schläger links steuern

 If KeyDown (31) Then RLY = RLY + BGe + 2
 If KeyDown (17) Then RLY = RLY - BGe - 2
 If RLY < 20 Then RLY = 620
 If RLY > 540 Then RLY = 20
 Rect 20,RLY,2,40

;Treffer überprüfen und melden

 If BX < 22 And (BY > RLY + 45 Or BY < RLY - 20) Then
  FehlerL = FehlerL + 1
  For I = 1 To 3
   Cls
   SetFont TimesNewRoman15
   For J = 20 To 640 Step 20
    Line 320,J,320,J + 10
   Next
   Line 0,20,640,20
   Line 280,0,280,20
   Line 360,0,360,20
   Text 160,10,"Fehler: " + FehlerL,1,1
   Text 480,10,"Fehler: " + FehlerR,1,1
   Rect 20,RLY,2,40
   Rect 620,RRY,2,40
   Text 290,10,"Zeit: " + Float(Int((Zeit/1000)*100))/100 + "s",0,1
   Oval Bx,BY,20,20
   SetFont TimesNewRoman40
   Color 255,0,0
   PlaySound (FehlerSound)
   Text 160,240,"Fehler!!!",1,1
   Flip
   Delay 400
   Color 0,0,0
   Oval BX,BY,20,20
   Text 160,240,"Fehler!!!",1,1
   Flip
   Delay 400
   Color 0,0,0
  Next
  ZeitFehler = Zeit - MilliSecs
  Zeit = Zeit - ZeitFehler
 EndIf

 If BX > 598 And (BY > RRY + 45 Or BY < RRY - 20) Then
  FehlerR = FehlerR + 1
  For I = 1 To 3
   Cls
   SetFont TimesNewRoman15
   For J = 20 To 640 Step 20
    Line 320,J,320,J + 10
   Next
   Line 0,20,640,20
   Line 280,0,280,20
   Line 360,0,360,20
   Text 160,10,"Fehler: " + FehlerL,1,1
   Text 480,10,"Fehler: " + FehlerR,1,1
   Rect 20,RLY,2,40
   Rect 620,RRY,2,40
   Text 290,10,"Zeit: " + Float(Int((Zeit/1000)*100))/100 + "s",0,1
   Oval Bx,BY,20,20
   SetFont TimesNewRoman40
   PlaySound (FehlerSound)
   Color 255,0,0
   Text 480,240,"Fehler!!!",1,1
   Flip
   Delay 400
   Color 0,0,0
   Oval BX,BY,20,20
   Text 480,240,"Fehler!!!",1,1
   Flip
   Delay 400
   Color 0,0,0
  Next
  ZeitFehler = Zeit - MilliSecs
  Zeit = Zeit - ZeitFehler
 EndIf


 If BX > 598 And (BY < RRY + 45 Or BY > RRY - 20) And FehlerAnfangR = FehlerR Then PlaySound (Pong)
 If BX < 22 And (BY < RLY + 45 Or BY > RLY - 20) And FehlerAnfangL = FehlerL  Then PlaySound (Pong)

;Ball

 Oval BX,BY,20,20
 BX = BX + Bdx
 BY = BY + Bdy

;Spielbereich begrenzen

 If BX > 598 Then
  Bdx = -BGe
 EndIf
 If BX < 22 Then
  Bdx = BGe
 EndIf
 If BY > 450 Then
  Bdy = -BGe
  PlaySound (Seite)
 EndIf
 If BY < 20 Then
  Bdy = BGe
  PlaySound(Seite)
 EndIf

 Zeit = MilliSecs () - ZeitStartmenue

;Levelaufstieg

 If Int(Zeit/1000) = 40 * Level Then
  Cls
  BGe = BGe + 1
  PlaySound(LevelUpSound)
  SetFont TimesNewRoman60
  Text 320,250,"Level Up!",1,1
  SetFont TimesNewRoman15
  Text 290,10,"Zeit: " + Float(40 * Level) + "s",0,1
  For J = 20 To 640 Step 20
   Line 320,J,320,J + 10
  Next
  Line 0,20,640,20
  Line 280,0,280,20
  Line 360,0,360,20
  Text 160,10,"Fehler: " + FehlerL,1,1
  Text 480,10,"Fehler: " + FehlerR,1,1
  Oval BX,BY,20,20
  Rect 20,RLY,2,40
  Rect 620,RRY,2,40
  Flip
  Delay 1500
  Level = Level + 1

  ZeitLevelUp = MilliSecs - Zeit
  Zeit = Zeit - ZeitLevelUp
 EndIf

 If KeyHit (25) Then
  FlushKeys
  Repeat
  Cls
  SetFont TimesNewRoman15
  Text 290,10,"Zeit: " + Float(Int((Zeit/1000)*100))/100 + "s",0,1
  For J = 20 To 640 Step 20
   Line 320,J,320,J + 10
  Next
  Line 0,20,640,20
  Line 280,0,280,20
  Line 360,0,360,20
  Text 160,10,"Fehler: " + FehlerL,1,1
  Text 480,10,"Fehler: " + FehlerR,1,1
  Oval BX,BY,20,20
  Rect 20,RLY,2,40
  Rect 620,RRY,2,40
  SetFont TimesNewRoman60
  Text 320,240, "P A U S E",1,1
  Flip
  If KeyHit (25) Then
   ZeitPause = MilliSecs - Zeit
   Zeit = Zeit - ZeitPause
   FlushKeys
  EndIf
  If KeyHit (1) Then
   Ende = 1
   Exit
  EndIf
  Forever
  FlushKeys
 EndIf

 Flip

Until KeyHit(1) Or Ende = 1


 Level = 1
 FehlerR = 0
 FehlerL = 0
 Delay 100
Return


Xeres

Moderator

BeitragMi, Apr 10, 2013 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
...dann mach ihn besser. Zum Beispiel all die Magischen Zahlen in Konstanten packen - jede einzelne Zeile geht kaputt, wenn du irgendeine andere ändern würdest. Fensterhöhe und Breite z.B. - oder willst du alle Instanzen von "640" für eine andere Auflösung per Hand ändern?
Für GoSub gibt es auch keinen Grund - benutze gleich eine Funktion. Ansonsten muss man dir das debuggen wirklich selbst überlassen, weil kein anderer Jemals durchsehen kann, wo Variablen gesetzt werden.
Wer weiß an welcher Stelle da ggf. was über die Bilder gezeichnet wird...
Das kannst du immerhin prüfen, indem du die Bilder ohne den ganzen Rest lädst und anzeigst - sind die okay, liegt es am restlichen Code.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Lobby

BeitragMi, Apr 10, 2013 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht solltest du auch mal Vergleichsbilder für "wie es aussieht" und "wie es aussehen müsste" hochladen.

Nach allem was ich bisher gehört habe, könnte es durchaus an der bereits genannten Maskierfarbe liegen. Die ist standardmäßig für alle Bilder 0, 0, 0 (also schwarz). Eine Lösung könnte das Verwenden von DrawBlock anstatt DrawImage oder auch ein ändern der Maskfarbe per MaskImage (z.B. auf 255, 0, 255 (rosa)) sein.
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux
 

Sicarius

BeitragMi, Apr 10, 2013 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich habe jetzt mal DrawBlock benutzt und jetzt funktioniert es. Ein ganz großes Dankeschön an alle, die mir geholfen haben!
Keine Sorge, ich werde mein nächstes Programm besser machen, nur das aktuelle ist fast fertig und der Aufwand es zu verbessern ist viel größer. Aber ich werde bei meinen nächsten Programm daran denken.

Spark Fountain

BeitragMi, Apr 10, 2013 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Dachte ich mir, dass es an DrawImage liegt Wink. Du hast wahrscheinlich auf etwas Schwarzes mit einem weichen Pinsel gezeichnet (oder umgekehrt, auf was Andersfarbiges mit einem schwarzen Pinsel). Dadurch werden die Ränder ohne Treppeneffekt gezeichnet, d. h. die Pixel am Rand nehmen eine Mischfarbe zwischen Pinselfarbe und Hintergrundfarbe ein. Da abermit DrawImage nur alles transparent wird, was exakt den Farbcode 0,0,0 hat, bleibt ein Teil ddes Randes trotzdem da (weil er minimal heller ist als 0,0,0). Das kannst du übrigens vermeiden, indem du mit einem harten pinsel zeichnest (falls du überhaupt möchtest, dass der Hintergrund transparent wird.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group