如何解决按下键时如何使子弹开火?
因此,我一直在尝试制造子弹,每当玩家按下空格键时,子弹就会射出,但对我来说却没有用。每次我运行代码时,有些东西将无法正常工作,例如子弹不会再回到我身边。我已尝试按照本教程进行操作,但不适用于我: https://techwithtim.net/tutorials/game-development-with-python/pygame-tutorial/projectiles/
以下是发生的情况的简短片段: https://gyazo.com/a7d758d54cf52c8623efdf86f47d92d5
它看起来什么都不是,但是我按空格键却没有任何反应。这是我得到的错误:
herog.append(herogun(playerman.x + playerman.width //2,round(playerman.y + playerman.height//2,(255,255,255))))
TypeError: 'tuple' object cannot be interpreted as an integer
这是我遇到的问题:
if keys[pygame.K_SPACE]:
if len(herog) <5:
herogun.append(herogun(playerman.x + playerman.width //2,255))))
这是我的完整代码:
import pygame
pygame.init()
# Build The Screen
window = pygame.display.set_mode((700,500))
# Name Screen
pygame.display.set_caption("Noobs first Game")
bg = pygame.image.load("skybg1.png")
bg_shift = 0
# Class Player
class player:
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.speed = 5
self.rect = pygame.Rect(x,height)
self.ss1 = pygame.image.load("heroplane1.png")
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
def draw(self):
self.rect.topleft=(self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
player_rect = self.ss1.get_rect(center = self.rect.center)
player_rect.centerx += -7
player_rect.centery += -6
window.blit(self.ss1,player_rect)
# Class Enemy
class enemy:
def __init__(self,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.speed = 4
self.color = color
self.rect = pygame.Rect(x,height)
self.ss1 = pygame.image.load("enemyplane1.png")
self.ss1 = pygame.transform.scale(self.ss1,self.ss1.get_height()//9))
def draw(self):
self.rect.topleft = (self.x,self.rect)
enemy_rect = self.ss1.get_rect(center = self.rect.center)
enemy_rect.centerx += -2
enemy_rect.centery += -6
window.blit(self.ss1,enemy_rect)
# Class Enemy2
class enemy2:
def __init__(self,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.rect = pygame.Rect(x,height)
self.ss1 = pygame.image.load("enemyplane2.png")
self.ss1 = pygame.transform.scale(self.ss1,self.rect)
enemy2_rect = self.ss1.get_rect(center = self.rect.center)
enemy2_rect.centerx += -4
enemy2_rect.centery += -6
window.blit(self.ss1,enemy2_rect)
# Class Enemy3
class enemy3:
def __init__(self,height)
self.ss1 = pygame.image.load("enemyplane3.png")
self.ss1 = pygame.transform.scale(self.ss1,self.rect)
enemy3_rect = self.ss1.get_rect(center = self.rect.center)
enemy3_rect.centerx += -4
enemy3_rect.centery += -6
window.blit(self.ss1,enemy3_rect)
class herogun:
def __init__(self,color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
self.speed = 2
self.rect = pygame.Rect(x,height)
self.ss1 = pygame.image.load("herogun1.png")
self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//11,self.ss1.get_height()//11))
def draw(self):
self.rect.topleft = (self.x,self.rect)
enemy3_rect = self.ss1.get_rect(center = self.rect.center)
enemy3_rect.centerx += -7
enemy3_rect.centery += -2
window.blit(self.ss1,enemy3_rect)
class enemygun:
def __init__(self,height)
self.ss1 = pygame.image.load("enemygun1.png")
self.ss1 = pygame.transform.scale(self.ss1,enemy3_rect)
# Color
white = (255,255)
# Draw Player
playerman = player(5,250,90,40,white)
# For Enemy
enemy1 = enemy(400,100,white)
enemy4 = enemy(400,400,white)
# For Enemy2
enemy21 = enemy2(400,300,white)
# For Enemy3
ememy31 = enemy3(400,white)
gun1 = herogun(250,30,20,white)
gun2 = herogun(250,white)
egun1 = enemygun(250,white)
enemys = [enemy1,enemy4]
herog = [gun1,gun2]
# enemys
enemyGroup = pygame.sprite.Group()
level1 = [
" 1"," 1",]
for iy,row in enumerate(level1):
for ix,col in enumerate(row):
if col == "1":
new_enemy = enemy(ix*70,iy*70,255))
enemys.append(new_enemy)
# Redrawwinodw
def redrawwindow():
window.fill((0,0))
bg_width = bg.get_width()
bg_offset = bg_shift % bg_width
window.blit(bg,(-bg_offset,0))
window.blit(bg,(bg_width - bg_offset,0))
# Draw playerman
playerman.draw()
# Draw enemy
for enemy in enemys:
enemy.draw()
# Draw enemy2
enemy21.draw()
# Draw enemy3
ememy31.draw()
# Draw herogun
gun1.draw()
# Draw enemygun
egun1.draw()
# FPS Cnd Clock
fps = (30)
clock = pygame.time.Clock()
# Main Loop
run = True
while run:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
for herogun in herog:
if herogun.x < 700 and herogun.x > 0:
herogun.x += herogun.speed
else:
herog.pop(herog.index(herogun))
for enemy in enemys:
enemy.x -= enemy.speed
bg_shift += round(3/2)
# Keys For Playerman
keys = pygame.key.get_pressed()
if keys[pygame.K_a] and playerman.x > playerman.speed:
playerman.x -= playerman.speed
if keys[pygame.K_d] and playerman.x < 260 - playerman.width - playerman.speed:
playerman.x += playerman.speed
if keys[pygame.K_w] and playerman.y > playerman.speed:
playerman.y -= playerman.speed
if keys[pygame.K_s] and playerman.y < 500 - playerman.height - playerman.speed:
playerman.y += playerman.speed
if keys[pygame.K_SPACE]:
if len(herog) <5:
herogun.append(herogun(playerman.x + playerman.width //2,255))))
# Update And Other Sutff
redrawwindow()
pygame.display.update()
pygame.quit()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。