此问题已在此处有答案:
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)
但没有用。
1条答案
按热度按时间k5ifujac1#
clamp_ip
是一个Rect
对象的方法,它将其位置限制在给定的边界上。为了让玩家在tmxMap的边界内,你可以使用clamp_ip
来限制玩家在Map边界内的位置。首先,你需要获得玩家的矩形对象,当玩家在Map上移动时,它的位置应该会更新。然后,您可以使用rect对象的
clamp_ip
方法来确保它保持在map的边界内。下面是一个示例代码片段,演示了如何使用
clamp_ip
将玩家保持在Map的边界内:在这个代码片段中,我们首先获得玩家的rect对象和Map的尺寸。然后我们创建一个包围整个Map的边界矩形,但有一个瓷砖宽度和高度的边缘,以确保玩家不会移动到Map边界之外。
最后,我们使用播放器的rect对象的
clamp_ip
方法将其位置限制在边界矩形内。然后,我们根据固定的矩形对象更新玩家的位置。注意,该方法假设玩家的位置基于其rect对象来更新。如果你使用不同的方法更新玩家的位置,你需要确保rect对象也相应地更新。