You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame开发问题:如何让玩家随移动平台同步移动?

Fix for Player Not Moving With Platform in Pygame Game

Key Issues in Original Code

  • Duplicate platform movement: The platform was moved twice per frame, causing inconsistent positioning.
  • Player Rect not synced with position variables: Changes to x/y weren't reflected in the player Rect, leading to incorrect collision checks.
  • Incomplete collision handling: The player was only moved with the platform once on collision, not every frame while standing on it.
  • Unused gravity: The player didn't fall automatically when not jumping or on a platform.

Corrected Code

import pygame
from pygame.locals import *
pygame.init()

run = True
width = 500
height = 500
x = 250
y = 475
vel = 10
x_plat = 100
y_plat = 400
platform_vel = 5
clock = pygame.time.Clock()
isjump = False
jumpcount = 7.5
gravity = 8
on_platform = False  # Track if player is standing on the platform

surface = pygame.display.set_mode((width, height))
rect = Rect(x_plat, y_plat, 150, 20)
player = Rect(x, y, 25, 25)

while run:
    clock.tick(30)
    
    # Handle quit event first
    for event in pygame.event.get():
        if event.type == QUIT:
            run = False
    
    # Move platform (only once per frame)
    if rect.left >= width - rect.width or rect.left < 0:
        platform_vel *= -1
    rect.left += platform_vel
    
    keys = pygame.key.get_pressed()
    
    # Player horizontal movement
    if keys[pygame.K_LEFT] and x > 0:
        x -= vel
    if keys[pygame.K_RIGHT] and x < width - player.width:
        x += vel
    
    # Player jumping
    if not isjump:
        if keys[pygame.K_SPACE]:
            isjump = True
            on_platform = False  # Leave platform when jumping
    else:
        if jumpcount >= -7.5:
            y -= (jumpcount * abs(jumpcount)) * 0.5  # Adjust jump speed for smoother motion
            jumpcount -= 1
        else:
            jumpcount = 7.5
            isjump = False
    
    # Apply gravity if not jumping and not on platform
    if not isjump and not on_platform:
        y += gravity
        # Prevent player from falling below screen
        if y > height - player.height:
            y = height - player.height
    
    # Sync player Rect with x/y variables
    player.x = x
    player.y = y
    
    # Check collision with platform
    on_platform = False
    if player.colliderect(rect):
        # Ensure player is falling onto the platform (not jumping through from below)
        if player.bottom >= rect.top and player.top < rect.top and y >= rect.top - player.height:
            # Place player on top of platform
            player.bottom = rect.top
            y = player.y  # Sync y variable
            on_platform = True
            isjump = False  # Allow jumping again
        
        # Move player with platform if standing on it
        if on_platform:
            x += platform_vel
            player.x = x
    
    # Draw everything
    surface.fill((255, 222, 173))
    pygame.draw.rect(surface, (0, 0, 0), rect)
    pygame.draw.rect(surface, (255, 255, 255), player)
    pygame.display.update()

pygame.quit()

Key Fixes Explained

  1. Single platform movement: Removed the duplicate rect.left += platform_vel line so the platform moves consistently once per frame.
  2. Sync player Rect: Added player.x = x and player.y = y to ensure the collision check uses the latest player position.
  3. Persistent platform attachment: Added on_platform flag to track if the player is standing on the platform. While on_platform is True, the player's x position is updated with the platform's velocity every frame.
  4. Gravity implementation: Applied gravity to the player when they're not jumping or on a platform, making them fall naturally.
  5. Improved collision detection: Added checks to ensure the collision only triggers when the player falls onto the platform (not when jumping through it from below), and resets the jump state so the player can jump again immediately.

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:39:15