五、小白如何用Pygame制作一款跑酷类游戏(主角跳跃和滑行动作的实现)

发布于:2025-04-20 ⋅ 阅读:(84) ⋅ 点赞:(0)

五、小白如何用Pygame制作一款跑酷类游戏(主角跳跃和滑行动作的实现)



前言

本篇主要实现通过向下键和向上键的释放让主角能够跳跃和滑行


一、添加主角的跳跃和滑行图片素材

在这里插入图片描述
图片放在了 主角跳跃和滑行素材

二、代码部分

1.在走路状态时按下按键发生状态变化

 #步行状态
            if self.state==0:
                if args[0] % 6 == 0:
                    i = int(args[0] / 6)
                    self.image=self.walk[i % len(self.walk)]
                    self.rect.top = 400
                    # 实现按下向上键实现跳跃状态
                    #实现按下向下键实现滑行状态
                    if keys[pygame.K_UP]:
                        self.state = 2
                        self.flag = args[0]
                    elif keys[pygame.K_DOWN]:
                        self.state=3
                        self.flag = args[0]

2.主角跳跃部分

设置为状态2

在跳跃部分为了更加生动并且可以越过障碍物进行了四个阶段的操作
第一个阶段上升的像素大
第二个阶段上升的像素小
第三个阶段下降的像素小
第四个阶段下降的像素大

 elif self.state==2:
                #在跳跃部分为了更加生动并且可以越过障碍物进行了四个阶段的操作
                #第一个阶段上升的像素大
                #第二个阶段上升的像素小
                #第三个阶段下降的像素小
                #第四个阶段下降的像素大
                if args[0] - self.flag <=9:
                  if args[0] % 9 == 0:
                    i = int(args[0] / 9)
                    self.image = self.jump[i % len(self.jump)]
                    # self.rect.left += 20
                    self.rect.top -= 120
                elif args[0] - self.flag >9 and args[0] - self.flag <=36:
                  if args[0] % 9 == 0:
                    i = int(args[0] / 9)
                    self.image = self.jump[i % len(self.jump)]
                    # self.rect.left += 20
                    self.rect.top -= 40
                elif args[0] - self.flag >36 and args[0] - self.flag <=63:
                    if args[0] % 9 == 0:
                        i = int(args[0] /9)
                        self.image = self.jump[i % len(self.jump)]
                        # self.rect.left += 20
                        self.rect.top += 40
                elif args[0] - self.flag >63 and args[0] - self.flag <=72:
                    if args[0] % 9 == 0:
                        i = int(args[0] /9)
                        self.image = self.jump[i % len(self.jump)]
                        # self.rect.left += 20
                        self.rect.top += 120
                if args[0] - self.flag >72:
                    self.state = 0

3.主角滑行部分

设置为状态3

            elif self.state==3:
                if args[0] % 10 == 0:
                    i = int(args[0] /10)
                    self.image = self.down[i % len(self.down)]
                    self.rect.top = 480
                    # self.rect.left += 35
                if args[0] - self.flag >= 75:
                    self.state = 0

4.为了使得在跑步阶段也能够切换为滑行和跳跃

            elif self.state==1:
                #设置一定的动作时长 超出之后变为步行态
                if args[0]-self.flag>=12:
                    self.state=0
                if args[0] % 6 == 0:
                    i = int(args[0] / 8)
                    self.image=self.run[i % len(self.run)]
                    self.rect.top = 430
                    #奔跑状态时的状态切换
                    if keys[pygame.K_UP]:
                        self.state = 2
                        self.flag = args[0]
                    elif keys[pygame.K_DOWN]:
                        self.state=3
                        self.flag = args[0]
                    elif keys[pygame.K_RIGHT]:
                        self.state = 1
                        self.flag = args[0]

5.总结上述的完整代码

import pygame

