前言
本节我们将会导入我们的游戏角色,及背景。并实现角色的左右移动及跳跃功能。
Demo演示
我们先来看下本节的效果:
代码如下:
import pygame
class Player(object):
"""
player对象
"""
def __init__(self):
self.image = pygame.image.load('player.png').convert_alpha()
self.rect = self.image.get_rect()
self.rect.midbottom = (100, screen_height - 130)
self.vel_y = 0
self.jumped = False
def update(self):
x_move = 0
y_move = 0
# 获取按键,并进行相应的移动
key = pygame.key.get_pressed()
if key[pygame.K_SPACE] and self.jumped is False:
self.vel_y = -18
self.jumped = True
if not key[pygame.K_SPACE]:
self.jumped = False
if key[pygame.K_LEFT]:
x_move -= 5
if key[pygame.K_RIGHT]:
x_move += 5
# 添加角色重力(跳跃之后自然下落)
self.vel_y += 1.2
if self.vel_y > 10:
self.vel_y = 10
y_move += self.vel_y
self.rect.x += x_move
self.rect.y += y_move
# 控制人物的最低位置
if self.rect.bottom > screen_height - 130:
self.rect.bottom = screen_height - 130
# 绘制人物
screen.blit(self.image, self.rect)
class Cloud(object):
"""
云层对象
"""
def __init__(self, x, y):
self.image = pygame.image.load('cloud.png').convert_alpha()
self.rect = self.image.get_rect()
self.rect.topleft = (x, y)
def update(self):
self.rect.x -= 1 # 云层移动
screen.blit(self.image, self.rect)
if self.rect.x < -1400: # 超出边界后重新在屏幕最右边绘制云层
self.rect.x = 1400
# --------------------------------加载基本的窗口和时钟----------------------------
pygame.init()
screen_width = 1400
screen_height = 700
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('player_control')
clock = pygame.time.Clock() # 设置时钟
# -------------------------------- 加载对象 ----------------------------------
bg = pygame.image.load("bg.png").convert()
player = Player()
cloud1 = Cloud(0, 0)
cloud2 = Cloud(1400, 0)
# -------------------------------- 游戏主循环 ----------------------------------
run = True
while run:
clock.tick(60)
screen.blit(bg, (0, 0))
# -------------------------------- 角色更新 ----------------------------------
cloud1.update()
cloud2.update()
player.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# ------------------------------- 窗口更新并绘制 ------------------------------
pygame.display.update()
pygame.quit()
知识点
物体的移动
Pygame使用Rect对象存储和操纵矩形区域。可以从左,上,宽和高的组合创建Rect。还可以从已经是Rect或具有“ rect”的属性的对象创建Rect。Rect对象具有以下属性,可用于移动和对齐Rect:
x,y ---描述rect的位置
top, left, bottom, right ---顶,左,底,右
topleft, bottomleft, topright, bottomright ---左顶,左底,右顶,右底
midtop, midleft, midbottom, midright ---顶中,左中,底中,右中
center, centerx, centery ---中心点,中心点x,中心点y
size, width, height ---大小,宽,高
将人物的rect在窗口中显示出来,也就是说,我们操作人物移动其实是操作人物对应的rect来实现的,如下图
云层的移动实现技巧
在本节示例中,云层其实只是一张图片,如何实现这样的循环播放呢?其实很简单,要实现云层的移动,我们需要将云层的图片在游戏中加载两次,一张起点在游戏窗口左上角(0,0)的位置,另一张起点在游戏窗口右上角(1400,0)的位置。
ps:如果觉得文章对您有所帮助,欢迎点赞收藏转发,感谢呦!