for i in objects:
if self.y self.y_vel > HEIGHT self.ySize:
self.y_vel = 0
break
elif pygame.Rect.colliderect(self.rect, i.rect):
self.y_vel = 0
break
else:
self.y_vel = 0.05
這段代碼在最后一個 else 之前都可以正常作業,因為 for 回圈可能還沒有到達與之碰撞的物件,所以它給了它重力,所以我的問題是有沒有辦法做pygame.Rect.colliderect(self.rect, all(i).rect),但這不起作用我嘗試了 all()但我真的不知道這將如何作業任何幫助表示贊賞
uj5u.com熱心網友回復:
您不想使用allbut any。另外,您需要重構代碼,因為當物體與地面發生碰撞時,您不需要檢查是否與物體發生碰撞:
if self.y self.y_vel > HEIGHT self.ySize:
self.y_vel = 0
else:
if any(self.rect.colliderect(o.rect) for o in objects):
self.y_vel = 0
else:
self.y_vel = 0.05
但是,您不想讓物件稍微漂浮在障礙物上方。因此,當您檢測到碰撞時,您可能希望將物件緊貼障礙物:
self.rect.y = self.y self.y_vel
if self.rect.bottom > HEIGHT:
self.rect.bottom = HEIGHT
self.y = self.rect.y
self.y_vel = 0
else:
collided = False
for o in objects:
if self.rect.colliderect(o.rect):
collided = True
self.rect.bottom = o.rect.top
self.y = self.rect.y
self.y_vel = 0
break
if not collided:
self.y_vel = 0.05
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479542.html
