微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按下键时如何使子弹开火?

如何解决按下键时如何使子弹开火?

因此,我一直在尝试制造子弹,每当玩家按下空格键时,子弹就会射出,但对我来说却没有用。每次我运行代码时,有些东西将无法正常工作,例如子弹不会再回到我身边。我已尝试按照本教程进行操作,但不适用于我: 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 举报,一经查实,本站将立刻删除。