Bild zu groß? Absturz

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Loewe95

Betreff: Bild zu groß? Absturz

BeitragFr, Okt 02, 2009 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich programmiere ein kleines Jump n Run Spiel zudem relativ große, jedoch als .png abgespeicherte Bilder geladen werden. Jedes mal wenn die Bilder aber angezeigt werden sollen, stürtzt das Programm mit einer Meldung: blitzcc.exe funktioniert nicht mehr ab.
Code: [AUSKLAPPEN]

For i = 1 To Teile(level)
map(i,1) = LoadImage(".\Maps\Level" + level + "\mapl" + i + "sh.png")
map(i,2) = LoadImage(".\Maps\Level" + level + "\mapl" + i + "sc.png")
map(i,3) = LoadImage(".\Maps\Level" + level + "\mapl" + i + "sh.png")
Next

Question Question
bitte um anwort Sad
p.s der debugger ist an
Mhm, ja hab nichts gutes für die Signatur
  • Zuletzt bearbeitet von Loewe95 am Sa, Okt 03, 2009 11:31, insgesamt 2-mal bearbeitet

Nicdel

BeitragFr, Okt 02, 2009 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie groß sind die Bilder? Hast du die Vollversion (wenn ja, speicher die Bilder auf jeden Fall als PNG ab)? Ich hatte dieses Problem noch nie, hört sich seltsam an.
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

Goodjee

BeitragFr, Okt 02, 2009 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
du lädst pngs die angeblich bmps sind...
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Loewe95

BeitragFr, Okt 02, 2009 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed
hab mich verschrieben ich lade in der tat png´s
ein level hier bestehend aus zwei levels ist ungefähr 700 kb groß was mir eigentlich nicht als allzuviel erscheint

ja habe bp vollversion
Mhm, ja hab nichts gutes für die Signatur
  • Zuletzt bearbeitet von Loewe95 am Fr, Okt 02, 2009 16:36, insgesamt einmal bearbeitet

Goodjee

BeitragFr, Okt 02, 2009 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
dann zeig mal her wie du die bilder malst
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/
 

Loewe95

BeitragFr, Okt 02, 2009 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

For i = 1 To Teile(level)
DrawImage map(i,1), map(i,4) - Figur(1), map(i,5) - Figur(2)
Next

meinst du das?

Idea Idea Idea
Wenn ich nur einen Teil lade, dann läuft das Programm problemlos
Idea Idea Idea
Mhm, ja hab nichts gutes für die Signatur
 

Loewe95

BeitragFr, Okt 02, 2009 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

If AvailVidMem() < 1000 Then Stop

lässt das programm auch abstürzen
Mhm, ja hab nichts gutes für die Signatur

Valnar

BeitragFr, Okt 02, 2009 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
bitte doppelposts vermeiden, ist nicht gern gesehen. Wir sind hier nicht alle arm, ein netter spender hat der forenengine eine editfunktion spendiert.

Was gibt den AvailMem aus?
 

Loewe95

BeitragFr, Okt 02, 2009 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Eben nichts das Programm stürtzt auch dann ab
Mhm, ja hab nichts gutes für die Signatur
 

aletes

BeitragFr, Okt 02, 2009 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Sicher das du auch folgendes geschrieben hast:
BlitzBasic: [AUSKLAPPEN]
Print AvailVidMem()/1000


Im Zweifellsfall öffne einfach mal die .png Bilder mit einem Grafikprogramm deiner Wahl und speichere sie einfach nochmal als .png ab. Am besten nicht mit Paint, da kann es sein, dass es die Bilder einfach als .bmp speichert aber mit der Dateiendung .png Wink

Wenn es allerdings immernoch abstürtzt, hört sich das für mich eher nicht nach einem Problem im Code, sondern eher von BlitzBasic,deinem OS oder deinem Computer an Wink
 

Loewe95

BeitragFr, Okt 02, 2009 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ok wenn ich den Speicherplatz vor dem Laden der Daten prüfe kommt ungefähr 1.8GB raus. Hinterher: Absturz
Mhm, ja hab nichts gutes für die Signatur
 

