gpt4 book ai didi

python - 如何使用我分配的按键绑定(bind)移动我的 Sprite ?

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

我遇到的问题是我已将 Sprite 导入到我的游戏中,它是静态图像,我想移动它,但是我遇到了问题,尽管我知道主循环中的某些内容必须更改,但我一无所知到底要改变什么。变量头像是 Sprite 。

import pygame
pygame.init()

window = pygame.display.set_mode((750, 750))

pygame.display.set_caption("PeaShooters")

avatar = pygame.image.load('Sprite 1 Red.png')
background = pygame.image.load('Bg.jpg')

x = 64
y =64
width = 40
height = 60
vel = 5
white = (255, 255, 255)

def drawGrid():
window.blit(background, (0,0))
window.blit(avatar, (300,500))
pygame.draw.line(window, white, [50,50], [50, 600], 5)
pygame.draw.line(window, white, [50,50], [600, 50], 5)
pygame.draw.line(window, white, [600,600], [600, 50], 5)
pygame.draw.line(window, white, [50,600], [600, 600], 5)
pygame.draw.line(window, white, [50,450], [600, 450], 5)
pygame.display.update()

running = True
while running:
pygame.time.delay(100)

for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

keys = pygame.key.get_pressed()

if keys[pygame.K_w] and y > 455:
y += vel

if keys[pygame.K_a] and x > 55:
x -= vel

if keys[pygame.K_s] and y < 565:
y -= vel

if keys[pygame.K_d] and x < 575 :
x += vel
*I gathered something needs to be changed around here.
drawGrid()



pygame.quit()

最佳答案

来自opensource.com :

为了让你的 Sprite 移动,你必须为你的 Sprite 创建一个代表移动的属性。当你的 Sprite 不移动时,该变量设置为 0。

如果您正在为 Sprite 设置动画,或者您决定将来为其设置动画,则还必须跟踪帧以使步行周期保持在轨道上。

在 Player 类中创建变量。前两行用于上下文(如果您一直在遵循的话,您的代码中已经有了它们),因此仅添加最后三行:

def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.movex = 0 # move along X
self.movey = 0 # move along Y
self.frame = 0 # count frames

设置完这些变量后,就可以对 Sprite 的运动进行编码了。

玩家 Sprite 不需要一直响应控制;有时它不会移动。因此,控制 Sprite 的代码只是玩家 Sprite 要做的所有事情的一小部分。当您想让 Python 中的对象独立于其其余代码执行某些操作时,您可以将新代码放在函数中。 Python 函数以关键字 def 开头,它代表定义。

在 Player 类中创建一个函数,将一定数量的像素添加到 Sprite 在屏幕上的位置。不用担心您添加了多少像素;这将在后面的代码中决定。

def control(self,x,y):
'''
control player movement
'''
self.movex += x
self.movey += y

要在 Pygame 中移动 Sprite ,您必须告诉 Python 在新位置以及新位置所在的位置重绘 Sprite 。

由于 Player Sprite 并不总是移动,因此更新只需是 Player 类中的一个函数。在您之前创建的控制函数之后添加此函数。

为了使 Sprite 看起来正在行走(或飞行,或者无论 Sprite 应该做什么),您需要在按下相应的键时更改其在屏幕上的位置。要使其在屏幕上移动,您可以将其位置(由 self.rect.x 和 self.rect.y 属性指定)重新定义为其当前位置加上应用的 movex 或 movey 量。 (移动所需的像素数稍后设置。)

def update(self):
'''
Update sprite position
'''
self.rect.x = self.rect.x + self.movex

对 Y 位置执行相同的操作:

    self.rect.y = self.rect.y + self.movey

对于动画,每当 Sprite 移动时就推进动画帧,并使用相应的动画帧作为玩家图像:

    # moving left
if self.movex < 0:
self.frame += 1
if self.frame > 3*ani:
self.frame = 0
self.image = self.images[self.frame//ani]

# moving right
if self.movex > 0:
self.frame += 1
if self.frame > 3*ani:
self.frame = 0
self.image = self.images[(self.frame//ani)+4]

关于python - 如何使用我分配的按键绑定(bind)移动我的 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55325922/

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