Python Pygame跳跃式玩家动作

Python Pygame跳跃式玩家动作,python,pygame,Python,Pygame,所以,我用pygame在Python3.7.7中制作了这个简单的游戏,我试图为敌人制作一个“随机”移动。但是当我用敌人的动作运行程序时,我的玩家的动作有点急促(我希望我使用的动词是它的本意)。我找不到是什么让我这么奇怪。 我试过两种不同的方法来对付敌人的运动,两种方法的问题都是一样的 第一次尝试: 谢谢:)从代码中删除对screenupdt的多个调用。每帧绘制一次场景并更新一次显示就足够了。将其从enem.move方法和应用程序循环中删除。在应用程序循环结束时调用它一次: 运行时: 时钟滴答(4

所以,我用pygame在Python3.7.7中制作了这个简单的游戏,我试图为敌人制作一个“随机”移动。但是当我用敌人的动作运行程序时,我的玩家的动作有点急促(我希望我使用的动词是它的本意)。我找不到是什么让我这么奇怪。 我试过两种不同的方法来对付敌人的运动,两种方法的问题都是一样的

第一次尝试:


谢谢:)

从代码中删除对
screenupdt
的多个调用。每帧绘制一次场景并更新一次显示就足够了。将其从
enem.move
方法和应用程序循环中删除。在应用程序循环结束时调用它一次:

运行时:
时钟滴答(40)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
keys=pygame.key.get_pressed()
如果键[pygame.K_a]和aris.x>0:
aris.x-=aris.vel
如果键[pygame.K_d]和aris.x+aris.width<1000:
aris.x+=aris.vel
如果键[pygame.K_w]和aris.y>0:
aris.y-=aris.vel
如果键[pygame.K_s]和aris.y+aris.height<1000:
aris.y+=aris.vel
敌方

screenupdt()#我不知道如何解释,当敌人的移动很平稳,你可以看到他一直在移动时,玩家每隔半秒就会停止移动,看起来它是在步进移动,而不是浮动。谢谢你:D是这样的,我只是让它在相同的方向上移动了一些帧,然后是变化。:)
import pygame,random
pygame.init()
clock = pygame.time.Clock()
run= True
#imatges


#screen
sw= 1000
sh= 1000




wind = pygame.display.set_mode((sw,sh))
pygame.display.set_caption('PYgeon')

#sounds


