Python 为什么';我的精灵在pygame中不能正确移动吗?
我的第二个游戏是平板游戏。我画了所有的口水,画了背景和平台,但我不能一次移动超过45像素的角色,即使它应该移动5像素。我还从这里和那里复制了一些代码,所以我不能只搜索它。这很令人费解,请帮忙。 代码如下:Python 为什么';我的精灵在pygame中不能正确移动吗?,python,pygame,Python,Pygame,我的第二个游戏是平板游戏。我画了所有的口水,画了背景和平台,但我不能一次移动超过45像素的角色,即使它应该移动5像素。我还从这里和那里复制了一些代码,所以我不能只搜索它。这很令人费解,请帮忙。 代码如下: import sys import pygame screen = pygame.display.set_mode((1300, 700), pygame.RESIZABLE) global bg bg = pygame.image.load('Pictures/badground.png'
import sys
import pygame
screen = pygame.display.set_mode((1300, 700), pygame.RESIZABLE)
global bg
bg = pygame.image.load('Pictures/badground.png')
w = (0, 0, 0)
screen.fill(w)
screen.blit(bg, (0, 0))
level = 0
walking_l = (pygame.image.load('Pictures/walk_l.png'))
walking_r = (pygame.image.load('Pictures/walk_r.png'))
walking_l_2 = (pygame.image.load('Pictures/_stand.png'))
walking_r_2 = (pygame.image.load('Pictures/stand.png'))
stand = (pygame.image.load('Pictures/rstand.png'))
pf = (pygame.image.load('Pictures/platform.png'))
pygame.display.set_caption('Platformed')
class player(object):
def __init__(self, speed, width, height):
self.speed = speed
self.x = 650
self.y = 350
self.width = width
self.height = height
self.walk_l = False
self.walk_r = False
self.stand = True
self.jump = False
self.walk_count = 0
def reprint_win(self):
screen.fill(w)
screen.blit(bg, (0, 0))
def walk(self):
k = pygame.key.get_pressed()
if k[pygame.K_a]:
self.x -= self.speed
self.stand = False
self.walk_l = True
self.walk_r = False
self.jump = False
print(self.x)
screen.fill(w)
screen.blit(bg, (0, 0))
elif k[pygame.K_d]:
self.x += self.speed
self.stand = False
self.walk_r = True
self.walk_l = False
self.jump = False
print(self.y)
screen.fill(w)
screen.blit(bg, (0, 0))
elif k[pygame.K_w] and self.walk_r and not self.jump:
self.stand = False
self.walk_r = True
self.walk_l = False
self.jump = True
screen.fill(w)
screen.blit(bg, (0, 0))
else:
self.stand = True
self.walk_r = False
self.walk_l = False
self.jump = False
screen.fill(w)
screen.blit(bg, (0, 0))
while True:
for e in pygame.event.get():
man = player(5, 64, 64)
if e.type == pygame.QUIT:
sys.exit()
if e.type == pygame.KEYDOWN:
man.walk()
screen.blit(stand, (man.x, man.y))
pygame.display.update()
elif e.type == pygame.KEYDOWN:
man.walk()
screen.blit(stand, (man.x, man.y))
pygame.display.update()
类player
的方法walk()
添加一个方法draw
,该方法根据实例属性绘制播放器:
class播放器(对象):
# [...]
def步行(自我):
self.stand,self.walk\u l,self.walk\r,self.jump=False,False,False,False
k=pygame.key.get_pressed()
如果k[pygame.k_a]:
self.x-=自速度
self.walk\u l=真
elif k[pygame.k_d]:
self.x+=自速度
self.walk\u r=True
elif k[pygame.k_w]和self.walk_r和not self.jump:
self.jump=True
其他:
self.stand=True
def绘图(自我、冲浪):
如果self.walk\l:
冲浪(步行(self.x,self.y))
elif self.walk\r:
冲浪板(步行(self.x,self.y))
其他:
冲浪板(站立,(self.x,self.y))
必须在每一帧中绘制整个场景。对应用程序循环而不是事件循环进行绘图。
此外,必须在应用程序循环之前创建palyer
的实例,并在每个帧中调用man.mvoe()
。
用于控制每秒帧数:
man=player(5,64,64)
clock=pygame.time.clock()
FPS=60
尽管如此:
时钟滴答声(FPS)
对于pygame.event.get()中的e:
如果e.type==pygame.QUIT:
sys.exit()
走
屏幕光点(背景,(0,0))
人.画(屏幕)
pygame.display.update()
类player
的方法walk()
会更改实例属性,但id不会绘制任何内容。
添加一个方法draw
,该方法根据实例属性绘制播放器:
class播放器(对象):
# [...]
def步行(自我):
self.stand,self.walk\u l,self.walk\r,self.jump=False,False,False,False
k=pygame.key.get_pressed()
如果k[pygame.k_a]:
self.x-=自速度
self.walk\u l=真
elif k[pygame.k_d]:
self.x+=自速度
self.walk\u r=True
elif k[pygame.k_w]和self.walk_r和not self.jump:
self.jump=True
其他:
self.stand=True
def绘图(自我、冲浪):
如果self.walk\l:
冲浪(步行(self.x,self.y))
elif self.walk\r:
冲浪板(步行(self.x,self.y))
其他:
冲浪板(站立,(self.x,self.y))
必须在每一帧中绘制整个场景。对应用程序循环而不是事件循环进行绘图。
此外,必须在应用程序循环之前创建palyer
的实例,并在每个帧中调用man.mvoe()
。
用于控制每秒帧数:
man=player(5,64,64)
clock=pygame.time.clock()
FPS=60
尽管如此:
时钟滴答声(FPS)
对于pygame.event.get()中的e:
如果e.type==pygame.QUIT:
sys.exit()
走
屏幕光点(背景,(0,0))
人.画(屏幕)
pygame.display.update()
它有点工作了,但是每当它停止移动并重新开始时,精灵会一直重置它的位置。当它停止移动并重新开始时,精灵会一直重置它的位置