Problem mit Imagescollide

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Kevin_ble

Betreff: Problem mit Imagescollide

BeitragSa, Aug 12, 2006 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach,
heute zum ersten mal das ich mein code ins forum stellen muss weil ich den Fehler nicht finde....Ich hoffe ihr könnt mir helfen. Also hier der code

Code: [AUSKLAPPEN]

Graphics 800,600,32,1
Global tr1
Global tr2
Global tr3
Global tr4
Global tr5
Global see
Global cursor
Text 150,100,"Mapeditor wird geladen!"
Dim Map(999,2)
tr1 = LoadImage("tr.bmp")
tr2 = LoadImage("tr2.bmp")
tr3 = LoadImage("tr3.bmp")
tr4 = LoadImage("tr4.bmp")
tr5 = LoadImage("tr5.bmp")
see = LoadImage("see.bmp")
dornen= LoadAnimImage("dornen.bmp",64,64,0,9)
Global framed
MaskImage dornen,191,123,199
MaskImage see,255,255,255
cursor = LoadImage("cursor.png")
MaskImage cursor,255,255,255
SetBuffer BackBuffer()
Repeat
Cls
Color 255,255,255
Text 100,230,"Bitte wählen sie den Boden aus."
DrawImage tr1,100,250
DrawImage tr2,170,250
DrawImage tr3,240,250
DrawImage tr4,310,250
DrawImage tr5,380,250
Select auswahl
Case 1
Color 255,255,255
Rect 100,250,62,47,0
Case 2
Color 255,255,255
Rect 170,250,62,46,0
Case 3
Color 255,255,255
Rect 240,250,65,48,0
Case 4
Color 255,255,255
Rect 310,250,63,47,0
Case 5
Color 255,255,255
Rect 380,250,64,48,0
End Select

If ImagesCollide (cursor,MouseX(),MouseY(),0,tr1,100,250,0)
auswahl = 1
EndIf
If ImagesCollide (cursor,MouseX(),MouseY(),0,tr2,170,250,0)
auswahl = 2
EndIf
If ImagesCollide (cursor,MouseX(),MouseY(),0,tr3,240,250,0)
auswahl = 3
EndIf
If ImagesCollide (cursor,MouseX(),MouseY(),0,tr4,310,250,0)
auswahl = 4
EndIf
If ImagesCollide (cursor,MouseX(),MouseY(),0,tr5,380,250,0)
auswahl = 5
EndIf

If MouseHit(1) Then
Goto haupt
EndIf
DrawImage cursor,MouseX(),MouseY()
Flip
Until KeyHit(1)
End



.haupt
Repeat
SetBuffer BackBuffer()
;-
If auswahl = 1 Then
TileImage tr1
EndIf

If auswahl = 2 Then
TileImage tr2
EndIf

If auswahl = 3 Then
TileImage tr3
EndIf

If auswahl = 4 Then
TileImage tr4
EndIf

If auswahl = 5 Then
TileImage tr5
EndIf
;-


If lauswahl = 0 Then
Repeat
SetBuffer BackBuffer()
Color 0,0,0
Rect 0,0,800,600,1
Color 255,255,255
Text 400,10,"Bitte Landschaftsobjekt auswählen",1,0
DrawImage see,10,50
DrawImage dornen,380,50,framed

If ImagesCollide (cursor,MouseX(),MouseY(),0,see,10,50,0)    ; <- Diese Zeile wird beim Debugger makiert
Color 0,0,0
Rect 10,50,357,260,0
lauswahl = 1
EndIf

If ImagesCollide (cursor,MouseX(),MouseY(),0,dornen,380,50,framed) Then
Color 255,255,255
Rect 380,50,64,64,0
lauswahl = 2
EndIf
DrawImage cursor,MouseX(),MouseY()
Flip


;----Delete!______
If KeyHit(1) Then
End
EndIf
;-----------------


Until endlauswahl=1
EndIf





If x <> 0 And y <> 0 Then
DrawImage see,x,y
EndIf
DrawImage cursor,MouseX(),MouseY()
Flip
Until KeyHit(1)



