2017-07-31 154 views
0

這是我的碰撞代碼。我該如何解決我的碰撞?

def collide_with_walls(self, dir): 
      if dir == 'x': 
       hits = pg.sprite.spritecollide(self, self.game.walls, False) 
       if hits: 
        if self.vel.x > 0: 
         self.pos.x = hits[0].rect.left - self.rect.width 
        if self.vel.x < 0: 
         self.pos.x = hits[0].rect.right 
        self.vel.x = 0 
        self.rect.x = self.pos.x 
      if dir == 'y': 
       hits = pg.sprite.spritecollide(self, self.game.walls, False) 
       if hits: 
        if self.vel.y > 0: 
         self.pos.y = hits[0].rect.top 
        if self.vel.y < 0: 
         self.pos.y = hits[0].rect.bottom 
        self.vel.y = 0 
        self.rect.y = self.pos.y 

一切運作良好,但它允許我的球員精靈走部分取決於我從進入側的壁的內部和外部。

Can walk partially inside wall Can't walk any further

圖像1:可以部分地走入壁。 圖片2:不能再走了。

回答

2

你或許應該移動你的性格的精靈有點向右,就像你正X方向做:

​​

,你甚至可以只改變偏移,如果你想要的字符精靈的一半要能移動靠近牆壁:

if self.vel.x > 0: 
    self.pos.x = hits[0].rect.left - self.rect.width//2 
if self.vel.x < 0: 
    self.pos.x = hits[0].rect.right + self.rect.width//2 
1

從外觀上來看,似乎有精靈命中盒的定位和精靈圖像之間的錯位。

然而,如果不知道精靈對象和spritecollision函數的內部結構,爲什麼發生這種情況的確切原因要困難得多。

嘗試在任一方向上將您的計算偏移半個矩形以查看是否有幫助。