如何解决Pygame中的多人跟随摄像机
对于一个学校项目,我正在使用Pygame用python构建“我们中间”的娱乐活动。我已经设置了所有服务器和客户端代码,并且一切正常。我现在正在使相机跟随播放器。只有我无法使它正常工作。
我的想法是:当玩家移动时,他周围的所有东西都必须朝相反的方向移动。但是,当您使用多人游戏时,此操作将无效。因为那样的话,其他玩家也会移动,这会破坏系统。
如果有人对如何编写这样的代码有任何想法,请告诉我。 预先谢谢你
解决方法
您不必在播放器周围移动背景和对象矩形,只需在播放器周围移动即可,并具有滚动偏移量值,该值可跟踪必须偏移多少空白对象的偏移量。请勿将滚动值应用于rect位置,因为rect位置不像blit对象那样相对于窗口。这是一个如何实现此目的的示例。
import pygame,sys
clock = pygame.time.Clock()
from pygame.locals import *
pygame.init()
pygame.display.set_caption("Scrolling example")
WINDOW_SIZE = (600,400)
screen = pygame.display.set_mode(WINDOW_SIZE,32)
scroll = [0,0]
player = pygame.Rect(100,100,10,10)
up = False
down = False
left = False
right = False
blocks = [pygame.Rect(250,250,50,50)]
while True:
screen.fill((0,0))
scroll[0] += (player.x - scroll[0] - (WINDOW_SIZE[0]/2)) // 20
scroll[1] += (player.y - scroll[1] - (WINDOW_SIZE[1]/2)) // 20
player_movement = [0,0]
if right == True:
player_movement[0] += 2
if left == True:
player_movement[0] -= 2
if up == True:
player_movement[1] -= 2
if down == True:
player_movement[1] += 2
player.x += player_movement[0]
player.y += player_movement[1]
player_scroll_rect = player.copy()
player_scroll_rect.x -= scroll[0]
player_scroll_rect.y -= scroll[1]
pygame.draw.rect(screen,(255,255,255),player_scroll_rect)
for block in blocks:
scroll_block = block.copy()
scroll_block.x = scroll_block.x - scroll[0]
scroll_block.y = scroll_block.y - scroll[1]
pygame.draw.rect(screen,(0,scroll_block)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_RIGHT:
right = True
if event.key == K_LEFT:
left = True
if event.key == K_UP:
up = True
if event.key == K_DOWN:
down = True
if event.type == KEYUP:
if event.key == K_RIGHT:
right = False
if event.key == K_LEFT:
left = False
if event.key == K_UP:
up = False
if event.key == K_DOWN:
down = False
pygame.display.update()
clock.tick(60)
如果您想使用图像的解决方案,请问我。 另外,您可以在此处找到有关滚动的更多信息:https://www.youtube.com/watch?v=5q7tmIlXROg
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。