Wie ihr sehen könnt habe ich die Stelle die beim debugger angezeigt wird makiert. Als Fehler Meldung kommt Memory acces violation. Für diesen Fehler bin ich immer folgende Punkte durchgegangen:

• Der Pfad stimmt nicht
• Der Pfad stimmt zwar aber in diesem teil des codes ist diese variable gleich 0
• Der Arbeitsspeicher wurde zugemüllt

Ich bin alle Punkte durchgegangen aber nichts trifft ein. den ersten und zweiten punkt kann man ausschliessen weil kurz vor der imagecollide ja
Drawimage see steht. Und der dritte Punkt ists auch nicht. Ich hab auch schon mal die etwas große dim raus geschmissen aber daran lags auch nicht. Ich weiß nicht mehr weiter seht ihr den fehler?
Achja ich hab den Teil des Codes einfach mall ganz raus geschnitten. Das Imagescollide danach funktioniert komischerweise also liegt es an der Variable cursor also auch nicht...
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image
 

Matthias

BeitragSa, Aug 12, 2006 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay.
Ich würde dir kerne helfen. Aber ich kann dein Prg nicht testen. Weil ich die bilder nicht habe kannst du sie mal im Archiv hochladen.
 

Kevin_ble

BeitragSa, Aug 12, 2006 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
du brauchst es ja nicht testen. Wenn du es startest sollst du lediglich einen hintergrund auswählen und wenn du das hast kommt die fehlermeldung...aber wenn du mir damit helfen kannst...
So hochgeladen ist eine zipdatei. Name: bilder-imagecollidefehler
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image
 

Matthias

Betreff: Geht doch alles

BeitragSa, Aug 12, 2006 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay habe dein Programm ausprobiert aber bei mir funcktioniert alles
Blitz3D auch mit debbuger.

Was soll das eigentilich für ein prg werden? Ein TileEditor?
 

Matthias

BeitragSa, Aug 12, 2006 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hach so jetz fält es mir ein die Demo Versionen können nur Bmp Bilder Laden. Corsor ist aber png >Umkonfertieren
 

Kevin_ble

BeitragSa, Aug 12, 2006 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
sry ich besitze die vollversion

sehr seltsam hab auch blitz3d und debugger!?
Soll ein mapeditor werden

das seltsame ist ja das das Imagecollide danach geht und ausser dass das image see mit dornen und die koordinaten anders sind ists ja das gleiche wie oben. Das gibts doch nicht warum geht das bei mir nicht....
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image
 

Matthias

BeitragSa, Aug 12, 2006 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool aber mach mal noch ne lupe das man gleich zeichnen kann und es sich anpasst Weist du wie ich das meine??
 

Kevin_ble

BeitragSa, Aug 12, 2006 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
ne kp was du meinst
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image
 

Matthias

BeitragSa, Aug 12, 2006 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Auserdem verändert sich der boden garnicht wenn ich den Auwähle.

Ich schreibe dir mal ein Beispiel Dauert so 10min
 

Matthias

BeitragSa, Aug 12, 2006 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist nur ein Beispiel aber vieleicht hilft es dir.

Code: [AUSKLAPPEN]

Dim TileMap(100,100)

Tiles=LoadAnimImage("Ani.Bmp",64,64,0,4)
SetBuffer BackBuffer()
Text 20,20,"Wähle den Boden":Color 255,255,0



Repeat:
For Z=0 To 3:X=100+128*Z:Y=100:DrawBlock Tiles,X,Y,Z
If MouseX()=>X And MouseX()<X+64 And MouseY()=>Y And MouseY()<Y+64 Then
Rect X,Y,64,64,0:BodenTile=Z



End If
Next
Flip:Until MouseHit(1)=1 Or KeyDown(1)=1

For ZX=0 To 100:For ZY=0 To 100
TileMap(ZX,ZY)=BodenTile
Next:Next


Repeat:

For ZX=0 To (GraphicsWidth()/64)
For ZY=0 To (GraphicsHeight()/64)
DrawBlock Tiles,ZX*64,ZY*64,TileMap(ZX,ZY)

Next:Next

For Z=0 To 3:X=64*Z:Y=GraphicsHeight()-64:DrawBlock Tiles,X,Y,Z
If MouseX()=>X And MouseX()<X+64 And MouseY()=>Y And MouseY()<Y+64 Then
Rect X,Y,64,64,0:If MouseHit(1)=1 Then TilAusw=Z
End If
Next
MX=MouseX()/64:MY=MouseY()/64
DrawBlock Tiles,MX*64,MY*64,TilAusw
If MouseHit(1)=1 Then TileMap(MX,MY)=TilAusw

Flip
Until KeyDown(1)
End


Ich habe mal die ganzen Bodenimages zusammengefast, und im Arschiv neu gespeichert
 

Kevin_ble

BeitragSa, Aug 12, 2006 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke. Werd mir den code mal genauer anschauen. Aber leider weiß ich immer noch nicht warum das bei mir nicht geht. Wenn ich das Minimap von dir starte (das ist ja die datei die du nur zurückgeschickt hast) gehts immer noch nicht. Der selbe fehler
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image
 

Matthias

BeitragSa, Aug 12, 2006 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja aber Minimap2 geht doch oder???
 

Kevin_ble

BeitragSa, Aug 12, 2006 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
jo minimap 2 geht einwandfrei^^
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image
 

Matthias

BeitragSa, Aug 12, 2006 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil du bei 200 Tiles nicht dauernt drawblock schreiben kannst
das geht voll auf die schnelligkeit.

Mfg Matthias

garret

BeitragSa, Aug 12, 2006 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal ein paar Hinweise zu deinem Code Kevin_ble:

- Warum drei Mal SetBuffer Backbuffer()? Einmal am Anfang reicht.

- Mehrere If-Bedingungen kannst du zu Select-Case zusammenfassen, hast du ja schon ein Mal gemacht:
Code: [AUSKLAPPEN]

If auswahl = 1 Then
TileImage tr1
EndIf

If auswahl = 2 Then
TileImage tr2
EndIf

If auswahl = 3 Then
TileImage tr3
EndIf

If auswahl = 4 Then
TileImage tr4
EndIf

If auswahl = 5 Then
TileImage tr5
EndIf


Außerdem musst du Bedingungen mit nur einer Anweisung nicht mit EndIf umklammern. Da reicht: If (Bedingung=True) Then (Anweisung)

- Gleiche Bilder wie tr1,tr2 usw. am Besten zu einem Bild zusammenfassen und mit LoadAnimImage() laden. Das erleichtert auch das Setzen von Tiles, da du nur eine Variable brauchst, z.B. aktuell. Das Teilbild aktuell wird dann angezeigt.

DrawImage tiles(x, y, aktuell)


- Und Leute: Schaut euch eure Beiträge wenigstens noch mal kurz an, bevor ihr sie abschickt... Ich kenne zum Beispiel kein Arschiv Rolling Eyes

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)
 

Kevin_ble

BeitragDo, Aug 17, 2006 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
da mir letztlich niemand helfen konnte habe ich nach langem probieren den Fehler behoben. Wie? Ich habe die selben images mit der selben variable vor dem Imagecollide nochmal geladen. Warum es jetz geht ist mir unerklärlich ich denke es ist irgendein Fehler in Blitz. Für alle die sich dafür Interessieren hier der verbesserte code: (Er hat keine richtige aufgabe man kann nur sehen das es jetz funktioniert)

Code: [AUSKLAPPEN]