####################################################################################################################
#                   PLAYER
####################################################################################################################
#Prot
class prot (object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 10

####################################################################################################################
#                   ENEMY
####################################################################################################################
#Enemy
class enem (object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self. height = height
        self.vel = 5
        self.cem = 0
    def mov (self):
        self.cem +=1
        if self.cem >= 3:
            self.cem=0
            opt = random.randint(1,2)#1 o 2 directions
            dis = random.randint(5,10)#distance
            screenupdt()
            if opt == 1:
                pos = random.randint(1,2)#positive / negative (1->+||2->-)
                if pos == 1:
                    dir = random.randint(1,2)#movement x(1) o movement y(2)
                    if dir == 1:
                        for ul in range (dis):
                            if enemy.x + enemy.width <= sw:
                                enemy.x += enemy.vel
                                screenupdt()
                    else:
                        for ul in range (dis):
                            if enemy.y + enemy.height <= sh:
                                enemy.y += enemy.vel
                                screenupdt()
                else:
                    dir = random.randint(1,2)#movement x(1) o movement y(2)
                    if dir == 1:
                        for ul in range (dis):
                            if enemy.x - enemy.width >= 0:
                                enemy.x -= enemy.vel
                                screenupdt()
                    else:
                        for ul in range (dis):
                            if enemy.y - enemy.height >= 0:
                                enemy.y -= enemy.vel
                                screenupdt()
            else:
                dirb = random.randint(1,4)#to choose one of the four directions 1(+x,+y) 2(+x,-y) 3(-x,+y) 4(-x,-y)
                if dirb == 1:
                    for ul in range (dis):
                        if enemy.x + enemy.width < sw and enemy.y + enemy.height < sh:
                            enemy.x += enemy.vel
                            enemy.y += enemy.vel
                            screenupdt()
                elif dirb == 2:
                    for ul in range (dis):
                        if enemy.x + enemy.width < sw and enemy.y - enemy.height > 0:
                            enemy.x += enemy.vel
                            enemy.y -= enemy.vel
                            screenupdt()
                elif dirb == 3:
                    for ul in range (dis):
                        if enemy.x - enemy.width > 0 and enemy.y + enemy.height < sh:
                            enemy.x -= enemy.vel
                            enemy.y += enemy.vel
                            screenupdt()
                else:
                    for ul in range (dis):
                        if enemy.x - enemy.width > 0 and enemy.y - enemy.height > 0:
                            enemy.x -= enemy.vel
                            enemy.y -= enemy.vel
                            screenupdt()
####################################################################################################################
#                   BOSS
####################################################################################################################

class boss (object):
    def __init__(self):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5

####################################################################################################################
#                   PROJECTILES
####################################################################################################################

class proj (object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 25
####################################################################################################################
#                                   SCREEN LOADING
####################################################################################################################
#screen loading
def screenupdt ():
    wind.fill(0)
    pygame.draw.rect(wind , (255,100,255) , (aris.x,aris.y,aris.width,aris.height))
    pygame.draw.circle(wind, (250,255,100), (enemy.x,enemy.y), 25)
    pygame.display.update()

####################################################################################################################
####################################################################################################################
#                   LOOP
####################################################################################################################
####################################################################################################################


#variables
aris = prot(250,250,64,64)
enemy = enem (500,500,25,25)
enemy2 = enem (510,510,25,25)
cem= 0 #contador per el moviment dels enemics
#while

while run:
    clock.tick(40)
    screenupdt()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run= False
    keys = pygame.key.get_pressed()
    if keys[pygame.K_a] and aris.x > 0:
        aris.x -= aris.vel
        screenupdt()
    if keys[pygame.K_d] and aris.x + aris.width < 1000:
        aris.x += aris.vel
        screenupdt()
    if keys[pygame.K_w] and aris.y > 0:
        aris.y -= aris.vel
        screenupdt()
    if keys[pygame.K_s] and aris.y + aris.height < 1000:
        aris.y += aris.vel
        screenupdt()
    enemy.mov()
pygame.quit()
import pygame,random
pygame.init()
clock = pygame.time.Clock()
run= True
#imatges


#screen
sw= 1000
sh= 1000




wind = pygame.display.set_mode((sw,sh))
pygame.display.set_caption('PYgeon')

#sounds


####################################################################################################################
#                   PLAYER
####################################################################################################################
#Prot
class prot (object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 10

####################################################################################################################
#                   ENEMY
####################################################################################################################
#Enemy
class enem (object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self. height = height
        self.vel = 5
        self.cem = 0
    def mov (self):
        self.cem += 1
        if self.cem == 6:
            self.cem = 0
            opt=[1,2,3,4,5,6,7,8]#1(+x) 2(-x) 3(+y) 4(-y) 5(+x,+y) 6(+x,-y) 7(-x,+y) 8(-x,-y)
            copt= random.choice(opt)
            dis = random.randint (1,10)
            if copt == 1:
                for asdf in range (dis):
                    self.x += self.vel
                    screenupdt()
            elif copt == 2:
                for asdf in range (dis):
                    self.x -= self.vel
                    screenupdt()
            elif copt == 3:
                for asdf in range (dis):
                    self.y += self.vel
                    screenupdt()
            elif copt == 4:
                for asdf in range (dis):
                    self.y -= self.vel
                    screenupdt()
            elif copt == 5:
                for asdf in range (dis):
                    self.x += self.vel
                    self.y += self.vel
                    screenupdt()
            elif copt == 6:
                for asdf in range (dis):
                    self.x += self.vel
                    self.y -= self.vel
                    screenupdt()
            elif copt == 7:
                for asdf in range (dis):
                    self.x -= self.vel
                    self.y += self.vel
                    screenupdt()
            elif copt == 8:
                for asdf in range (dis):
                    self.x -= self.vel
                    self.y -= self.vel
                    screenupdt()
####################################################################################################################
#                   BOSS
####################################################################################################################

class boss (object):
    def __init__(self):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5

####################################################################################################################
#                   PROJECTILES
####################################################################################################################

class proj (object):
    def __init__(self,x,y,width,height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 25
####################################################################################################################
#                                   SCREEN LOADING
####################################################################################################################
#screen loading
def screenupdt ():
    wind.fill(0)
    pygame.draw.rect(wind , (255,100,255) , (aris.x,aris.y,aris.width,aris.height))
    pygame.draw.circle(wind, (250,255,100), (enemy.x,enemy.y), 25)
    pygame.display.update()

####################################################################################################################
####################################################################################################################
#                   LOOP
####################################################################################################################
####################################################################################################################


#variables
aris = prot(250,250,64,64)
enemy = enem (500,500,25,25)
cem= 0 #contador per el moviment dels enemics
#while

while run:
    enemy.mov()            
                                                
    keys = pygame.key.get_pressed()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run= False
    if keys[pygame.K_a]:
        aris.x -= aris.vel
        screenupdt()
    if keys[pygame.K_d]:
        aris.x += aris.vel
        screenupdt()
    if keys[pygame.K_w]:
        aris.y -= aris.vel
        screenupdt()
    if keys[pygame.K_s]:
        aris.y += aris.vel
        screenupdt()
pygame.quit()