【问题标题】:How do I move my sprite using the keybinds I have assigned?如何使用我分配的键绑定移动我的精灵?
【发布时间】:2019-03-24 16:23:39
【问题描述】:

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

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()

【问题讨论】:

    标签: python pygame sprite


    【解决方案1】:

    来自opensource.com

    要让您的精灵移动,您必须为您的精灵创建一个表示运动的属性。当您的精灵不移动时,此变量设置为 0。

    如果您正在为您的精灵设置动画,或者您决定在未来对其进行动画处理,您还必须跟踪帧以使步行循环保持在轨道上。

    在 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
    

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

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

    在你的 Player 类中创建一个函数来为你的精灵在屏幕上的位置添加一些像素。不用担心你添加了多少像素;这将在以后的代码中决定。

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

    要在 Pygame 中移动精灵,您必须告诉 Python 在新位置重绘精灵,以及新位置在哪里。

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

    要使精灵看起来像是在行走(或飞行,或者您的精灵应该做的任何事情),您需要在按下相应的键时更改其在屏幕上的位置。为了让它在屏幕上移动,你重新定义它的位置,由 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
    

    对于动画,只要你的精灵移动,就推进动画帧,并使用相应的动画帧作为玩家图像:

        # 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]
    

    【讨论】:

      猜你喜欢
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 2019-10-17
      • 2022-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多