Pygame基础教学

1.创建一个pygame窗口

设置好窗口之后渲染到频幕上

import pygame #导入pygame
import sys #用sys.exit()退出得更彻底

pygame.init() #初始化pygame

width = 600
height = 500
size = width, height #设置尺寸

screen = pygame.display.set_mode((size)) #设置窗口大小
pygame.display.set_caption('Hello World') #设置标题

while True: #设置一个循环
    for event in pygame.event.get(): #事件检测
        if event.type == pygame.QUIT: #如果检测到按下退出则执行下一条
            pygame.quit() #退出窗口
            sys.exit() #退出整个程序

    screen.fill('white') #将窗口设为白色
    pygame.display.flip() #刷新窗口

运行以上代码,我们就能得到一个白色的pygame窗口

如下:

2.添加角色

1.画出角色

使用Class添加一个Player类,再把玩家渲染到画布上

import pygame
import sys

pygame.init()

screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption('Hello World')


class Player():
    def __init__(self):
        self.surface = pygame.surface.Surface((50, 50)) #创建玩家的外观
        self.surface.fill('blue') #设置Player的颜色
        self.rect = self.surface.get_rect() #玩家位置

    def draw(self):
        screen.blit(self.surface, self.rect)

player = Player() #实例化玩家类
while True: #设置一个循环
    for event in pygame.event.get(): #事件检测
        if event.type == pygame.QUIT: #如果检测到按下退出则执行下一条
            pygame.quit() #退出窗口
            sys.exit() #退出整个程序

    screen.fill('white') #将窗口设为白色
    player.draw() #调用player类的draw函数
    pygame.display.flip() #刷新窗口

效果如下:

这时候,就可以看到我们创建的Player在默认出生点(0, 0)

如果想修改玩家的出生点,可以这样做

class Player():
    def __init__(self):
        self.surface = pygame.surface.Surface((50, 50)) #创建玩家的外观
        self.surface.fill('blue') #设置Player的颜色
        self.rect = self.surface.get_rect(x=100, y=100) #玩家位置

    def draw(self):
        screen.blit(self.surface, self.rect)

这样玩家就会在(100, 100)的位置出生了

2.让角色动起来

import pygame
import sys

pygame.init()

screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption('Hello World')


class Player():
    def __init__(self):
        self.surface = pygame.surface.Surface((50, 50)) #创建玩家的外观
        self.surface.fill('blue') #设置Player的颜色
        self.rect = self.surface.get_rect() #玩家位置

    def draw(self):
        screen.blit(self.surface, self.rect)

    def move(self):
        #玩家移动
        self.speed = 5
        p = pygame.key.get_pressed()
        if p[pygame.K_UP]:
            self.rect.top -= self.speed
        
        if p[pygame.K_DOWN]:
            self.rect.top += self.speed

        if p[pygame.K_RIGHT]:
            self.rect.right += self.speed
        
        if p[pygame.K_LEFT]:
            self.rect.right -= self.speed

player = Player() #实例化玩家类
while True: #设置一个循环
    for event in pygame.event.get(): #事件检测
        if event.type == pygame.QUIT: #如果检测到按下退出则执行下一条
            pygame.quit() #退出窗口
            sys.exit() #退出整个程序

    player.move()
    screen.fill('white') #将窗口设为白色
    player.draw() #调用player类的draw函数
    pygame.display.flip() #刷新窗口


像这样, 增加一个move函数,但是角色似乎移动的太快了,降低self.speed也无法解决,要么太快,要么太慢,这时候就是帧率的问题了,使用pygame.clock()来调节帧数,修改后的代码如下:

import pygame
import sys

pygame.init()

screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption('Hello World')


class Player():
    def __init__(self):
        self.surface = pygame.surface.Surface((50, 50)) #创建玩家的外观
        self.surface.fill('blue') #设置Player的颜色
        self.rect = self.surface.get_rect() #玩家位置

    def draw(self):
        screen.blit(self.surface, self.rect)

    def move(self):
        #玩家移动
        self.speed = 5
        p = pygame.key.get_pressed()
        if p[pygame.K_UP]:
            self.rect.top -= self.speed
        
        if p[pygame.K_DOWN]:
            self.rect.top += self.speed

        if p[pygame.K_RIGHT]:
            self.rect.right += self.speed
        
        if p[pygame.K_LEFT]:
            self.rect.right -= self.speed

clock = pygame.time.Clock()
player = Player() #实例化玩家类
while True: #设置一个循环
    for event in pygame.event.get(): #事件检测
        if event.type == pygame.QUIT: #如果检测到按下退出则执行下一条
            pygame.quit() #退出窗口
            sys.exit() #退出整个程序

    player.move()
    screen.fill('white') #将窗口设为白色
    player.draw() #调用player类的draw函数
    pygame.display.flip() #刷新窗口
    clock.tick(60) #帧率


现在再运行程序,就可以发现移速变正常了

限制移动范围

现在虽然速度正常了,但是角色容易跑到框框外面去,这时候就需要我们限制移动范围了

大概的逻辑就是,当玩家的坐标大于或小于边界坐标时,则向反方向以相同的速度移动

class Player():
    def __init__(self):
        self.surface = pygame.surface.Surface((50, 50)) #创建玩家的外观
        self.surface.fill('blue') #设置Player的颜色
        self.rect = self.surface.get_rect() #玩家位置

    def draw(self):
        screen.blit(self.surface, self.rect)

    def move(self):
        #玩家移动
        self.speed = 5
        p = pygame.key.get_pressed()
        if p[pygame.K_UP]:
            self.rect.top -= self.speed
        
        if p[pygame.K_DOWN]:
            self.rect.top += self.speed

        if p[pygame.K_RIGHT]:
            self.rect.right += self.speed
        
        if p[pygame.K_LEFT]:
            self.rect.right -= self.speed

        #限制移动范围
        if self.rect.right >= width:
            self.rect.right -= self.speed

        if self.rect.left <= 0:
            self.rect.right += self.speed

        if self.rect.bottom >= height:
            self.rect.top -= self.speed

        if self.rect.top <= 0:
            self.rect.top += self.speed

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值