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

Pygame开发问题:重力效果反向,角色向上而非向下移动

Pygame角色重力方向反向问题解决

问题根源

Pygame的坐标系规则和日常直觉相反:屏幕左上角是坐标原点(0,0),y轴数值越往下越大。你给gravity设了-2,相当于让角色的y坐标每次循环减2,自然就会向上移动。

修复方法

直接把重力值改成正数即可:

# 将原来的gravity = -2修改为
gravity = 2

额外优化建议

你的代码里有大量冗余内容(比如后面的dt、x/y变量,以及draw()、screen_bound()等未被调用的函数),这些代码不仅没用,还会增加阅读混乱,建议直接删除,只保留主循环相关的有效逻辑。

修正后的完整核心代码如下:

import pygame, sys
from pygame.locals import QUIT

background_colour = (255, 255, 255)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
(width, height) = (800, 400)

window = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()
background = pygame.Surface(window.get_size())
ts, w, h, c1, c2 = 50, *background.get_size(), (128, 128, 128), (64, 64, 64)
tiles = [((x*ts, y*ts, ts, ts), c1 if (x+y) % 2 == 0 else c2) for x in range((w+ts-1)//ts) for y in range((h+ts-1)//ts)]
[pygame.draw.rect(background, color, rect) for rect, color in tiles]

rect = pygame.Rect(0, 0, 20, 20)
rect.center = window.get_rect().center
speed = 3.4
speed2 = 5

# main application loop
run = True
while run:
    gravity = 2  # 改为正数实现向下重力
    clock.tick(100)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()
    rect.x += (keys[pygame.K_d] - keys[pygame.K_a]) * speed
    rect.y += (keys[pygame.K_s] - keys[pygame.K_w]) * speed2
    rect.y += gravity  # 简化写法,效果和rect.y = rect.y + gravity一致
    border_rect = window.get_rect()
    rect.clamp_ip(border_rect)

    window.blit(background, (0, 0))
    pygame.draw.rect(window, (255, 0, 0), rect)
    pygame.display.flip()

pygame.quit()
exit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:01:05