Mal wieder ImagesCollide und MAV...
Übersicht

![]() |
KlipBetreff: Mal wieder ImagesCollide und MAV... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten Tag,
ich programmiere jetzt seit einigen Tagen an meinem Projekt, bisher lief alles problemlos, aber nun fängt B3D schon wieder an zu mucken. Ich prüfe, ob der Spieler mit der Landebasis kollidiert. Ist das der Fall, so führe ich eine Levelwechselfunktion aus. Soweit, so gut. Manchmal klappt es, manchmal nicht. Wenn ich beispielsweise irgendwo eine Zeile neu einfüge, in der ich eine absolut unrelevante Variable verwende, tritt der Fehler auf. Nehme ich die neue Zeile dann per Kommentar wieder raus, kommt der Fehler immer noch... Dann irgendwann ist er auf einmal wieder weg, ich verzweifele langsam. Hier die Stelle, wo der Fehler auftritt: BlitzBasic: [AUSKLAPPEN]
Das Bild existiert, es wird VORHER gemalt, ohne Probleme. Wenn ich eine If Filetype = True-Abfrage einfüge, kommt die MAV trotzdem. Woran könnte es liegen? Das Spielerbild (player_image) wird nirgends aus dem Speicher entfernt. Ich bin für jegliche Hilfe sehr dankbar, alleine komme ich nicht mehr weiter. |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ImagesCollide kann bei bestimmten Treiberversionen auf NVidia-Karten zu unmotivierten MAVs führen(Auch im Debugmodus MAV anstatt Image does not exist).
Auf jeden Fall solltest Du den neuesten Treiber und die neueste B3D-Version benutzten. Ansonsten habe ich da noch eine Routine gemacht als Ersatz für ImageRectCollide(Ist in den meisten Fällen anstatt ImagesCollide auch ausreichend): Code: [AUSKLAPPEN] Function ImgRectCollide(image,xpos1, ypos1, xpos2, ypos2, width2, height2, mask=0) Local startx, starty, endx, endy, ix, iy Local width1 = ImageWidth(image) Local height1 = ImageHeight(image) xpos1 = xpos1 - ImageXHandle(image) ypos1 = ypos1 - ImageYHandle(image) startx = xpos2 - xpos1 starty = ypos2 - ypos1 endx = startx + width2 endy = starty + height2 If startx < 0 Then startx = 0 If starty < 0 Then starty = 0 If endx > width1 Then endx = width1 If endy > height1 Then endy = height1 endx = endx - 1 endy = endy - 1 If startx > endx Or starty > endy Then Return 0 LockBuffer ImageBuffer(image) For ix = startx To endx For iy = starty To endy If mask <> (ReadPixelFast(ix, iy, ImageBuffer(image)) And $00FFFFFF) Then UnlockBuffer ImageBuffer(image) Return 1 EndIf Next Next UnlockBuffer ImageBuffer(image) End Function Function ImgRectCollideFast(image,xpos1, ypos1, xpos2, ypos2, width2, height2, mask=0) Local startx, starty, endx, endy, ix, iy, x[3], y[3] Local width1 = ImageWidth(image) Local height1 = ImageHeight(image) xpos1 = xpos1 - ImageXHandle(image) ypos1 = ypos1 - ImageYHandle(image) startx = xpos2 - xpos1 starty = ypos2 - ypos1 endx = startx + width2 endy = starty + height2 If startx < 0 Then startx = 0 If starty < 0 Then starty = 0 If endx > width1 Then endx = width1 If endy > height1 Then endy = height1 endx = endx - 1 endy = endy - 1 If startx > endx Or starty > endy Then Return 0 x[0] = startx y[0] = starty x[1] = (startx + endx) Shr 1 y[1] = (starty + endy) Shr 1 x[2] = endx y[2] = endy LockBuffer ImageBuffer(image) For ix = 0 To 2 For iy = 0 To 2 If mask <> (ReadPixelFast(x[ix], y[iy], ImageBuffer(image)) And $00FFFFFF) Then UnlockBuffer ImageBuffer(image) Return 1 EndIf Next Next UnlockBuffer ImageBuffer(image) End Function Aus Geschwindigkeitsgründen werden bei der unteren Version nur 9 ausgewählte Punkte geprüft Kanten&Mitte. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tut mir leid, dass ich mich so lange nicht gemeldet habe. Hatte Klausurstress und bin auch die letzten Tage nicht zum Programmieren gekommen.
Deine Funktionen klappen einwandfrei, vielen Dank. Damit wäre das MAV-Problem ein für allemal gelöst. Auf so eine Idee wäre ich zwar vielleicht gekommen aber ich hätte es niemals umsetzen können, weswegen ich den Gedanken dann auch sofort wieder verworfen hätte. Wie auch immer. Dankeschön nochmal, ich schreibe dich in die Credits, wenn es denn fertig wird. Du hast mein Projekt gerettet ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group