首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >形状“摇摆”当他们转向

形状“摇摆”当他们转向
EN

Stack Overflow用户
提问于 2018-12-22 15:36:32
回答 1查看 83关注 0票数 1

我在玩游戏。它涉及到一辆能够转弯的汽车,但当它转弯时,汽车就会“摇晃”。运行下面的代码,并按住一个箭头键,如果您想知道我的意思。我不知道是什么问题,但我想保持线redcar_pos = list(int(v) for v in pos_red),因为它将有助于在游戏的后期阶段,一旦汽车离开赛道,游戏认识到这一点,并采取了一些措施。在游戏绘制的形状上,“抖动”可能不是很清楚,但是我仍然可以注意到,但是我想在我的游戏中使用一个图像(我没有添加图像以便更容易地运行代码)和图像“抖动”更多。下面是代码的一个简单版本。我希望有人能帮忙:)

代码语言:javascript
复制
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()  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-23 15:27:49

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

在旋转部分,您可以创建新的rects,而不需要传递中心坐标,因为pos_red (实际的中心坐标)将分配给每个帧下面的redrect.center

以下是我建议的修改:

代码语言:javascript
复制
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.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53897002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档