Python 我需要雪碧在开枪后继续移动

Python 我需要雪碧在开枪后继续移动,python,python-2.7,pygame,Python,Python 2.7,Pygame,我在pygame中制作了一个非常基本的游戏,其中唯一可能的动作是向左移动、向右移动和向上射击。我的问题是,当我射击时,我的玩家精灵会在子弹向上移动时保持静止。我该怎么补救呢?我是pygame的新手,所以我非常感谢所有的帮助 #importing needed libraries import pygame,sys from pygame.locals import * #Class for the Player class Player(): def __init__(self,su

我在pygame中制作了一个非常基本的游戏,其中唯一可能的动作是向左移动、向右移动和向上射击。我的问题是,当我射击时,我的玩家精灵会在子弹向上移动时保持静止。我该怎么补救呢?我是pygame的新手,所以我非常感谢所有的帮助

#importing needed libraries
import pygame,sys
from pygame.locals import *


#Class for the Player
class Player():
    def __init__(self,surf,xpos,ypos):
        self.image=pygame.image.load("cat1.png").convert_alpha()
        self.x=xpos
        self.y=ypos
        self.surface=surf
    def keys(self):
        dist=10
        key=pygame.key.get_pressed()
        if key[pygame.K_RIGHT]:
            if self.x<500:
                self.x+=dist
        elif key[pygame.K_LEFT]:
            if self.x!=0:
                self.x-=dist
    def draw(self,surface):
        self.surface.blit(self.image,(self.x,self.y))

#Class for the bullet which inherits the Player Class
class Weapon(Player):
    def __init__(self,surf,xpos,ypos,bg,wxpos,wypos):
        Player.__init__(self,surf,xpos,ypos)
        self.wimage=pygame.image.load("bullet.png").convert_alpha()
        self.wx=wxpos
        self.wy=wypos
        self.background=bg

    def Shoot(self):
        dist=10
        while self.wy>0:
            self.surface.blit(self.background,(0,0))
            self.surface.blit(self.image,(self.x,self.y))
            self.surface.blit(self.wimage,(self.wx,self.wy))
            self.wy-=dist
            pygame.display.update()

#initialising pygame
pygame.init()

FPS=30
fpsClock=pygame.time.Clock()

#creating display window
DISPLAYSURF=pygame.display.set_mode((577,472),0,32)
pygame.display.set_caption('Animation')


WHITE = (255, 255, 255)
background=pygame.image.load("background.png")
DISPLAYSURF.fill(WHITE)

#creating player
player=Player(DISPLAYSURF,50,360)

#main game loop
while True:

    for event in pygame.event.get():
        if event.type==QUIT:
            pygame.quit()
            sys.exit()
        elif event.type==MOUSEBUTTONDOWN:
            weapon=Weapon(DISPLAYSURF,player.x,player.y,background,player.x+25,player.y)
            player.draw(DISPLAYSURF)
            weapon.Shoot()

    player.keys()
    DISPLAYSURF.blit(background,(0,0))
    player.draw(DISPLAYSURF)

    pygame.display.update()
    fpsClock.tick(FPS)
#导入所需的库
导入pygame,sys
从pygame.locals导入*
#为运动员上课
类播放器():
定义初始化(自我、冲浪、XPO、YPO):
self.image=pygame.image.load(“cat1.png”).convert_alpha()
self.x=xpos
self.y=ypos
自表面=冲浪
def键(自):
距离=10
key=pygame.key.get_pressed()
如果键[pygame.K_RIGHT]:
如果self.x0:
自表面blit(自背景,(0,0))
self.surface.blit(self.image,(self.x,self.y))
self.surface.blit(self.wimage,(self.wx,self.wy))
self.wy-=dist
pygame.display.update()
#初始化pygame
pygame.init()
FPS=30
fpscall=pygame.time.Clock()
#创建显示窗口
DISPLAYSURF=pygame.display.set_模式((577472),0,32)
pygame.display.set_标题('动画')
白色=(255,255,255)
background=pygame.image.load(“background.png”)
显示冲浪填充(白色)
#创建玩家
播放器=播放器(DISPLAYSURF,50360)
#主游戏循环
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
elif event.type==MOUSEBUTTONDOWN:
武器=武器(显示冲浪,player.x,player.y,背景,player.x+25,player.y)
player.draw(DISPLAYSURF)
武器射击
player.keys()
显示冲浪板(背景,(0,0))
player.draw(DISPLAYSURF)
pygame.display.update()
fpsClock.tick(FPS)

