我对python/pygame非常陌生,需要一些帮助。我试图使两辆车自动向前移动(我已经成功地完成了),但我不能设法使汽车左转/右转时,某一关键是按下。我希望有人能帮我。正如我所说,我是新来的,所以如果有人愿意帮助,请您编辑我的代码,使它是成功的,以及解释什么是错的,非常感谢您提前。https://i.stack.imgur.com/zrlUT.pnghttps://i.stack.imgur.com/q6Hb9.pnghttps://i.stack.imgur.com/MGR3N.jpg
另外,我的代码没有错误信息,因为没有错误,rotate函数根本不起作用
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((1150, 800))
pygame.display.set_caption("Car Football")
degrees = 180
x = 70
y = 70
x1 = 1000
y1 = 400
width = 70
height = 70
vel = 15
vel1 = 15
def rotatedleft():
pygame.transform.rotate(redcar, (15))
def rotatedright():
pygame.transform.rotate(redcar, (-15))
run = True
while run:
pygame.time.delay(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
screen.fill((0, 0, 0))
bgImg = pygame.image.load("Football_pitch.png").convert()
screen.blit(bgImg, [0,0])
redcar = pygame.image.load("redcar.png")
screen.blit(redcar, (x, y))
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
rotatedleft = True
if run:
x += vel
if keys[pygame.K_RIGHT]:
rotatedright = True
pygame.display.flip()
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if run:
x1 -= vel1
if keys[pygame.K_d] and x1 < 1150:
x1 += vel1
if keys[pygame.K_w]:
y1 -= vel1
if keys[pygame.K_s]:
y1 += vel1
bluecar = pygame.image.load("Bluecarss.png")
screen.blit(bluecar, (x1, y1))
circleball = pygame.draw.circle(screen, (255, 255, 255), (300, 140), 50, 0)
pygame.display.update()
pygame.display.flip()
pygame.quit()
sys.exit()
如果你想在游戏中旋转一辆车并将它朝着它所面对的方向移动(我在下面的例子中使用向量),你需要知道三角学或者vectors。位置和速度应该是矢量,你必须每一帧把} 作为blit位置(rect使汽车更容易居中,并可用于碰撞检测)。你知道吗
vel
加到pos
矢量上才能使汽车前进。您还需要一个^{当用户按←或→时,必须旋转
angle
和vel
向量(vel
也是方向),然后使用角度旋转图像/pygame.表面. 至于图像旋转,为了保持图像的质量,应该保留对原始图像的引用。把它和汽车的当前角度一起传递给pygame.transform.rotate
,你会得到一个旋转的曲面。此曲面将具有不同的维度,因此需要创建一个新的rect(使用pygame.Surface.get_rect
)来更新blit位置(左上角坐标)。你知道吗如果要将
True
赋值给rotatedleft
(您以前将其定义为函数),请尝试调用该函数,如下所示:现在有点拐弯了,我很确定这还不是你想要的,但是嘿,宝贝。祝你比赛好运。你知道吗
太调用你使用的函数了
不是
(从另一个答案看,好像是你修好的) 另外,在while循环中初始化redcar的每个循环,这意味着您将redcar初始化为0度每个循环,绘制它,然后检查旋转,但是即使有旋转,在下一个循环中您也将再次初始化为0学位。你呢可以做很多事情来解决这个问题。最简单的方法:移动
检查两次旋转后 然后将redcar初始化到while循环之前,它应该可以工作。你知道吗
相关问题 更多 >
编程相关推荐