gpt4 book ai didi

python - 形状 "wobble"转动时 - Pygame

转载 作者:行者123 更新时间:2023-12-01 08:31:29 25 4
gpt4 key购买 nike

我正在 pygame 上制作赛车游戏。它涉及一辆能够转弯的汽车,但是当它转弯时,汽车会“摇晃”。如果您想知道我的意思,请运行下面的代码并按住其中一个箭头键。我不确定问题是什么,但我想保留行 redcar_pos = list(int(v) for v in pos_red)
因为这将有助于游戏的后期阶段,一旦汽车离开赛道,游戏就会识别出这一点并采取措施。 “摆动”在 pygame 绘制的形状上可能不那么清晰,但仍然很明显,但是我想在我的游戏中使用图像(我没有添加图像,因此运行代码会更容易)和图像更“晃动”。下面是代码的简单版本。我希望有人能帮忙:)

import pygame
import pygame.freetype
from pygame.math import Vector2

pygame.init()
clock = pygame.time.Clock()
WIDTH = 900
HEIGHT = 550
screen = pygame.display.set_mode((WIDTH, HEIGHT))
REDCAR_ORIGINAL = pygame.Surface((50, 30), pygame.SRCALPHA)
redangle = 0
redspeed = 2
pos_red = Vector2(200, 200)
vel_red = Vector2(redspeed, 0)

redcar = REDCAR_ORIGINAL
pygame.draw.polygon(REDCAR_ORIGINAL, pygame.Color('dodgerblue'), [(0, 30), (50, 20), (50, 10), (0, 0)])
redrect = redcar.get_rect(center = pos_red)

run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False

keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
redangle += 3
vel_red.rotate_ip(-3)
redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
redrect = redcar.get_rect(center = redrect)
mask_red = pygame.mask.from_surface(redcar)
elif keys[pygame.K_RIGHT]:
redangle -= 3
vel_red.rotate_ip(3)
redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
mask_red = pygame.mask.from_surface(redcar)

pos_red += vel_red
redrect = pos_red

redcar_pos = list(int(v) for v in pos_red)


screen.fill(pygame.Color('green'))

screen.blit(redcar, redcar_pos)
pygame.display.flip()
clock.tick(60)

pygame.quit()

最佳答案

我不确定为什么要创建 redcar_pos 变量,因为您只需将 redrect 作为 blit 位置传递即可。您也不应该将 pos_red 分配给 redrect,而是分配给它的 center 属性,否则 redrect 将是一个向量不是 pygame.Rect。

在旋转部分,您可以只创建新的矩形,不需要传递中心坐标,因为pos_red(实际的中心坐标)将被分配给redrect.center 每帧下方。

以下是我建议的更改:

if keys[pygame.K_LEFT]:
redangle += 3
vel_red.rotate_ip(-3)
redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
redrect = redcar.get_rect() # No need to pass the previous center.
mask_red = pygame.mask.from_surface(redcar)
elif keys[pygame.K_RIGHT]:
redangle -= 3
vel_red.rotate_ip(3)
redcar = pygame.transform.rotate(REDCAR_ORIGINAL, redangle)
redrect = redcar.get_rect() # Create a new rect here as well.
mask_red = pygame.mask.from_surface(redcar)

pos_red += vel_red
redrect.center = pos_red # Just assign the pos_red to the center.

screen.fill(pygame.Color('green'))

screen.blit(redcar, redrect) # Blit it at the redrect.topleft coordinates.

关于python - 形状 "wobble"转动时 - Pygame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53897002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com