python 如何使用clamp_ip来防止玩家离开tmxMap的边界?[副本]

ttisahbt  于 2023-04-28  发布在  Python
关注(0)|答案(1)|浏览(141)

此问题已在此处有答案

I made a border in this pong game, but the paddles can cross it. How do I stop that?(2个答案)
Setting up an invisible boundary for my sprite(1个答案)
昨天关门了。
我有一个player类,我试图得到它,使这个球员是不能移动过去的边界,一个tmxMap已创建。我不需要设置墙壁碰撞或任何更复杂的东西,我只是希望它是这样的球员不能离开游戏的Map边界,即使屏幕/显示器比Map大。
我已经导入了Map

# initialize data for background map
tmx_data = load_pygame('Assets/background/maps/crypt.tmx')

for layer in tmx_data.visible_layers:
    if hasattr(layer, 'data'):
        for x, y, surf in layer.tiles():
            pos = (x * 32, y * 32)
            Tile(pos=pos, surf=surf, groups=(sprite_group,))

for obj in tmx_data.objects:
    pos = obj.x, obj.y
    if obj.image:
        Tile(pos=pos, surf=obj.image, groups=(sprite_group,))

我尝试获取Map的宽度和高度,并将它们存储在一个rect变量中,然后将这些信息传递到clamp_ip中。

# initialize data for background map
tmx_data = load_pygame('Assets/background/maps/crypt.tmx')

# get dimensions of the map
map_width = tmx_data.width * tmx_data.tilewidth
map_height = tmx_data.height * tmx_data.tileheight

# create a rectangle around the edge of the map
boundary_rect = pygame.Rect(0, 0, map_width, map_height)
boundary_rect.inflate_ip(-tmx_data.tilewidth, -tmx_data.tileheight)

但没有用。

k5ifujac

k5ifujac1#

clamp_ip是一个Rect对象的方法,它将其位置限制在给定的边界上。为了让玩家在tmxMap的边界内,你可以使用clamp_ip来限制玩家在Map边界内的位置。
首先,你需要获得玩家的矩形对象,当玩家在Map上移动时,它的位置应该会更新。然后,您可以使用rect对象的clamp_ip方法来确保它保持在map的边界内。
下面是一个示例代码片段,演示了如何使用clamp_ip将玩家保持在Map的边界内:

# get the player's rect object
player_rect = player.get_rect()

# get the dimensions of the map
map_width = tmx_data.width * tmx_data.tilewidth
map_height = tmx_data.height * tmx_data.tileheight

# create a rectangle around the edge of the map
boundary_rect = pygame.Rect(0, 0, map_width, map_height)

# clamp the player's rect object to the boundary rectangle
player_rect.clamp_ip(boundary_rect)

# update the player's position based on the clamped rect
player.set_pos(player_rect.x, player_rect.y)

在这个代码片段中,我们首先获得玩家的rect对象和Map的尺寸。然后我们创建一个包围整个Map的边界矩形,但有一个瓷砖宽度和高度的边缘,以确保玩家不会移动到Map边界之外。
最后,我们使用播放器的rect对象的clamp_ip方法将其位置限制在边界矩形内。然后,我们根据固定的矩形对象更新玩家的位置。
注意,该方法假设玩家的位置基于其rect对象来更新。如果你使用不同的方法更新玩家的位置,你需要确保rect对象也相应地更新。

相关问题