Bases: pygame.sprite.Sprite, Collidable
Source code in Tairitsu/Player.py
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 | def __init__(self, x, y):
# Must initialize everything one by one here
pygame.sprite.Sprite.__init__(self)
Collidable.__init__(self)
self.images = [pygame.transform.scale(pygame.image.load(img),
(PlayerSettings.playerWidth, PlayerSettings.playerHeight)) for img in GamePath.player]
self.index = 0
self.image = self.images[self.index]
self.rect = self.image.get_rect()
self.rect.topleft = (x, y)
self.speed = PlayerSettings.playerSpeed
self.talking = False
self.HP = PlayerSettings.playerHP
self.attack = PlayerSettings.playerAttack
self.defence = PlayerSettings.playerDefence
self.coin = PlayerSettings.playercoin
self.dx = 0
self.dy = 0
self.fixed = False
|
Attributes
HP
instance-attribute
HP = PlayerSettings.playerHP
attack
instance-attribute
attack = PlayerSettings.playerAttack
coin
instance-attribute
coin = PlayerSettings.playercoin
defence
instance-attribute
defence = PlayerSettings.playerDefence
image
instance-attribute
image = self.images[self.index]
images
instance-attribute
images = [pygame.transform.scale(pygame.image.load(img), (PlayerSettings.playerWidth, PlayerSettings.playerHeight)) for img in GamePath.player]
rect
instance-attribute
rect = self.image.get_rect()
speed
instance-attribute
speed = PlayerSettings.playerSpeed
talking
instance-attribute
Functions
attr_update
attr_update(addCoins=0, addHP=0, addAttack=0, addDefence=0)
Source code in Tairitsu/Player.py
33
34
35
36
37
38
39
40
41 | def attr_update(self, addCoins = 0, addHP = 0, addAttack = 0, addDefence = 0):
if self.coin + addCoins < 0:
return
if self.HP + addHP < 0:
return
self.coin += addCoins
self.HP += addHP
self.attack += addAttack
self.defence += addDefence
|
draw
Source code in Tairitsu/Player.py
| def draw(self, window, dx=0, dy=0):
window.blit(self.image, self.rect)
|
fix_to_middle
Source code in Tairitsu/Player.py
| def fix_to_middle(self, dx, dy):
self.rect.x -= dx
self.rect.y -= dy
|
reset_pos
reset_pos(x=WindowSettings.width // 2, y=WindowSettings.height // 2)
Source code in Tairitsu/Player.py
| def reset_pos(self, x=WindowSettings.width // 2, y=WindowSettings.height // 2):
##### Your Code Here ↓ #####
pass
|
undo_move
Source code in Tairitsu/Player.py
| def undo_move(self):
self.rect = self.rect.move(-self.dx, -self.dy)
|
update
Source code in Tairitsu/Player.py
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 | def update(self, keys, scene):
if self.talking or self.fixed:
# 如果不移动,显示静态图像
self.index = 0
self.image = self.images[self.index]
else:
# Update Player Position
dx = 0
dy = 0
if keys[pygame.K_w] and self.rect.top > 0 :
dy -= self.speed
if keys[pygame.K_s] and self.rect.bottom < WindowSettings.height:
dy += self.speed
if keys[pygame.K_a] and self.rect.left > 0:
dx -= self.speed
if keys[pygame.K_d] and self.rect.right < WindowSettings.width:
dx += self.speed
self.dx = dx
self.dy = dy
self.rect = self.rect.move(dx, dy)
if self.fixed: self.undo_move()
# 更新角色动画
if any(keys):
self.index = (self.index + 1) % len(self.images)
self.image = self.images[self.index]
|