class Myself(pygame.sprite.Sprite):
    def __init__(self):
        super(Myself, self).__init__()
        self.image = pygame.image.load('material/image/myself/walk/1.PNG').convert_alpha()
        self.walk = [pygame.image.load('material/image/myself/walk/{:d}.PNG'.format(i)).convert_alpha() for i in
                       range(1, 8)]
        self.run = [pygame.image.load('material/image/myself/run/{:d}.PNG'.format(i)).convert_alpha() for i in
                     range(1, 6)]
        self.jump = [pygame.image.load('material/image/myself/jump/{:d}.PNG'.format(i)).convert_alpha() for i in
                    range(1, 7)]
        self.down = [pygame.image.load('material/image/myself/down/{:d}.PNG'.format(i)).convert_alpha() for i in
                    range(1, 7)]

        self.rect = self.walk[0].get_rect()
        self.rect.top=400
        self.rect.left=200
        self.state = 0  # 初始状态是步行态
        self.flag = 0 #设置标志位 记录按键按下的时钟



    def update(self, *args):
        #将是否暂停传递
        if args[2]:
                self.image=pygame.image.load('material/image/myself/walk/1.PNG').convert_alpha()
        else:
            #人物状态传递
            keys = args[1]
            #这里选择按下右箭头 是奔跑状态
            if keys[pygame.K_RIGHT]:
                self.state=1
                self.flag=args[0]
            #步行状态
            if self.state==0:
                if args[0] % 6 == 0:
                    i = int(args[0] / 6)
                    self.image=self.walk[i % len(self.walk)]
                    self.rect.top = 400
                    # 实现按下向上键实现跳跃状态
                    #实现按下向下键实现滑行状态
                    if keys[pygame.K_UP]:
                        self.state = 2
                        self.flag = args[0]
                    elif keys[pygame.K_DOWN]:
                        self.state=3
                        self.flag = args[0]

            #奔跑状态
            elif self.state==1:
                #设置一定的动作时长 超出之后变为步行态
                if args[0]-self.flag>=12:
                    self.state=0
                if args[0] % 6 == 0:
                    i = int(args[0] / 8)
                    self.image=self.run[i % len(self.run)]
                    self.rect.top = 430
                    #奔跑状态时的状态切换
                    if keys[pygame.K_UP]:
                        self.state = 2
                        self.flag = args[0]
                    elif keys[pygame.K_DOWN]:
                        self.state=3
                        self.flag = args[0]
                    elif keys[pygame.K_RIGHT]:
                        self.state = 1
                        self.flag = args[0]
            elif self.state==2:
                #在跳跃部分为了更加生动并且可以越过障碍物进行了四个阶段的操作
                #第一个阶段上升的像素大
                #第二个阶段上升的像素小
                #第三个阶段下降的像素小
                #第四个阶段下降的像素大
                if args[0] - self.flag <=9:
                  if args[0] % 9 == 0:
                    i = int(args[0] / 9)
                    self.image = self.jump[i % len(self.jump)]
                    # self.rect.left += 20
                    self.rect.top -= 120
                elif args[0] - self.flag >9 and args[0] - self.flag <=36:
                  if args[0] % 9 == 0:
                    i = int(args[0] / 9)
                    self.image = self.jump[i % len(self.jump)]
                    # self.rect.left += 20
                    self.rect.top -= 40
                elif args[0] - self.flag >36 and args[0] - self.flag <=63:
                    if args[0] % 9 == 0:
                        i = int(args[0] /9)
                        self.image = self.jump[i % len(self.jump)]
                        # self.rect.left += 20
                        self.rect.top += 40
                elif args[0] - self.flag >63 and args[0] - self.flag <=72:
                    if args[0] % 9 == 0:
                        i = int(args[0] /9)
                        self.image = self.jump[i % len(self.jump)]
                        # self.rect.left += 20
                        self.rect.top += 120
                if args[0] - self.flag >72:
                    self.state = 0

            elif self.state==3:
                if args[0] % 10 == 0:
                    i = int(args[0] /10)
                    self.image = self.down[i % len(self.down)]
                    self.rect.top = 480
                    # self.rect.left += 35
                if args[0] - self.flag >= 75:
                    self.state = 0

三、实现效果

按向上键实现跳跃
在这里插入图片描述

在这里插入图片描述
按向下键实现滑行
在这里插入图片描述