Python PYGAME在让其他人移动的同时移动对象

Python PYGAME在让其他人移动的同时移动对象,python,oop,object,pygame,sprite,Python,Oop,Object,Pygame,Sprite,现在我有了它,一些物体将以不同的时间和速度在屏幕上滚动,还有一个我可以用箭头键控制的图标(英雄)。但是,每当我按下一个键,图标就会返回到其原始位置。这可能是什么原因造成的 import pygame, sys, time, random from pygame.locals import * pygame.init() winW = 800 winH = 500 surface = pygame.display.set_mode ((winW, winH),0,32) class Enemy(

现在我有了它,一些物体将以不同的时间和速度在屏幕上滚动,还有一个我可以用箭头键控制的图标(英雄)。但是,每当我按下一个键,图标就会返回到其原始位置。这可能是什么原因造成的

import pygame, sys, time, random
from pygame.locals import *
pygame.init()
winW = 800
winH = 500
surface = pygame.display.set_mode ((winW, winH),0,32)

class Enemy():
    def __init__(self, char, xMoveAmnt, startY=0, startX=0, delay=0):
        self.char = char
        self.delay=delay
        self.x = startX
        self.y = startY
        self.startX=startX
        self.startY=startY
        self.xMoveAmnt = xMoveAmnt
        self.image = pygame.image.load(self.char)
        self.rect = self.image.get_rect()


    def moveChar(self):
        if self.delay > 0:
             self.delay -= 1
             return
        self.x += self.xMoveAmnt
        if self.x + self.rect.right >= 800:
            self.x=self.startX
            self.y=random.randint(0,300)

class FastEnemy(Enemy):
    def moveChar(self):
        if self.delay > 0:
             self.delay -= 1
             return
        self.x += self.xMoveAmnt+10
        if self.x + self.rect.right >= 800:
            self.x=self.startX
            self.y=random.randint(0,300)

class SlowEnemy(Enemy):       
    def moveChar(self):
        if self.delay > 0:
             self.delay -= 1
             return
        self.x += self.xMoveAmnt-5
        if self.x + self.rect.right >= 800:
            self.x=self.startX
            self.y=random.randint(0,300)

class Hero():
    def __init__(self):
        self.X_MOVE_AMT = 5
        self.Y_MOVE_AMT = 5
        self.spaceMoveX = 0 
        self.spaceMoveY = 0
        self.startingX=400
        self.startingY=250
        self.x=self.startingX
        self.y=self.startingY
        self.space = pygame.image.load ("hero_sprite.jpg")
        self.spaceRect = self.space.get_rect()
        self.spaceRect.topleft = (100,100)

    def moveHero(self):


        for event in pygame.event.get():
            if event.type == KEYDOWN:
                if event.key == K_LEFT :
                    self.x += -(self.X_MOVE_AMT)
                    self.y = 0
                if event.key == K_RIGHT :
                    self.x += self.X_MOVE_AMT
                    self.y = 0
                if event.key == K_UP :
                    self.y += -(self.Y_MOVE_AMT)
                    self.x = 0
                if event.key == K_DOWN :
                    self.y += self.Y_MOVE_AMT
                    self.x = 0
                if event.key == ord (' '):
                    self.y = 0
                    self.x = 0
                if event.key == K_ESCAPE:
                    pygame.quit ()
                    sys.exit()

        self.spaceRect.top += self.spaceMoveY
        self.spaceRect.left += self.spaceMoveX

        if self.spaceRect.top < 0:
            self.spaceRect.top = 0

        if self.spaceRect.bottom > 500:
            self.spaceRect.bottom = 500

        if self.spaceRect.left < 0:
            self.spaceRect.left = 0

        if self.spaceRect.right > 800:
            self.spaceRect.right = 800



enemyList = []
hero=Hero()
for i in range (0, 8):
    xMoveAmnt=20
    enemyList.append(SlowEnemy(("orc3.png"), xMoveAmnt, random.randint(0, 500), 0, random.randint(0,100)))
    enemyList.append(Enemy(("orc.png"), xMoveAmnt, random.randint(0, 500), 0, random.randint(0,100)))
    enemyList.append(FastEnemy(("orc2.png"), xMoveAmnt, random.randint(0, 500), 0, random.randint(0,100)))

while True:
    surface.fill ((255,255,255))
    for enemy in enemyList:
        enemy.moveChar()
        hero.moveHero()
        surface.blit(enemy.image, (enemy.x, enemy.y))
        surface.blit(hero.space, (hero.x, hero.y))
        time.sleep(00.01)
    pygame.display.update()
导入pygame、sys、time、random
从pygame.locals导入*
pygame.init()
winW=800
winH=500
surface=pygame.display.set_模式((winW,winH),0,32)
类敌人():
定义初始化(self,char,xMoveAmnt,startY=0,startX=0,delay=0):
self.char=char
自我延迟=延迟
self.x=startX
self.y=startY
self.startX=startX
self.startY=startY
self.xMoveAmnt=xMoveAmnt
self.image=pygame.image.load(self.char)
self.rect=self.image.get_rect()
def moveChar(自身):
如果self.delay>0:
自延迟-=1
返回
self.x+=self.xmoveannt
如果self.x+self.rect.right>=800:
self.x=self.startX
self.y=random.randint(0300)
类敌人(敌人):
def moveChar(自身):
如果self.delay>0:
自延迟-=1
返回
self.x+=self.xmoveannt+10
如果self.x+self.rect.right>=800:
self.x=self.startX
self.y=random.randint(0300)
斯洛维内米级(敌人):
def moveChar(自身):
如果self.delay>0:
自延迟-=1
返回
self.x+=self.xMoveAmnt-5
如果self.x+self.rect.right>=800:
self.x=self.startX
self.y=random.randint(0300)
类英雄():
定义初始化(自):
self.X\u MOVE\u AMT=5
自运金额=5
self.spaceMoveX=0
self.spaceMoveY=0
自启动X=400
自启动=250
self.x=self.startingX
self.y=self.startingY
self.space=pygame.image.load(“hero\u sprite.jpg”)
self.spacelect=self.space.get_rect()
self.spacelect.topleft=(100100)
英雄(自我):
对于pygame.event.get()中的事件:
如果event.type==KEYDOWN:
如果event.key==K_LEFT:
self.x+=-(self.x\u MOVE\u AMT)
self.y=0
如果event.key==K_RIGHT:
self.x+=self.x\u移动\u金额
self.y=0
如果event.key==K_UP:
self.y+=-(self.y\u MOVE\u AMT)
self.x=0
如果event.key==K_DOWN:
self.y+=self.y\u移动金额
self.x=0
如果event.key==ord(“”):
self.y=0
self.x=0
如果event.key==K_转义:
pygame.quit()
sys.exit()
self.spacelect.top+=self.spaceMoveY
self.spacelect.left+=self.spaceMoveX
如果self.spacelect.top<0:
self.spacelect.top=0
如果self.spacelect.bottom>500:
self.spacelect.bottom=500
如果self.spacelect.left<0:
self.spacelect.left=0
如果self.spacelect.right>800:
self.spacelect.right=800
enemyList=[]
英雄
对于范围(0,8)内的i:
xMoveAmnt=20
enemyList.append(SlowEnemy(((“orc3.png”)、xMoveAmnt、random.randint(0500)、0、random.randint(0100)))
enemyList.append(敌人(((“orc.png”)、xMoveAmnt、random.randint(0500)、0、random.randint(0100)))
enemyList.append(fast敌方(((“orc2.png”)、xMoveAmnt、random.randint(0500)、0、random.randint(0100)))
尽管如此:
表面填充((255255))
对于enemyList中的敌人:
敌人
英雄
地面闪电(敌方图像,(敌方x,敌方y))
表面闪电(hero.space,(hero.x,hero.y))
睡眠时间(00.01)
pygame.display.update()
需要

            if event.key == K_LEFT :
                self.x += -(self.X_MOVE_AMT)
            if event.key == K_RIGHT :
                self.x += self.X_MOVE_AMT
            if event.key == K_UP :
                self.y += -(self.Y_MOVE_AMT)
            if event.key == K_DOWN :
                self.y += self.Y_MOVE_AMT
            if event.key == K_ESCAPE:
                pygame.quit ()
                sys.exit()
每次按下按钮时,我都会重置Y和X。对不起,浪费了你的时间

            if event.key == K_LEFT :
                self.x += -(self.X_MOVE_AMT)
            if event.key == K_RIGHT :
                self.x += self.X_MOVE_AMT
            if event.key == K_UP :
                self.y += -(self.Y_MOVE_AMT)
            if event.key == K_DOWN :
                self.y += self.Y_MOVE_AMT
            if event.key == K_ESCAPE:
                pygame.quit ()
                sys.exit()