Python 如何使精灵在pygame中移动?

Python 如何使精灵在pygame中移动?,python,pygame,Python,Pygame,我之前问过我的a级课程代码,我能解决一个问题,但为我提供了一个解决方案,无法移动我的精灵,我无法解决。我复制了这段代码,但它仍然不起作用,我突出显示了这段代码** 我的屏幕加载主屏幕功能,但当游戏循环运行时,它加载基本屏幕,但不再加载 import pygame import random import time #define variables WIDTH = 1080 HEIGHT =720 FPS = 30 x1 = WIDTH/2.25 y1 = HEIGHT/2.5 x2 = W

我之前问过我的a级课程代码,我能解决一个问题,但为我提供了一个解决方案,无法移动我的精灵,我无法解决。我复制了这段代码,但它仍然不起作用,我突出显示了这段代码** 我的屏幕加载主屏幕功能,但当游戏循环运行时,它加载基本屏幕,但不再加载

import pygame
import random
import time

#define variables

WIDTH = 1080
HEIGHT =720
FPS = 30
x1 = WIDTH/2.25
y1 = HEIGHT/2.5
x2 = WIDTH/20
y2 = HEIGHT/2.5
xbut = 475
ybut1 = 300
ybut2 = 400
gameTitle = 'Hungry Ghosts'
xChange1 = 0
yChange1 = 0
xChange2 = 0
yChange2 = 0
running = True

#define colours

WHITE = (255,255,255)
BLACK = (0,0,0)
MEGAN = (123,57,202)
MOLLIE = (244,11,12)
KATIE = (164,12,69)


#initialise pygame and window

pygame.init()
pygame.mixer.init()
pygame.font.init()
screen =pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption('Hungry Ghosts')
clock = pygame.time.Clock()


#load immages

home_image = pygame.image.load(('homescreen.jpg'))
game_image = pygame.image.load(('gamescreen.jpg'))
player1_image = pygame.image.load(('player 1.png')).convert_alpha()
player2_image = pygame.image.load(('player 2.png')).convert_alpha()
position = (0,0)
screen.blit(home_image, position)
startBut = pygame.image.load('startbutton.jpg').convert()
instructionBut = pygame.image.load('instructionbutton.jpg').convert()

#define functions

def textObjects(gameTitle, font):
    textSurface = font.render(gameTitle,True, WHITE)
    pygame.display.update()
    return textSurface, textSurface.get_rect()

def titleText(gameTitle):
    textForTitle = pygame.font.Font('VCR_OSD_MONO_1.001.ttf',115) 
    TextSurf, TextRect = textObjects(gameTitle, textForTitle)
    TextRect.center = ((WIDTH/2),(HEIGHT/6))
    screen.blit(TextSurf,TextRect)
    pygame.display.update()


def startButton(xbut,ybut1):
    screen.blit(startBut,(xbut,ybut1))
    pygame.display.update()

def instructionButton(xbut,ybut2):
    screen.blit(instructionBut,(xbut,ybut2))
    pygame.display.update()

    
def character1(x1,y1):
    screen.blit(player1_image,(x1,y1))
 

def character2(x,y):
    screen.blit(player2_image,(x,y))


def homeScreen():
    global running 
    start = False
    home = True
    while running and not start:
        clock.tick(FPS)
        
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            if event.type == pygame.MOUSEBUTTONDOWN:
                if startBut.get_rect(topleft = (xbut, ybut1)).collidepoint(event.pos) :
                    print('clicked on button')
                    start = True
        titleText(gameTitle)
        startButton(xbut,ybut1)
        instructionButton(xbut,ybut2)
        
        pygame.display.flip()

*******************************************************************
def gameLoop():
    global running
    global x1, y2, x2, y2, xChange1, yChange1, xChange2, yChange2
    while running:
        clock.tick(FPS)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    xChange = -5
                elif event.key == pygame.K_RIGHT:
                    xChange = 5
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    xChange = 0

        x1 += xChange1
        screen.blit(game_image,(0,0))
        character1(x1,y1)
        character2(x2,y2)
        pygame.display.flip()
        
*********************************************************************

