ich habe ein moorhuhn remake geschrieben, in dem ich
pos.collidepoint(pygame.mouse.get_pos())
benutze, jedoch kommt manchmal ein fehler, ich denke das lässt sich beheben wenn ich dieses collidepoint ohne ränder hätte, also wie mach ich dass collidepoint die ränder nicht als in dem rect sieht?
Rect.collidepoint ohne ränder
Was heisst Fehler? Welche Ränder? Wenn das Rect-Objekt ein Pixel zu gross ist, dann mach es halt kleiner.
Traceback (most recent call last):
File "D:\Dokumente und Einstellungen\ich\Desktop\Save the Animals\projekt neu2.2 basteln.py", line 381, in ?
main()
File "D:\Dokumente und Einstellungen\ich\Desktop\Save the Animals\projekt neu2.2 basteln.py", line 332, in main
SavetheAnimals(schwer)
File "D:\Dokumente und Einstellungen\ich\Desktop\Save the Animals\projekt neu2.2 basteln.py", line 174, in SavetheAnimals
if hitboxliste[z].name.get_at(((mausposx - hitboxposx),(mausposy - hitboxposy))) == (0, 0, 255, 255):
IndexError: pixel index out of range
das ist mein fehler, jedoch glaube ich, ich kann das umgehen wenn ich
benutze.
kann mir vielleicht einer bestätigen ob man das try auf diese art benutzen kann? bisher ist der bug nicht wieder aufgetreten, aber es ist auch recht selten dass man den rand eines rects trifft...
File "D:\Dokumente und Einstellungen\ich\Desktop\Save the Animals\projekt neu2.2 basteln.py", line 381, in ?
main()
File "D:\Dokumente und Einstellungen\ich\Desktop\Save the Animals\projekt neu2.2 basteln.py", line 332, in main
SavetheAnimals(schwer)
File "D:\Dokumente und Einstellungen\ich\Desktop\Save the Animals\projekt neu2.2 basteln.py", line 174, in SavetheAnimals
if hitboxliste[z].name.get_at(((mausposx - hitboxposx),(mausposy - hitboxposy))) == (0, 0, 255, 255):
IndexError: pixel index out of range
das ist mein fehler, jedoch glaube ich, ich kann das umgehen wenn ich
Code: Alles auswählen
if hitboxliste[z].pos.collidepoint(pygame.mouse.get_pos()) and hitboxliste[z].tot == 0:
hitboxposx, hitboxposy = hitboxliste[z].pos.topleft
try:
if hitboxliste[z].name.get_at(((mausposx - hitboxposx),(mausposy - hitboxposy))) != (0, 0, 255, 255):
...
except:
pass
kann mir vielleicht einer bestätigen ob man das try auf diese art benutzen kann? bisher ist der bug nicht wieder aufgetreten, aber es ist auch recht selten dass man den rand eines rects trifft...
Wo kommt das `Rect` `pos` überhaupt her? Warum nimmst Du nicht das `Rect` vom Bild selbst: `name.get_rect()`. Da sollte der berechnete Punkt auf jeden Fall drin liegen.
Die Ausnahme kann man so benutzen, sollte man aber auf gar keinen Fall. Das ``except`` "verschluckt" jede Ausnahme in dem Block. Du solltest den Fehler lieber beheben statt ihn zu ignorieren.
Die Ausnahme kann man so benutzen, sollte man aber auf gar keinen Fall. Das ``except`` "verschluckt" jede Ausnahme in dem Block. Du solltest den Fehler lieber beheben statt ihn zu ignorieren.
also:
hitboxliste[] enthält bilder, hitboxliste[z].pos ist ein rect mit der größe eines der bilder aus der hitboxliste[], und sobald man den rand von diesem rect trifft, also von hitboxliste[z].pos, dann kommt der bereits genannte fehler
ich würd den fehler schon gerne beheben, weiß aber nicht wie
wenn das program einfach weiterläuft, dann ist mir das auch recht, ist immerhin nur die kollisionabfrage, und wenn von der nix kommt, also entweder ganz daneben getroffen oder den rand des rects, dann macht der normal weiter, und zieht einfach nur die munition ab
hitboxliste[] enthält bilder, hitboxliste[z].pos ist ein rect mit der größe eines der bilder aus der hitboxliste[], und sobald man den rand von diesem rect trifft, also von hitboxliste[z].pos, dann kommt der bereits genannte fehler
ich würd den fehler schon gerne beheben, weiß aber nicht wie
wenn das program einfach weiterläuft, dann ist mir das auch recht, ist immerhin nur die kollisionabfrage, und wenn von der nix kommt, also entweder ganz daneben getroffen oder den rand des rects, dann macht der normal weiter, und zieht einfach nur die munition ab
So wirklich erklärt warum Du das `hitboxliste[z].pos` Rechteck nimmst anstelle des Rechtecks, das jedes Bild von Haus aus mitbringt hat das jetzt aber nicht.
Versuch mal zum Testen gegen das Rechteck und zum Berechnen des Punktes im Bild die gleichen Mauspositionen zu benutzen.
Versuch mal zum Testen gegen das Rechteck und zum Berechnen des Punktes im Bild die gleichen Mauspositionen zu benutzen.