DjDETE

BeitragFr, Okt 02, 2009 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig bitte mal deinen gesamten Code (oder wenn es zuviel ist den wichtigeren Teil).
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

Loewe95

BeitragFr, Okt 02, 2009 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
so hab noch mal kleines bisschen übersichtlicher gemacht
Code: [AUSKLAPPEN]

Graphics 800,600, 16,1

SetBuffer BackBuffer()

Global level = 1

Type Tessen
Field Typ
Field x
Field y
Field frame
Field got
End Type

Type Tenemy
Field typ
Field sx
Field sy
Field ex
Field ey
Field leben
Field dead
Field x
Field y
Field hframe
Field vframe
End Type

Dim Figur(17)
;;;;;;Figur;;;;;
;0. void
;1. x
;2. y
;3. Richtung
;4. Frame
;5. Horizontal
;6. Vertikal
;7. Durchläufe seit Event
;8. Bild
;9. Fallen
;10. Fallbild
;11. Breite
;12. Länge
;13. jump
;14. Echtes Bild
;15. Sprunkraft
;16. Geschwindigkeit
;17. yVeränderung
;;;;;;;;;;;;;

Dim Flagge(5)
;;;;;Flagge;;;;;;
;1. Bild
;2. x
;3. y
;4. Frame
;;;;;;;;;;;;
Flagge(1) = LoadAnimImage(".\Bilder\Flagge.png",170,300,0,7)
Flagge(2) = 1850
Flagge(3) = 100
Flagge(4) = Flagge(4) + 1
If Flagge(4) = 7 Then Flagge(4) = 0

Figur(8) = LoadAnimImage(".\Figur1.png",150,200,0,14)
Figur(10) = LoadAnimImage(".\Figur2.png",150,200,0,2)
Figur(14) = LoadAnimImage(".\Figur1.png",150,200,0,14)
Figur(11) = 150
Figur(12) = 200
Figur(15) = 120
Figur(16) = 20
;MidHandle Figur(8)
MaskImage Figur(8), 255,255,255
MaskImage Figur(10), 255,255,255
MaskImage Figur(14), 255,255,255
MaskImage Flagge(1), 255,255,255
ClsColor 255,255,255
Figur(1) = 0
Figur(2) = -400

Dim Teile(1)
Teile(0) = 1
Teile(1) = 2

Dim essbild(2)

Dim feindbild(3)

essbild(1) = LoadImage(".\Bilder\Pflaume.png")
essbild(2) = LoadImage(".\Bilder\Brot.png")
feindbild(1) = LoadAnimImage(".\Bilder\Affe.bmp",162,128,0,2)
feindbild(2) = LoadAnimImage(".\Bilder\Gespenst.bmp",90,160,0,2)
feindbild(3) = LoadAnimImage(".\Bilder\Geier.bmp",235,140,0,2)
MaskImage feindbild(1), 255,255,255
MaskImage feindbild(2), 255,255,255
MaskImage feindbild(3), 255,255,255
MaskImage essbild(1), 255,255,255
MaskImage essbild(2), 255,255,255

;Außenschleife

datei = ReadFile(".\Maps\Level" + level + "\Foodlist.fls")
food = ReadInt(datei)
For i = 1 To food
essen.Tessen = New Tessen
Next
For essen.Tessen = Each Tessen
essen\typ = ReadInt(datei)
essen\x = ReadInt(datei)
essen\y = ReadInt(datei)
Next
CloseFile datei

datei = ReadFile(".\Maps\Level" + level + "\Enemylist.els")
feinde = ReadInt(datei)
For i = 1 To feinde
enemy.Tenemy = New Tenemy
Next
For enemy.Tenemy = Each Tenemy
enemy\typ = ReadInt(datei)
enemy\sx = ReadInt(datei)
enemy\sy = ReadInt(datei)
enemy\ex = ReadInt(datei)
enemy\ey = ReadInt(datei)
enemy\x = enemy\sx - 20
enemy\y = enemy\sy + 20
Next
CloseFile datei

essen.Tessen = First Tessen
enemy.Tenemy = First Tenemy

