微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame中的多人跟随摄像机

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?