Python 如何使精灵在pygame中移动?
我之前问过我的a级课程代码,我能解决一个问题,但为我提供了一个解决方案,无法移动我的精灵,我无法解决。我复制了这段代码,但它仍然不起作用,我突出显示了这段代码** 我的屏幕加载主屏幕功能,但当游戏循环运行时,它加载基本屏幕,但不再加载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
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的行上放置断点