Rect.collidepoint ohne ränder

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gast

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?
BlackJack

Was heisst Fehler? Welche Ränder? Wenn das Rect-Objekt ein Pixel zu gross ist, dann mach es halt kleiner.
Gast

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

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

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...
BlackJack

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.
Gast

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
BlackJack

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.
Antworten