射击
必须像职业球员一样,拥有
draw()
update()
,只移动子弹
self.dist
像素。若你们在主循环中调用它,那个么你们会得到移动的子弹,你们可以移动玩家

这是一个简单的例子。阅读更多关于,以及

看看

导入pygame
导入系统
#---常数----
FPS=30
白色=(255,255,255)
#---班级---
类播放器():
定义初始(自、曲面、x、y):
self.surface=曲面
self.image=pygame.image.load(“cat1.png”).convert_alpha()
self.rect=self.image.get_rect()
self.rect.x=x
自校正y=y
self.dist=10
def键(自):
key=pygame.key.get_pressed()
如果键[pygame.K_RIGHT]:
如果自校正x<500:
self.rect.x+=self.dist
elif键[pygame.K_左]:
如果self.rect.x>=0:
self.rect.x-=self.dist
def牵引(自):
self.surface.blit(self.image,self.rect)
类项目符号():
定义初始(自、曲面、x、y):
self.surface=曲面
self.image=pygame.image.load(“bullet.png”).convert_alpha()
self.rect=self.image.get_rect()
self.rect.x=x
自校正y=y
self.dist=10
self.dead=False
def牵引(自):
self.surface.blit(self.image,self.rect)
def更新(自我):
如果自校正y>0:
self.rect.y-=self.dist
其他:
self.dead=True
#---梅因---
pygame.init()
display=pygame.display.set_模式((577472),0,32)
pygame.display.set_标题('动画')
background=pygame.image.load(“background.png”)
播放器=播放器(显示器,50360)
fps_clock=pygame.time.clock()
项目符号=[]
尽管如此:
#---事件---
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type==pygame.MOUSEBUTTONDOWN:
b=项目符号(显示,player.rect.x,player.rect.y)
项目符号。附加(b)
#---更新---
player.keys()
#移动子弹
对于子弹中的b:
b、 更新()
#移除“死”子弹
子弹=[b代表子弹中的b,如果不是b.死亡]
#---抽签---
显示.blit(背景,(0,0))
player.draw()
对于子弹中的b:
b、 画()
pygame.display.update()
#---FPS---
fps_时钟滴答声(fps)

此处没有详细说明执行此操作的方法,但需要使用线程或子例程。基本上,您想要的是让多个对象同时运行,因此您需要并行化它们的操作。您不能在
快照中使用
循环。您必须在
内移动它,而True
(主循环)。
拍摄必须是类-类似于播放器-使用
draw()
显示和
update()
在主循环的每个循环中只移动几个像素。主回路将完成所有工作。非常感谢!我一定会调查这些资源!
import pygame
import sys

# --- constants ----

FPS = 30

WHITE = (255, 255, 255)

# --- classes ---

class Player():

    def __init__(self, surface, x, y):
        self.surface = surface
        self.image = pygame.image.load("cat1.png").convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.dist = 10

    def keys(self):
        key = pygame.key.get_pressed()

        if key[pygame.K_RIGHT]:
            if self.rect.x < 500:
                self.rect.x += self.dist
        elif key[pygame.K_LEFT]:
            if self.rect.x >= 0:
                self.rect.x -= self.dist

    def draw(self):
        self.surface.blit(self.image, self.rect)


class Bullet():

    def __init__(self, surface, x, y):
        self.surface = surface
        self.image = pygame.image.load("bullet.png").convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.dist = 10
        self.dead = False

    def draw(self):
        self.surface.blit(self.image, self.rect)

    def update(self):
        if self.rect.y > 0:
            self.rect.y -= self.dist
        else:
            self.dead = True

# --- main ---

pygame.init()

display = pygame.display.set_mode((577,472),0,32)
pygame.display.set_caption('Animation')

background = pygame.image.load("background.png")
player = Player(display, 50, 360)

fps_clock = pygame.time.Clock()

bullets = []

while True:

    # --- events ---

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            b = Bullet(display, player.rect.x, player.rect.y)
            bullets.append(b)

    # --- updates ---

    player.keys()

    # moves bullets
    for b in bullets:
        b.update()

    # remove "dead" bullets
    bullets = [b for b in bullets if not b.dead]

    # --- draws ---

    display.blit(background, (0,0))

    player.draw()

    for b in bullets:
        b.draw()

    pygame.display.update()

    # --- FPS ---
    fps_clock.tick(FPS)