1. 程式人生 > >pygame:我tm終於不卡牆了

pygame:我tm終於不卡牆了

pygame小白
註釋掉的是以前的,碰撞後在該方向上後退。但如果兩個方向鍵一起按,會從奇怪的地方飛出去
改進後在移動前判斷一次,移動後判斷一次
稍微提高了碰撞體驗,但還是會在莫名其妙的地方卡住。。。

key_pressed = pygame.key.get_pressed()

if key_pressed[K_RIGHT]:
# main_chara.go_right()
# """發生碰撞,該方向上退兩個畫素"""
# while collide_test(main_chara, c_map):
# main_chara.rect.right -= 2
if collide_test(main_chara, c_map):
main_chara.rect.right -= 2
else:
main_chara.go_right()
if collide_test(main_chara, c_map):
main_chara.rect.right -= 2
if key_pressed[K_UP]:
# main_chara.go_up()
# while collide_test(main_chara, c_map):
# main_chara.rect.top += 2
if collide_test(main_chara, c_map):
main_chara.rect.top += 2
else:
main_chara.go_up()
if collide_test(main_chara, c_map):
main_chara.rect.top += 2
if key_pressed[K_LEFT]:
# main_chara.go_left()
# while collide_test(main_chara, c_map):
# main_chara.rect.left += 2
if collide_test(main_chara, c_map):
main_chara.rect.left += 2
else:
main_chara.go_left()
if collide_test(main_chara, c_map):
main_chara.rect.left += 2
if key_pressed[K_DOWN]:
# main_chara.go_down()
# while collide_test(main_chara, c_map):
# main_chara.rect.bottom -= 2
if collide_test(main_chara, c_map):
main_chara.rect.bottom -= 2
else:
main_chara.go_down()
if collide_test(main_chara, c_map):
main_chara.rect.bottom -= 2

###class character
def go_up(self):
self.moving = True
## 確定方向
self.direction = 3
self.speed = [0, -2]
## 改變位置
self.rect = self.rect.move(self.speed)

def go_down(self):
self.moving = True
self.direction = 0
self.speed = [0, 2]
self.rect = self.rect.move(self.speed)

def go_left(self):
self.moving = True
self.direction = 1
self.speed = [-2, 0]
self.rect = self.rect.move(self.speed)

def go_right(self):
self.moving = True
self.direction = 2
self.speed = [2, 0]
self.rect = self.rect.move(self.speed)