我对python很新,我无法弄清楚什么是错的。我试图让子弹出现并移动,但它不会那样做,它会被卡在玩家身上。我的代码有点混乱,但现在是:
screen = pygame.display.set_mode((512,512))
pygame.display.set_caption('The Necromancer')
background = pygame.image.load('textures/background/background1.png')
titlecard = pygame.image.load('textures/title/titlecard0.png')
chars = pygame.image.load('textures/char/chardown1.png')
skeleton = pygame.image.load('textures/char/chardown2.png')
up = 0
down = 0
right = 0
left = 0
x = 64
y = 64
selected = 0
titletime = 0
level = 0
facing = 'down'
dir = "down"
ballx = x
bally = y
ballstage = 0
spacetimer = 0
ballon = 0
global ballon
global ballstage
global dir
global ballx
global bally
global facing
global x
global y
class char(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.imagedown = pygame.image.load('textures/char/chardown1.png').convert_alpha()
self.imagedown = pygame.transform.scale(self.imagedown, (64,64))
self.imageup = pygame.image.load('textures/char/charup1.png').convert_alpha()
self.imageup = pygame.transform.scale(self.imageup, (64,64))
self.imageleft = pygame.image.load('textures/char/charleft1.png').convert_alpha()
self.imageleft = pygame.transform.scale(self.imageleft, (64,64))
self.imageright = pygame.image.load('textures/char/charright1.png').convert_alpha()
self.imageright = pygame.transform.scale(self.imageright, (64,64))
self.rect = screen.get_rect()
def draw(self):
if facing == 'up':
screen.blit(self.imageup, (x,y))
if facing == 'down':
screen.blit(self.imagedown, (x,y))
if facing == 'left':
screen.blit(self.imageleft, (x,y))
if facing == 'right':
screen.blit(self.imageright, (x,y))
pygame.display.update()
class ball(pygame.sprite.Sprite):
def __init__(self, surface, bax, bay):
#pygame.sprite.Sprite.__init__(self)
self.surface = surface
self.x = bax
self.y = bay
self.image = pygame.image.load('textures/proj/purpball1.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (64,64))
self.rect = screen.get_rect()
return
def update(self):
ballstage += 1
global ballstage
if ballstage == 20:
self.image = pygame.image.load('textures/proj/purpball1.png').convert_alpha()
if ballstage == 40:
self.image = pygame.image.load('textures/proj/purpball2.png').convert_alpha()
if ballstage == 60:
self.image = pygame.image.load('textures/proj/purpball3.png').convert_alpha()
if ballstage == 80:
self.image = pygame.image.load('textures/proj/purpball4.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (64,64))
if ballstage == 100:
ballstage = 0
if dir == 'down':
self.y += 1
if dir == 'up':
self.y -= 1
if dir == 'right':
self.x += 1
if dir == 'left':
self.x -= 1
self.surface.blit(self.image, (self.x, self.y))
return
ballGroup = []
pygame.display.update()
while True: #Update
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
pygame.display.update()
while level == 1:
randx = random.randrange(0, 512, 64)
randy = random.randrange(0, 512, 64)
if dir == 'down':
bally += 1
if dir == 'up':
bally -= 1
if dir == 'right':
ballx += 1
if dir == 'left':
ballx -= 1
if x <= -1:
x = 0
if y <= -1:
y = 0
if x >= 449:
x = 448
if y >= 449:
y = 448
screen.blit(background, (0,0))
#screen.blit(skeleton, (randx,randy))
for ball in ballGroup:
Ball = ball(screen, 64,64).update()
char().draw()
skeleton = pygame.transform.scale(skeleton, (64, 64))
background = pygame.transform.scale(background,(512,512))
pygame.display.update()
if left != 0:
x += 1
left -= 8
if right != 0:
x -= 1
right -= 8
if up != 0:
y -= 1
up -= 8
if down != 0:
y += 1
down -= 8
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_d:
#char = pygame.image.load('textures/char/charright1.png')
facing = 'right'
left += 512
if event.key == K_a:
facing = 'left'
#char = pygame.image.load('textures/char/charleft1.png')
right += 512
if event.key == K_s:
facing = 'down'
#char = pygame.image.load('textures/char/chardown1.png')
down += 512
if event.key == K_w:
facing = 'up'
#char = pygame.image.load('textures/char/charup1.png')
up += 512
if event.key == K_SPACE:
if facing == 'down':
dir = 'down'
if facing == 'up':
dir = 'up'
if facing == 'left':
dir = 'left'
if facing == 'right':
dir = 'right'
#ballx = x
#bally = y
#spacetimer = 500
#ballon = 1
ballGroup.append(ball)
if spacetimer != 0:
spacetimer -= 1
ballon = 1
else:
ballon = 0
while level == 0:
#title screen
titletime += 1
screen.blit(titlecard, (0,0))
pygame.display.update()
if selected == -1:
selected = 0
if selected == 0:
titlecard = pygame.image.load('textures/title/titlecard0.png')
if selected == 1:
titlecard = pygame.image.load('textures/title/titlecard1.png')
if selected == 2:
titlecard = pygame.image.load('textures/title/titlecard2.png')
if selected == 3:
selected = 2
if selected == 4:
selected = 5
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_w:
selected -=1
if event.key == K_s:
selected +=1
if event.key == K_RETURN:
if selected == 0:
level = 1
if selected == 1:
titlecard = pygame.image.load('textures/title/credits.png')
selected = 4
if selected == 2:
sys.exit()
if selected == 5:
selected = 1
pygame.display.update()
如果名称 ==&#39; 主要&#39;: main()的
答案 0 :(得分:0)
很抱歉,但很难帮助您解决这个问题,因为代码有点麻烦。我不能自己尝试也不改变它,特别是因为你加载了计算机上的许多图像。尽量使其更易于管理,以便我们更容易查明问题。您可以按照以下步骤操作:
至于试图回答你的问题。在你的代码中没有任何地方存在一颗子弹...你的意思是球吗?在那种情况下,你会做一些我不太了解的特殊事情。
document.array = array
我认为你打算做for ball in ballGroup:
Ball = ball(screen, 64,64).update()
,因为知道你在每个游戏循环的64,64位创造新球。这可能是问题所在。另外,将变量命名为小写,将命名为大写。如果您希望其他人能够轻松阅读和理解您的代码,那么遵循这些约定非常重要。
Here是学习制作pygame游戏的基本机制和结构的好教程。