Graphics 800,600,32,1
Global tr1
Global tr2
Global tr3
Global tr4
Global tr5
Global see
Global cursor
Text 150,100,"Mapeditor wird geladen!"
Dim Map(999,2)
tr1 = LoadImage("tr.bmp")
tr2 = LoadImage("tr2.bmp")
tr3 = LoadImage("tr3.bmp")
tr4 = LoadImage("tr4.bmp")
tr5 = LoadImage("tr5.bmp")
see = LoadImage("see.bmp")
dornen= LoadAnimImage("dornen.bmp",64,64,0,9)
Global framed
MaskImage dornen,191,123,199
MaskImage see,255,255,255
cursor = LoadImage("cursor.png")
MaskImage cursor,255,255,255
SetBuffer BackBuffer()
Repeat
Cls
Color 255,255,255
Text 100,230,"Bitte wählen sie den Boden aus."
DrawImage tr1,100,250
DrawImage tr2,170,250
DrawImage tr3,240,250
DrawImage tr4,310,250
DrawImage tr5,380,250
Select auswahl
Case 1
Color 255,255,255
Rect 100,250,62,47,0
Case 2
Color 255,255,255
Rect 170,250,62,46,0
Case 3
Color 255,255,255
Rect 240,250,65,48,0
Case 4
Color 255,255,255
Rect 310,250,63,47,0
Case 5
Color 255,255,255
Rect 380,250,64,48,0
End Select

If ImagesCollide (cursor,MouseX(),MouseY(),0,tr1,100,250,0)
auswahl = 1
EndIf
If ImagesCollide (cursor,MouseX(),MouseY(),0,tr2,170,250,0)
auswahl = 2
EndIf
If ImagesCollide (cursor,MouseX(),MouseY(),0,tr3,240,250,0)
auswahl = 3
EndIf
If ImagesCollide (cursor,MouseX(),MouseY(),0,tr4,310,250,0)
auswahl = 4
EndIf
If ImagesCollide (cursor,MouseX(),MouseY(),0,tr5,380,250,0)
auswahl = 5
EndIf

If MouseHit(1) Then
Goto haupt
EndIf
DrawImage cursor,MouseX(),MouseY()
Flip
Until KeyHit(1)
End



.haupt
Repeat
;-
If auswahl = 1 Then 
TileImage tr1
EndIf

If auswahl = 2 Then
TileImage tr2
EndIf

If auswahl = 3 Then
TileImage tr3
EndIf

If auswahl = 4 Then
TileImage tr4
EndIf

If auswahl = 5 Then
TileImage tr5
EndIf
;-


If lauswahl = 0 Then
Repeat
Color 0,0,0
Rect 0,0,800,600,1
Color 255,255,255
Text 400,10,"Bitte Landschaftsobjekt auswählen",1,0
DrawImage see,10,50
DrawImage dornen,380,50,framed


If ImagesCollide (cursor,MouseX(),MouseY(),0,dornen,380,50,framed) Then
Text 10,10,framed
Color 255,255,255
Rect 380,50,64,64,0
lauswahl = 2
EndIf
DrawImage cursor,MouseX(),MouseY()

; durch diesen Abschnitt funktioniert der Code nun
If sb = 0 Then
sb=1
see = LoadImage("see.bmp")
MaskImage see,255,255,255
cursor = LoadImage("cursor.png")
MaskImage cursor,255,255,255
EndIf
;----------------------------------------------------------------

If ImagesCollide (cursor,MouseX(),MouseY(),0,see,10,50,0)    ; <- Diese Zeile wird beim Debugger makiert
Color 255,255,255
Rect 10,50,196,216,0
lauswahl = 1
EndIf

If KeyHit(205) Then
Select lauswahl
Case 2
framed=framed+1
If framed = 9 Then framed=0
End Select
EndIf

If KeyHit(203) Then
Select lauswahl
Case 2
framed=framed-1
If framed = -1 Then framed=8
End Select
EndIf


Flip


;----!Delete!______
If KeyHit(1) Then
End
EndIf
;------------------


Until endlauswahl=1
EndIf





If x <> 0 And y <> 0 Then
DrawImage see,x,y
EndIf
DrawImage cursor,MouseX(),MouseY()
Flip
Until KeyHit(1)
Jeder Tag ohne meinen Pc ist ein verlorener Tag!

Aktuelles Projekt: Universe War 2
Suche noch Hilfe!
Für mehr Infos http://www.kfgames.2page.de/


User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group