I';我想用pygame做一个西部狂野游戏,但我能';我无法让拍摄功能正常工作
我一直在尝试在Pygame中制作一个wild west游戏,玩家与NPC决斗,但我无法让射击功能正常工作。我基本上一直试图保持它的简单,我有一系列的功能,使子弹穿过屏幕,但他们没有工作。代码如下:I';我想用pygame做一个西部狂野游戏,但我能';我无法让拍摄功能正常工作,pygame,2d,Pygame,2d,我一直在尝试在Pygame中制作一个wild west游戏,玩家与NPC决斗,但我无法让射击功能正常工作。我基本上一直试图保持它的简单,我有一系列的功能,使子弹穿过屏幕,但他们没有工作。代码如下: import pygame, time pygame.init() display_width = 800 display_height = 600 win = pygame.display.set_mode((display_width,display_height)) pygame.displ
import pygame, time
pygame.init()
display_width = 800
display_height = 600
win = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('The Old Wild West')
black = (0,0,0)
white = (255,255,255)
clock = pygame.time.Clock()
dead = False
avatar = pygame.image.load('cowboy.jfif')
avatar2 = pygame.image.load('enemy.jfif')
bullet = pygame.image.load('bullet.png')
bx2 = 330
bx3 = 440
bx4 = 550
bx = 220
by = 220
bspeed = 165
x = 50
ex = 550
ey = 225
y = 200
x_change = 0
speed = 0
def cowboy(x,y):
win.blit(avatar, (x,y))
def enemy(ex, ey):
win.blit(avatar2, (ex, ey))
def shootframe1():
win.blit(bullet, (bx, by))
def antiframe1():
pygame.draw.rect(win, (255, 255, 255), (bx, by, 50, 150))
def shootframe2():
win.blit(bullet, (bx2, by))
def antiframe2():
pygame.draw.rect(win, (255, 255, 255), (bx2, by, 50, 150))
def shootframe3():
win.blit(bullet, (bx3, by))
def antiframe3():
pygame.draw.rect(win, (255, 255, 255), (bx3, by, 50, 150))
def shootframe4():
win.blit(bullet, (bx4, by))
def antiframe4():
pygame.draw.rect(win, (255, 255, 255), (bx4, by, 50, 150))
while not dead:
for event in pygame.event.get():
if event.type == pygame.QUIT:
dead = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_change = -5
elif event.key == pygame.K_RIGHT:
x_change = 5
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
x_change = 0
if event.type == pygame.K_SPACE:
if event.key == pygame.K_SPACE:
shootframe1()
time.sleep(0.5)
antiframe1()
shootframe2()
time.sleep(0.5)
antiframe2()
shootframe3()
time.sleep(0.5)
antiframe3()
shootframe4()
time.sleep(0.5)
antiframe4()
x += x_change
win.fill(white)
cowboy(x,y)
enemy(ex, ey)
pygame.display.update()
clock.tick(60)
pygame.quit()
quit()
这里是cowboy.jfif、敌军.jfif和bullet.png:
请帮我解决这一困惑。我大幅更新了您的代码,我尝试对所有内容都进行了很好的注释,以便清楚发生了什么 首先,你把子弹拉到屏幕上,然后把屏幕填成白色,这样子弹就不会出现了 其次,空格键没有触发,因为您正在检查空格键是否为事件类型。所以我把它移到了
event.type==pygame.KEYDOWN
第三,使用time.sleep(0.5)会使游戏窗口冻结和结巴,所以我会避免这样做
如果您对更改有任何疑问,请随时提问
导入pygame,时间
pygame.init()
显示宽度=800
显示高度=600
win=pygame.display.set_模式((显示宽度、显示高度))
pygame.display.set_标题('TheOldWildWest')
黑色=(0,0,0)
白色=(255255)
clock=pygame.time.clock()
死=假
avatar=pygame.image.load('cowboy.jfif')
avatar2=pygame.image.load('敌方.jfif')
bullet=pygame.image.load('bullet.png')
bx2=330
bx3=440
bx4=550
bx=220
by=220
bspeed=165
x=50
ex=550
ey=225
y=200
x_变化=0
速度=0
def牛仔(x,y):
win.blit(阿凡达,(x,y))
def敌人(ex,ey):
win.blit(阿凡达2,(前,安永))
#一个单发功能,在下面的项目列表中添加一个新项目。
def shoot():
项目符号列表追加(项目符号(bx,by))
#保存单个项目符号信息的项目符号类
类别项目符号:
定义初始化(self,x,y):
#初始化项目符号的变量
self.x=x
self.y=y
self.image=pygame.image.load('bullet.png')
自身子弹头速度=165
#通过在每次绘制后更新x变量()在屏幕上移动项目符号
定义移动项目符号(自身):
self.x+=self.bullet\u速度
def牵引(自):
#获取曲面(窗口)
surface=pygame.display.get_surface()
#把子弹对准屏幕
blit(self.image,(self.x,self.y))
#使用上述功能更新其位置
自我。_移动_子弹()
bullet_list=[]。#由于用户可以发射多个子弹,我们需要跟踪它们
虽然没有死:
win.fill(白色)#将此移到顶部,以便在绘制任何内容之前填充屏幕
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
死=真
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
x_变化=-5
elif event.key==pygame.K_RIGHT:
x_变化=5
如果event.key==pygame.K_SPACE:#将此移到此处
射出子弹
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_左或event.key==pygame.K_右:
x_变化=0
x+=x_变化
牛仔(x,y)
敌人(前,后)
#通过迭代列表,将每个项目符号绘制到屏幕上
对于项目符号列表中的项目符号:
#如果项目符号已退出屏幕,我们将其从列表中删除,以便它们不会保留在内存中
如果bullet.x>显示宽度:
项目符号列表。删除(项目符号)
#绘制项目符号(从类中调用)
bullet.draw()
pygame.display.update()
时钟滴答(60)
pygame.quit()
退出
您可以指定问题的具体内容吗?如果event.type==pygame.K_SPACE,您可以先删除行。没有“K_SPACE”的事件类型。我想在播放器按空格键时使picture bullet.png穿过屏幕,但它不起作用。这就是问题所在。我尝试删除if event.type==pygame.K_SPACE
。它仍然不起作用。你不应该移除它。没有pygame.K_SPACE
的事件类型,但是有一个带有该常量的事件键。如果event.type==pygame.KEYDOWN
,您可能打算执行操作,然后执行如果event.key==pygame.K_SPACE
。