|
|
|
@ -28,6 +28,7 @@ class Player(pygame.sprite.Sprite):
|
|
|
|
|
self.face_right = True
|
|
|
|
|
self.dead = False
|
|
|
|
|
self.big = False
|
|
|
|
|
self.can_jump = True
|
|
|
|
|
|
|
|
|
|
def setup_velocities(self):
|
|
|
|
|
speed = self.player_data['speed'] # 读出速度数据
|
|
|
|
@ -37,10 +38,12 @@ class Player(pygame.sprite.Sprite):
|
|
|
|
|
self.max_walk_vel = speed['max_walk_speed'] # 记录速度属性 v速度 a加速 t转身
|
|
|
|
|
self.max_run_vel = speed['max_run_speed']
|
|
|
|
|
self.max_y_vel = speed['max_y_velocity']
|
|
|
|
|
self.jump_vel = speed['jump_velocity']
|
|
|
|
|
self.walk_accel = speed['walk_accel']
|
|
|
|
|
self.run_accel = speed['run_accel']
|
|
|
|
|
self.turn_accel = speed['turn_accel']
|
|
|
|
|
self.gravity = C.GRAVITY
|
|
|
|
|
self.anti_gravity = C.ANTI_GRAVITY
|
|
|
|
|
|
|
|
|
|
self.max_y_vel = self.max_walk_vel
|
|
|
|
|
self.x_accel = self.walk_accel
|
|
|
|
@ -100,14 +103,22 @@ class Player(pygame.sprite.Sprite):
|
|
|
|
|
self.image = self.frames[self.frame_index]
|
|
|
|
|
self.rect = self.image.get_rect()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update(self,keys):
|
|
|
|
|
self.current_time = pygame.time.get_ticks()
|
|
|
|
|
self.handle_states(keys)
|
|
|
|
|
|
|
|
|
|
def handle_states(self,keys): # 状态检测
|
|
|
|
|
|
|
|
|
|
self.can_jump_or_not(keys)
|
|
|
|
|
|
|
|
|
|
if self.state == 'stand':
|
|
|
|
|
self.stand(keys)
|
|
|
|
|
elif self.state == 'walk':
|
|
|
|
|
self.walk(keys)
|
|
|
|
|
elif self.state == 'jump':
|
|
|
|
|
self.jump(keys)
|
|
|
|
|
elif self.state == 'fall':
|
|
|
|
|
self.fall(keys)
|
|
|
|
|
elif self.state == 'basketball':
|
|
|
|
|
self.play_basketball(keys)
|
|
|
|
|
|
|
|
|
@ -116,6 +127,12 @@ class Player(pygame.sprite.Sprite):
|
|
|
|
|
else:
|
|
|
|
|
self.image = self.left_frames[self.frame_index]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def can_jump_or_not(self,keys):
|
|
|
|
|
if not keys[pygame.K_SPACE]:
|
|
|
|
|
self.can_jump = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def stand(self,keys):
|
|
|
|
|
self.frame_index = 0
|
|
|
|
|
self.x_vel = 0
|
|
|
|
@ -126,6 +143,9 @@ class Player(pygame.sprite.Sprite):
|
|
|
|
|
if keys[pygame.K_LEFT]:
|
|
|
|
|
self.face_right = False
|
|
|
|
|
self.state = 'walk'
|
|
|
|
|
if keys[pygame.K_SPACE] and self.can_jump:
|
|
|
|
|
self.state = 'jump'
|
|
|
|
|
self.y_vel = self.jump_vel
|
|
|
|
|
|
|
|
|
|
def walk(self,keys):
|
|
|
|
|
self.current_time = pygame.time.get_ticks()
|
|
|
|
@ -136,6 +156,11 @@ class Player(pygame.sprite.Sprite):
|
|
|
|
|
|
|
|
|
|
self.max_x_vel = self.max_walk_vel
|
|
|
|
|
self.x_accel = self.walk_accel
|
|
|
|
|
|
|
|
|
|
if keys[pygame.K_SPACE] and self.can_jump:
|
|
|
|
|
self.state = 'jump'
|
|
|
|
|
self.y_vel = self.jump_vel
|
|
|
|
|
|
|
|
|
|
if self.current_time - self.walking_timer > self.calc_frame_duration():
|
|
|
|
|
if self.frame_index < 3:
|
|
|
|
|
self.frame_index += 1
|
|
|
|
@ -167,9 +192,37 @@ class Player(pygame.sprite.Sprite):
|
|
|
|
|
self.state = 'stand'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def jump(self,keys):
|
|
|
|
|
pass
|
|
|
|
|
self.frame_index = 4
|
|
|
|
|
self.y_vel += self.anti_gravity
|
|
|
|
|
self.can_jump = False
|
|
|
|
|
|
|
|
|
|
if self.y_vel >= 0:
|
|
|
|
|
self.state = 'fall'
|
|
|
|
|
|
|
|
|
|
if keys[pygame.K_RIGHT]:
|
|
|
|
|
self.x_vel = self.calc_vel(self.x_vel,self.x_accel,self.max_x_vel,True)
|
|
|
|
|
elif keys[pygame.K_LEFT]:
|
|
|
|
|
self.x_vel = self.calc_vel(self.x_vel, self.x_accel, self.max_x_vel, False)
|
|
|
|
|
|
|
|
|
|
if not keys[pygame.K_SPACE]:
|
|
|
|
|
self.state = 'fall'
|
|
|
|
|
|
|
|
|
|
def fall(self,keys):
|
|
|
|
|
self.y_vel = self.calc_vel(self.y_vel,self.gravity,self.max_y_vel)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# TODO WORKAROUND
|
|
|
|
|
if self.rect.bottom > C.GROUND_HEIGHT:
|
|
|
|
|
self.rect.bottom = C.GROUND_HEIGHT
|
|
|
|
|
self.y_vel = 0
|
|
|
|
|
self.state = 'walk'
|
|
|
|
|
|
|
|
|
|
if keys[pygame.K_RIGHT]:
|
|
|
|
|
self.x_vel = self.calc_vel(self.x_vel,self.x_accel,self.max_x_vel,True)
|
|
|
|
|
elif keys[pygame.K_LEFT]:
|
|
|
|
|
self.x_vel = self.calc_vel(self.x_vel, self.x_accel, self.max_x_vel, False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def play_basketball(self,keys):
|
|
|
|
|
pass
|
|
|
|
|