#movement
for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            xChange1 = -5
        elif event.key == pygame.K_RIGHT:
            xChange1 = 5
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            xChange1 = 0
x1 += xChange1

#calling functions
homeScreen()
gameLoop()
pygame.quit() 

有打字错误。变量的名称是
xChange1
,而不是
xChange
。此外,读取并仅实现1个事件循环:

def gameLoop():
全球运行
全局x1、y1、x2、y2、xChange1、yChange1、xChange2、yChange2
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
xChange1=-5
elif event.key==pygame.K_RIGHT:
xChange1=5
elif event.key==pygame.K_a:
xChange2=-5
elif event.key==pygame.K\u d:
xChange2=5
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_左或event.key==pygame.K_右:
xChange1=0
如果event.key==pygame.K_a或event.key==pygame.K_d:
xChange2=0
x1+=xChange1
x2+=xChange2
屏幕。blit(游戏图像,(0,0))
字符1(x1,y1)
字符2(x2,y2)
pygame.display.flip()
#调用函数
主屏幕()
gameLoop()
pygame.quit()

但是,我建议使用而不是键盘事件

键盘事件(请参阅模块)仅在按键状态更改时发生一次。每次按键时,
KEYDOWN
事件发生一次
KEYUP
在每次释放钥匙时发生一次。将键盘事件用于单个操作或逐步移动

返回包含每个键状态的列表。如果按下某个键,则该键的状态为
True
,否则为
False
。用于评估按钮的当前状态并获得连续移动:

def gameLoop():
全球运行
全局x1、y1、x2、y2
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
keys=pygame.key.get_pressed()
x1+=(键[pygame.K_RIGHT]-键[pygame.K_LEFT])*5
y1+=(键[pygame.K_向下]-键[pygame.K_向上]*5
x2+=(键[pygame.K_d]-键[pygame.K_a])*5
y2+=(键[pygame.K_s]-键[pygame.K_w])*5
屏幕。blit(游戏图像,(0,0))
字符1(x1,y1)
字符2(x2,y2)
pygame.display.flip()
#调用函数
主屏幕()
gameLoop()
pygame.quit()

有打字错误。变量的名称是
xChange1
,而不是
xChange
。此外,读取并仅实现1个事件循环:

def gameLoop():
全球运行
全局x1、y1、x2、y2、xChange1、yChange1、xChange2、yChange2
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
xChange1=-5
elif event.key==pygame.K_RIGHT:
xChange1=5
elif event.key==pygame.K_a:
xChange2=-5
elif event.key==pygame.K\u d:
xChange2=5
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_左或event.key==pygame.K_右:
xChange1=0
如果event.key==pygame.K_a或event.key==pygame.K_d:
xChange2=0
x1+=xChange1
x2+=xChange2
屏幕。blit(游戏图像,(0,0))
字符1(x1,y1)
字符2(x2,y2)
pygame.display.flip()
#调用函数
主屏幕()
gameLoop()
pygame.quit()

但是,我建议使用而不是键盘事件

键盘事件(请参阅模块)仅在按键状态更改时发生一次。每次按键时,
KEYDOWN
事件发生一次
KEYUP
在每次释放钥匙时发生一次。将键盘事件用于单个操作或逐步移动

返回包含每个键状态的列表。如果按下某个键,则该键的状态为
True
,否则为
False
。用于评估按钮的当前状态并获得连续移动:

def gameLoop():
全球运行
全局x1、y1、x2、y2
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
keys=pygame.key.get_pressed()
x1+=(键[pygame.K_RIGHT]-键[pygame.K_LEFT])*5
y1+=(键[pygame.K_向下]-键[pygame.K_向上]*5
x2+=(键[pygame.K_d]-键[pygame.K_a])*5
y2+=(键[pygame.K_s]-键[pygame.K_w])*5
屏幕。blit(游戏图像,(0,0))
字符1(x1,y1)
字符2(x2,y2)
pygame.display.flip()
#调用函数
主屏幕()
gameLoop()
pygame.quit()

如果在调用
character1()
character2()
的行上放置一个断点,那么这两行的X和Y值是否会改变预期的方式?如果在影响
xChange
的行上放置断点,您是否也看到了预期的行为?问题是否已解决?如果在调用
character1()
cha的行上放置断点