Dim map(Teile(Level),6)
;;;;;;map;;;;;;
;1. Anzeige
;2. Schwerkraft
;3. Wände
;4. xStart
;5. yStart
;;;;;;;;;;;;;;

For i = 1 To Teile(level)
map(i,1) = LoadImage(".\Maps\Level" + level + "\mapl" + i + "sh.png")
map(i,2) = LoadImage(".\Maps\Level" + level + "\mapl" + i + "sc.png")
map(i,3) = LoadImage(".\Maps\Level" + level + "\mapl" + i + "sh.png")
Next
If map(1,1) = 0 Then End

For i = 1 To Teile(Level)
For in = 1 To 3
MaskImage map(i,in), 254,254,254
Next
Next

map(1,4) = 0
map(1,5) = 0
;map(2,4) = 0
;map(2,5) = 1543

ClsColor 50,127,255

Repeat
;If KeyDown(200) And Figur(7) < 5 And Figur(13) > 0 Then Figur(13) = Figur(13) + Figur(15) / 5

If KeyHit(200) And Figur(13) = 0 Then
Figur(7) = 0
Figur(9) = True
For i = 1 To Teile(level)
If ImagesCollide(Figur(8), GraphicsWidth() / 2,384 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then Figur(9) = False
Next
If Figur(9) = False Then Figur(13) = Figur(15)
EndIf

If KeyDown(203) Then
Figur(3) = 1

ElseIf KeyDown(205) Then
Figur(3) = 2

Else
Figur(3) = 0

EndIf

moveenemy

collide

chooseframe
Cls

drawscene
;If copy = 100 Then SaveBuffer(BackBuffer,".\Buffer.bmp") : copy = 0

Flip

Delay 100

Flagge(5) = Flagge(5) + 1
;copy = copy + 1

Until KeyDown(1)
Function moveenemy()

For enemy.Tenemy = Each Tenemy

If enemy\hframe = 1 Then
If enemy\sx <> enemy\ex Then enemy\x = enemy\x + 20
If enemy\x > enemy\sx Then enemy\hframe = 0

ElseIf enemy\hframe = 0 Then
If enemy\ex <> enemy\sx Then enemy\x = enemy\x - 20
If enemy\x < enemy\ex Then enemy\hframe = 1

EndIf

If enemy\vframe = 1 Then
If enemy\sy <> enemy\ey Then enemy\y = enemy\y + 20
If enemy\y > enemy\ey Then enemy\vframe = 0

ElseIf enemy\vframe = 0 Then
If enemy\ey <> enemy\sy Then enemy\y = enemy\y - 20
If enemy\y < enemy\sy Then enemy\vframe = 1

EndIf
Next
End Function
Function collide()
For essen.Tessen = Each Tessen
If ImagesCollide(Figur(14), GraphicsWidth() / 2,384 ,0, essbild(essen\typ), essen\x - Figur(1),essen\y - Figur(2), 0) Then essen\got = True : leben = leben + 1
Next

For enemy.Tenemy = Each Tenemy
If ImagesCollide(Figur(14), GraphicsWidth() / 2,384, 0, feindbild(enemy\typ), enemy\x - Figur(1),enemy\y - Figur(2), 0) And enemy\dead = False Then
If ImagesCollide(Figur(14), GraphicsWidth() / 2,384 - 35, 0, feindbild(enemy\typ), enemy\x - Figur(1),enemy\y - Figur(2), 0) Or Figur(17) < 20 Then
leben = leben - 1
Figur(1) = Figur(1) - 200
Figur(2) = Figur(2) - 200
Else
enemy\dead = True
EndIf
EndIf

Next
End Function
Function movevertical()
wall = False

If Figur(3) = 2 Then

For i = 1 To Teile(level)
If ImagesCollide(Figur(14), GraphicsWidth() / 2 + Figur(16),380 ,0, map(i,3),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then
If ImagesCollide(Figur(14), GraphicsWidth() / 2 + 31,380 ,0, map(i,3),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then wall = True
EndIf
Next

If wall = False Then Figur(1) = Figur(1) + Figur(16)
ElseIf Figur(3) = 1 And Figur(1) > -600 Then

For i = 1 To Teile(level)
If ImagesCollide(Figur(14), GraphicsWidth() / 2 - Figur(16),380 ,0, map(i,3),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then
If ImagesCollide(Figur(14), GraphicsWidth() / 2 - 31,380 ,0, map(i,3),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then wall = True
EndIf
Next

If wall = False Then Figur(1) = Figur(1) - Figur(16)

EndIf

End Function
Function chooseframe()
y = Figur(2)

If Figur(3) = 0 Then
 If Figur(4) > 6 Then
  Figur(4) = 13
 Else
  Figur(4) = 0
 EndIf
ElseIf Figur(3) = 1 Then
 If Figur(4) < 8 Then Figur(4) = 13
 Figur(4) = Figur(4) - 1
 If Figur(4) = 14 Then Figur(4) = 12
ElseIf Figur(3) = 2 Then
 Figur(4) = Figur(4) + 1
 If Figur(4) > 6 Then Figur(4) = 1
EndIf

Figur(2) = Figur(2) - 40
movevertical
Figur(9) = True
;!!!!!!!!!!!!!!!!!Ab hier funktioniert es meistens nicht mehr!!!!!!!!!!!!!!!!!!!!
For i = 1 To Teile(level)
If ImagesCollide(Figur(8), GraphicsWidth() / 2,385 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then
If ImagesCollide(Figur(8), GraphicsWidth() / 2,374 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then
void = 0
Else
Figur(9) = False
EndIf
EndIf
Next

If Figur(9) Then
Repeat
For i = 1 To Teile(level)
If ImagesCollide(Figur(8), GraphicsWidth() / 2,385 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) And ImagesCollide(Figur(8), 610,384 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) And ImagesCollide(Figur(8), 670,384 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then
If ImagesCollide(Figur(8), GraphicsWidth() / 2,374 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) And ImagesCollide(Figur(8), 610,374 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) And ImagesCollide(Figur(8), 670,374 ,0, map(i,2),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then
void = 0
Else
Figur(9) = False
EndIf
EndIf
Next

ind = ind + 1
Figur(2) = Figur(2) + 1

Until Figur(9) = False Or ind = 70
EndIf
wall = False

For i = 1 To Teile(level)
If ImagesCollide(Figur(14), GraphicsWidth() / 2,384 - Figur(13),0, map(i,3),map(i,4) - Figur(1), map(i,5) - Figur(2),0) Then wall = True
Next

If wall = False Then
Figur(2) = Figur(2) - Figur(13)
Else
Figur(13) = 0
EndIf

If Figur(13) > 0 Then Figur(13) = Figur(13) - 10
Figur(17) = Figur(2) - y

End Function
Function drawscene()
;!!!!!!!!!!!!!!!!!!!Wenn ich alle anderen Funktionen mit Imagescollide() auslasse stürzt das Programm in der kommenden For-Schleife ab!!!!!!!!!!!!!!!
For i = 1 To Teile(level)
DrawImage map(i,1), map(i,4) - Figur(1), map(i,5) - Figur(2)
Next

For essen.Tessen = Each Tessen
If essen\got = False Then DrawImage essbild(essen\typ), essen\x - Figur(1),essen\y - Figur(2)
Next

If Flagge(5) = 2 Then Flagge(4) = Flagge(4) + 1 : Flagge(5) = 0
If Flagge(4) = 7 Then Flagge(4) = 0
DrawImage Flagge(1), Flagge(2) - Figur(1),Flagge(3) - Figur(2),Flagge(4)

For enemy.Tenemy = Each Tenemy
If enemy\dead = False Then DrawImage feindbild(enemy\typ), enemy\x  - Figur(1) ,enemy\y - Figur(2), enemy\hframe
Next

If Figur(9) Then
 If Figur(4) > 6 Then
  DrawImage Figur(10), GraphicsWidth() / 2, 384, 1
 ElseIf Figur(4) < 7 Then
  DrawImage Figur(10), GraphicsWidth() / 2, 384, 0
 EndIf
Else
 DrawImage Figur(8), GraphicsWidth() / 2, 384, Figur(4)
EndIf

End Function
Mhm, ja hab nichts gutes für die Signatur
  • Zuletzt bearbeitet von Loewe95 am Sa, Okt 03, 2009 10:16, insgesamt einmal bearbeitet
 

aletes

BeitragFr, Okt 02, 2009 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
1280x768? ist das überhaupt eine annehmbare Auflösung?, weil ich bekommen einen 'Unable to set graphics mode"...

ComNik

BeitragFr, Okt 02, 2009 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Und du erwartest das sich jemand durch diesen Code wühlt? Einrücken, Abstände etc..?
Ansonsten probier doch mal testweise ob es mit kleineren Bildern klappt. Setze evtl mal 800*600 als Auflösung. Du sagst das beim Laden eines Teils der Bilder alles klappt? Probier doch mal solange bis du eventuell das Bild gefunden hast, das beim Laden Probleme bereitet?

Wenn das alles nichts hilft: Kommentiere nacheinander Render Routinen aus, oder alles andere was die Bilder beeinflusst. Lass dir Variablen ausgeben, kurz: die paar Zeilen finden die Probleme machen.
Wenn du die hast, schau ob du den Fehler findest, ansonsten poste nochmal die genaue Stelle und es werden sicher mehr Leute helfen.

Lg
ComNik
WIP: Vorx.Engine
 

da_poller

BeitragFr, Okt 02, 2009 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
aletes hat Folgendes geschrieben:
Sicher das du auch folgendes geschrieben hast:
BlitzBasic: [AUSKLAPPEN]
Print AvailVidMem()/1000


Im Zweifellsfall öffne einfach mal die .png Bilder mit einem Grafikprogramm deiner Wahl und speichere sie einfach nochmal als .png ab. Am besten nicht mit Paint, da kann es sein, dass es die Bilder einfach als .bmp speichert aber mit der Dateiendung .png Wink

Wenn es allerdings immernoch abstürtzt, hört sich das für mich eher nicht nach einem Problem im Code, sondern eher von BlitzBasic,deinem OS oder deinem Computer an Wink


sofern paint richtig bedienen kann kann man mit auch folgende formate speichern:
-monochrom bmp
-16 farben bmp
-256 farben bmp
-24 bit bmp
-sämtliche jpeg formate
-gif(keine animationen)
-tiff
-png

sry für ot.
 

Loewe95

BeitragFr, Okt 02, 2009 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch ist schon png

Wenn ich nur das zweite Bild lade funktioniert es auch.
Auflösung ändern scheint nichts zu bringen.

1280*768 wird von meiner Grafikkarte unterstüzt
Mhm, ja hab nichts gutes für die Signatur
 

DjDETE

BeitragSa, Okt 03, 2009 10:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Sicher das du nicht 1280*1024 meinst?
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

Loewe95

BeitragSa, Okt 03, 2009 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit nur einem Bild geht 1280*768 genauso gut
Mhm, ja hab nichts gutes für die Signatur

mpmxyz

BeitragSa, Okt 03, 2009 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es, wenn du uns die Bilder und Dateien zum Testen hinzugibst oder sagst, was alles für Bilder und Dateien gebraucht werden, damit es eigentlich laufen sollte.
Dann wird der Fehler wahrscheinlich schneller gefunden.

Außerdem solltest du für Sachen, wie diese am Besten Konstanten nutzen:
Code: [AUSKLAPPEN]
;;;;;Flagge;;;;;;
;1. Bild
;2. x
;3. y
;4. Frame
;;;;;;;;;;;;

Es könnte nämlich auch gut sein, dass du dabei einen falschen Wert angegeben hast und deshalb ein Fehler passiert. Die Konstanten machen den Code auch noch einmal übersichtlicher, da die Zahlen an sich nichts aussagen können, aber die Namen der Konstanten schon.

Übrigens: Arrays fangen bei 0 an.
Das heißt, dass du nach der Definition "Dim Array(10)" auf 11 Einträge mit den Indizes 0 bis 10 zugreifen kannst.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group