问题描述
我的 pygame 程序有问题。我的子弹没有出现。但我知道,它存在。我尝试了很多东西,但没有任何帮助。我可以让它出现,但随后我的播放器和子弹开始闪烁。请帮忙。我的角色也有一个移动的动画。请先阅读我的代码,然后回答。 Stackoverflow 不会删除我的消息。 Ihr Hurensöhne :)
import random
import pygame
# Intialize the pygame
pygame.init()
# create the screen
screen = pygame.display.set_mode((640,360))
# Background
background = pygame.image.load('SSF2_Final_Valley.png')
walkRight = [pygame.image.load('R1a.png'),pygame.image.load('R2a.png'),pygame.image.load('R3a.png'),pygame.image.load('R4a.png'),pygame.image.load('R5a.png'),pygame.image.load('R6a.png'),pygame.image.load('R7a.png'),pygame.image.load('R8a.png'),pygame.image.load('R9a.png')]
walkLeft = [pygame.image.load('L1a.png'),pygame.image.load('L2a.png'),pygame.image.load('L3a.png'),pygame.image.load('L4a.png'),pygame.image.load('L5a.png'),pygame.image.load('L6a.png'),pygame.image.load('L7a.png'),pygame.image.load('L8a.png'),pygame.image.load('L9a.png')]
char = pygame.image.load('stand.png')
vel = 5
width = 64
screen_width = 640
left = False
right = False
clockobject = pygame.time.Clock()
#player
playerImg = pygame.image.load('stand.png')
playerX = 15
playerY = 290
playerX_change = 0
# Bullet
# Ready - You can't see the bullet on the screen
# Fire - The bullet is currently moving
bulletImg = pygame.image.load('kunai.png')
bulletX = 15
bulletY = 290 - 32
bulletX_change = 3
bulletY_change = 0
bullet_state = "ready"
def redrawGameWindow():
global player
def player(x,y):
global walkCount
screen.blit(background,(0,0))
#chracter wird gezecihnet
if walkCount + 1 >= 20:
walkCount = 0
if left:
screen.blit(walkLeft[walkCount//3],(x,y))
walkCount += 1
elif right:
screen.blit(walkRight[walkCount//3],y))
walkCount += 1
global fire_bullet
def fire_bullet(x,y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletImg,(x + 32,y + 32))
screen.blit(char,y))
"""def fire_bullet(x,y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletImg,y + 32))
pygame.display.update()"""
running = True
while running:
# RGB = Red,Green,Blue
#screen.fill((0,0))
# Background Image
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
exit()
# if keystroke is pressed check whether its right or left
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
if bullet_state is "ready":
# Get the current x cordinate of the spaceship
bulletX = playerX
fire_bullet(bulletX,bulletY)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and playerX > vel:
playerX -= vel
left = True
right = False
elif keys[pygame.K_RIGHT] and playerX < screen_width- width :
playerX += vel
right = True
left = False
else:
right = False
left = False
walkCount = 0
# 5 = 5 + -0.1 -> 5 = 5 - 0.1
# 5 = 5 + 0.1
playerX += playerX_change
"""if playerX <= 0:
playerX = 0
elif playerX >= 640 - 64:
playerX = 608 - 64"""
screen.blit(background,0))
redrawGameWindow()
if bulletX <= 0:
bulletX = 15
bullet_state = "ready"
if bullet_state is "fire":
fire_bullet(bulletX,bulletY)
bulletX += bulletX_change
if (bulletX > screen_width-width):
bullet_state = "ready"
if keys[pygame.K_f]:
playerX = bulletX
player(playerX,playerY)
pygame.display.update()
解决方法
从函数 Country Ranking
0 Greece 100
1 China 200
2 Singapore 300
3 Australia 400
4 Zambia 500
5 France 600
6 Canada 700
中删除函数 player
和 fire_bullet
。 redrawGameWindow
和 player
必须是全局命名空间中的函数。但是 fire_bullet
必须调用函数 redrawGameWindow
和 player
。绘制背景并更新 fire_bullet
中的显示:
redrawGameWindow
在应用程序循环结束时调用 def player(x,y):
global walkCount
if walkCount + 1 >= 20:
walkCount = 0
if left:
screen.blit(walkLeft[walkCount//3],(x,y))
walkCount += 1
elif right:
screen.blit(walkRight[walkCount//3],y))
walkCount += 1
else:
screen.blit(char,y))
def fire_bullet(x,y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletImg,(x + 32,y + 32))
def redrawGameWindow():
screen.blit(background,(0,0))
player(playerX,playerY)
if bullet_state is "fire":
fire_bullet(bulletX,bulletY)
pygame.display.update()
:
redrawGameWindow