【问题标题】:How to move the background image with keys in pygame?如何在pygame中用键移动背景图像?
【发布时间】:2020-04-05 07:44:05
【问题描述】:

我正在用 pygame 制作游戏。在这个游戏中,背景图像很大。在屏幕上,玩家只能看到大约 1/20 的背景图像。我想,当玩家按下左、右、上或下箭头键时,背景图像分别移动,但是当玩家到达图像末尾时它停止移动。我不知道该怎么做。

到目前为止我的代码:-

import pygame

FPS = 60
screen = pygame.display.set_mode((1000, 1000))
bg = pygame.image.load('map.png')

clock = pygame.time.Clock()

while True:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

提前致谢:-

【问题讨论】:

  • 您是否尝试在屏幕上绘制部分背景?

标签: python python-3.x pygame


【解决方案1】:

通过get_size()获取背景和屏幕的sice:

screen_size = screen.get_size()
bg_size = bg.get_size()

在 [0, bg_size[0]-screen_size[0]] 范围内定义背景的初始开始。例如背景中心:

bg_x = (bg_size[0]-screen_size[0]) // 2

通过pygame.key.get_pressed()获取关键状态列表:

keys = pygame.key.get_pressed()

根据leftright的状态改变bg_x

if keys[pygame.K_LEFT]:
    bg_x -= 10
if keys[pygame.K_RIGHT]:
    bg_x += 10

bg_x 限制在 [0, bg_size[0]-screen_size[0]] 范围内:

 bg_x = max(0, min(bg_size[0]-screen_size[0], bg_x))

blit 屏幕上-bg_x 的背景:

screen.blit(bg, (-bg_x, 0))

看例子:

import pygame

FPS = 60
screen = pygame.display.set_mode((1000, 1000))
bg = pygame.image.load('map.png')

screen_size = screen.get_size()
bg_size = bg.get_size()
bg_x = (bg_size[0]-screen_size[0]) // 2
bg_y = (bg_size[1]-screen_size[1]) // 2

clock = pygame.time.Clock()

while True:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        bg_x -= 10
    if keys[pygame.K_RIGHT]:
        bg_x += 10
    if keys[pygame.K_UP]:
        bg_y -= 10
    if keys[pygame.K_DOWN]:
        bg_y += 10
    bg_x = max(0, min(bg_size[0]-screen_size[0], bg_x)) 
    bg_y = max(0, min(bg_size[1]-screen_size[1], bg_y))

    screen.blit(bg, (-bg_x, -bg_y))
    pygame.display.flip()

【讨论】:

  • 太好了,效果很好。但是,对于上下移动。我们可以通过创建和维护一个名为 bg_y 的变量来做同样的事情吗
  • @programmerpro 我已经扩展了这个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2017-07-18
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多