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
相关产品推荐
相关产品推荐

