为了账号安全,请及时绑定邮箱和手机立即绑定

Pygame角色不会向左或向右移动

Pygame角色不会向左或向右移动

一只甜甜圈 2022-07-12 14:47:36
在我下面使用 PyGame 的代码中,角色不会左右移动,子弹也不会射击。我不确定是什么原因造成的。它可以在没有带有按钮概念的整个开始菜单的情况下工作,所以我想知道这是否是问题所在?import pygamefrom pygame import mixerimport mathimport randomimport time# Initialize pygame modulepygame.init()# Create the screenscreen = pygame.display.set_mode((800, 600))display_width = 800display_height = 600# Backgroundbackground = pygame.image.load('space1.jpg')# Background Soundmixer.music.load('background.wav')mixer.music.play(-1)# Title and Iconpygame.display.set_caption('Space Invaders')icon = pygame.image.load('ufo.png')pygame.display.set_icon(icon)# PlayerplayerImg = pygame.image.load('space-invaders.png')playerX = 370playerY = 480player_change = 0playerX += player_change# EnemyenemyImg = []enemyX = []enemyY = []enemyX_change = []enemyY_change = []num_of_enemies = 6# ColoursWHITE = (255, 255, 255)BLACK = (0, 0, 0)RED = (150, 0, 0)GREEN = (0, 150, 0)BRIGHT_RED = (255, 0,0)BRIGHT_GREEN = (0, 255, 0)for i in range(num_of_enemies):    enemyImg.append(pygame.image.load('alien.png'))    enemyX.append(random.randint(0, 736))    enemyY.append(random.randint(50, 150))    enemyX_change.append(2)    enemyY_change.append(40)# Bullet# Ready - You cant see the bullet on the screen# Fire - The bullet is current movingbulletImg = pygame.image.load('bullet.png')bulletX = 0bulletY = 480bulletY_change = 10bullet_state = 'ready'# Scorescore_value = 0font = pygame.font.Font('freesansbold.ttf', 32)textX = 10textY = 10# Game Over Textover_font = pygame.font.Font('freesansbold.ttf', 64)# Clockclock = pygame.time.Clock()def show_score(x, y):    score = font.render('score : ' + str(score_value), True, (0, 255, 0))    screen.blit(score, (x, y))def game_over_text():    over_text = over_font.render('GAME OVER', True, (0, 255, 0))    screen.blit(over_text, (200, 250))def player(x, y):    screen.blit(playerImg, (x, y))def enemy(x, y, i):    screen.blit(enemyImg[i], (x, y))
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

角色不会移动


player_change在主应用程序循环中,播放器的移动连续设置为 0。此外,玩家的位置不断初始化:


def game_loop(playerX, playerY, player_change, bulletX, bulletY, bulletX_change, >bulletY_change, bullet_state, bulletImg):

   running = True

   while running:

       playerX = 370

       playerY = 480

       player_change = 0

初始化playerX,playerY和player_change循环之前:


def game_loop(playerX, playerY, player_change, bulletX, bulletY, bulletX_change, bulletY_change, bullet_state, bulletImg):

    running = True

    player_change = 0

    playerX = 370

    playerY = 480

    while running:    

        playerX += player_change

        # [...]

子弹不会射


如果要发射子弹,则必须设置子弹的初始位置bulletX, bulletY = playerX, playerY并设置bullet_state = 'fire':


def game_loop(playerX, playerY, player_change, bulletX, bulletY, bulletX_change, bulletY_change, bullet_state, bulletImg):

    # [...]    


    while running:    

        playerX += player_change


        for event in pygame.event.get():

            if event.type == pygame.QUIT:

                running = False


            # If keystroke is pressed check whether its left or right

            if event.type == pygame.KEYDOWN:

                # [...]               


                if event.key == pygame.K_SPACE:

                    if bullet_state is 'ready':

                        #bullet_sound = mixer.Sound('laser.wav')

                        #bullet_sound.play()

                        # Get the current x coordinate of the spaceship

                        bulletX, bulletY = playerX, playerY

                        bullet_state = 'fire'

注意,global变量bullet_state


def fire_bullet(x, y):

   global bullet_state

   bullet_state = 'fire'

与 中的局部变量不同bullet_state,game_loop因为bullet_state它是一个参数game_loop,因此在不同的范围内是一个完全不同的变量,其名称随便相同:


def game_loop(playerX, playerY, player_change, bulletX, bulletY, 

              bulletX_change, bulletY_change, 

              bullet_state, # <--- that is a new variable in local scope

                            #      and not the "global" bullet_state

              bulletImg):

    # [...]


查看完整回答
反对 回复 2022-07-12
?
千巷猫影

TA贡献1829条经验 获得超7个赞

     player_change = 0
        playerX += player_change

尝试交换这两行的顺序。否则,当 X 位置更新时,更改将始终为零。


查看完整回答
反对 回复 2022-07-12
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号