首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pacman循环问题,图像无法显示/移动

pacman循环问题,图像无法显示/移动
EN

Stack Overflow用户
提问于 2013-04-16 09:56:23
回答 1查看 124关注 0票数 0

好的,所以我做了一个吃豆人任务(已经张贴了基本的吃豆人和幽灵在屏幕上移动和吃豆人弹出他们,但是当鼠标被点击时,鬼弹他的鬼弹和改变为一个“害怕的图像”,据我所能告诉我解决了我的局部错误等。然而,现在我的代码似乎没有显示任何精灵。当我将末尾的框架和边界代码移动到顶部时,它们都显示在屏幕的一个点上,没有任何移动。有什么建议吗?

代码语言:javascript
复制
import pygame
from random import *

#Core values/images for game 
pygame.init()


#define ghost collisons in orignal mode to alter pacmans movement

def ghost_collision():

    pacman_velocity[0] = randint(-1,1)
    pacman_velocity[1] = randint(-1,1)
    if pacman_velocity[0] < 0:
        pacman = pygame.image.load(PACMAN_LEFT).convert()
    elif pacman_velocity[0] > 0:
        pacman = pygame.image.load(PACMAN_RIGHT).convert()
    return pacman_velocity

#define mode 2 as ghosts changing to scared and bouncing off pacman
def mode_switch():

    global blue_right, orange_right, pink_right,\
          red_right, blue, orange, pink, red
    global mode
    if mode == False:
        mode = True
        blue = pygame.image.load(GHOST_SCARED).convert()
        orange = pygame.image.load(GHOST_SCARED).convert()
        pink = pygame.image.load(GHOST_SCARED).convert()
        red = pygame.image.load(GHOST_SCARED).convert()
    else:
        mode = False
        if blue_right == True:
            blue = pygame.image.load(BLUE_LEFT).convert()
            blue_right = False
        else:
            blue = pygame.image.load(BLUE_RIGHT).convert()
            blue_right = True
    if orange_right == True:
        orange = pygame.image.load(ORANGE_LEFT).convert()
        orange_right = False
    else:
        orange = pygame.image.load(ORANGE_RIGHT).convert()
        orange_right = True
    if pink_right == True:
        pink = pygame.image.load(PINK_LEFT).convert()
        pink_right = False
    else:
        pink = pygame.image.load(PINK_RIGHT).convert()
        pink_right = True
    if red_right == True:
        red = pygame.image.load(RED_LEFT).convert()
        red_right = False
    else:
        red = pygame.image.load(RED_RIGHT).convert()
        red_right = True

PACMAN_LEFT = 'pacman-left.png'
PACMAN_RIGHT = 'pacman-right.png'
BLUE_LEFT = 'blue-left.png'
BLUE_RIGHT = 'blue-right.png'
ORANGE_LEFT = 'orange-left.png'
ORANGE_RIGHT = 'orange-right.png'
PINK_LEFT = 'pink-left.png'
PINK_RIGHT = 'pink-right.png'
RED_LEFT = 'red-left.png'
RED_RIGHT = 'red-right.png'
GHOST_SCARED = 'vulnerable.png'
BOUNCE_SOUND = 'Thump.wav'
SOUND = pygame.mixer.Sound(BOUNCE_SOUND)
WIDTH = 1200
HEIGHT = 800
BACKGROUND_COLOUR = 0, 0, 0
CAPTION = 'Pacman'

pacman_left = True
pacman_right = True
blue_right = False
orange_right = True
pink_right = False
red_right = True
mode = False

frame = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption(CAPTION)
pacman = pygame.image.load(PACMAN_RIGHT).convert()

#Sprites and defined boundaries
pacman_boundary = pacman.get_rect(center = (300,300))
pacman_velocity = [1, 1]
blue = pygame.image.load(BLUE_LEFT).convert()
blue_boundary = pacman.get_rect(center = (300,300))
blue_velocity = [-1, -1]
orange = pygame.image.load(ORANGE_RIGHT).convert()
orange_boundary = pacman.get_rect(center = (300,300))
orange_velocity = [1, -1]
pink = pygame.image.load(PINK_LEFT).convert()
pink_boundary = pacman.get_rect(center = (300,300))
pink_velocity = [-1, 1]
red = pygame.image.load(RED_RIGHT).convert()
red_boundary = pacman.get_rect(center = (300,300))
red_velocity = [1, 1]

finished = False
while not finished:
    pygame.event.pump()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            finished = True
        if event.type == pygame.MOUSEBUTTONUP:
            mode_switch()


    #####################################################
# Boundary sets for all sprite's (could use list but lack skill and time)
if pacman_boundary.left < 0 or pacman_boundary.right > WIDTH:
    SOUND.play()
    pacman_velocity[0] = -1 * pacman_velocity[0]
    if pacman_velocity[0] < 0:
        pacman = pygame.image.load(PACMAN_LEFT).convert()
    elif pacman_velocity[0] > 0:
        pacman = pygame.image.load(PACMAN_RIGHT).convert()
    pacman_velocity[1] = randint(-1,1)

if pacman_boundary.top < 0 or pacman_boundary.bottom > HEIGHT:
    SOUND.play()
    pacman_velocity[1] = -1 * pacman_velocity[1]

if mode == False:        
    if pacman_boundary.colliderect(blue_boundary)\
       or pacman_boundary.colliderect(orange_boundary)\
       or pacman_boundary.colliderect(pink_boundary)\
       or pacman_boundary.colliderect(red_boundary):
        ghost_collision()

    #####################################################

if blue_boundary.left < 0 or blue_boundary.right > WIDTH:
    blue_velocity[0] = -1 * blue_velocity[0]
    if mode == False:
        if blue_right == True:
            blue = pygame.image.load(BLUE_LEFT).convert()
            blue_right = False
        else:
            blue = pygame.image.load(BLUE_RIGHT).convert()
            blue_right = True

if blue_boundary.top < 0 or blue_boundary.bottom > HEIGHT:
    SOUND.play()
    blue_velocity[1] = -1 * blue_velocity[1]

if mode == True:
    if pacman_boundary.colliderect(blue_boundary):

        blue_velocity[0] = randint(-1,1)
        blue_velocity[1] = randint(-1,1)



#####################################################

if orange_boundary.left < 0 or orange_boundary.right > WIDTH:
    orange_velocity[0] = -1 * orange_velocity[0]
    if mode == False:
        if orange_right == True:
            orange = pygame.image.load(ORANGE_LEFT).convert()
            orange_right = False
        else:
            orange = pygame.image.load(ORANGE_RIGHT).convert()
            orange_right = True

if orange_boundary.top < 0 or orange_boundary.bottom > HEIGHT:
    SOUND.play()
    orange_velocity[1] = -1 * orange_velocity[1]

if mode == True:
    if pacman_boundary.colliderect(orange_boundary):
        orange_velocity[0] = randint(-1,1)
        orange_velocity[1] = randint(-1,1)


#####################################################

if pink_boundary.left < 0 or pink_boundary.right > WIDTH:#
    pink_velocity[0] = -1 * pink_velocity[0]
    if mode == False:
        if pink_right == True:
            pink = pygame.image.load(PINK_LEFT).convert()
            pink_right = False
        else:
            pink = pygame.image.load(PINK_RIGHT).convert()
            pink_right = True

if pink_boundary.top < 0 or pink_boundary.bottom > HEIGHT:
    SOUND.play()
    pink_velocity[1] = -1 * pink_velocity[1]

if mode == True:
    if pacman_boundary.colliderect(pink_boundary):
        pink_velocity[0] = randint(-1,1)
        pink_velocity[1] = randint(-1,1)


#####################################################

if red_boundary.left < 0 or red_boundary.right > WIDTH:
    red_velocity[0] = -1 * red_velocity[0]
    if mode == False:
        if red_right == True:
            red = pygame.image.load(RED_LEFT).convert()
            red_right = False
        else:
            red = pygame.image.load(RED_RIGHT).convert()
            red_right = True

if red_boundary.top < 0 or red_boundary.bottom > HEIGHT:
    SOUND.play()
    red_velocity[1] = -1 * red_velocity[1]

if mode == True:
    if pacman_boundary.colliderect(red_boundary):
        red_velocity[0] = randint(-1,1)
        red_velocity[1] = randint(-1,1)


#####################################################


pacman_boundary = pacman_boundary.move(pacman_velocity)
blue_boundary = blue_boundary.move(blue_velocity)
orange_boundary = orange_boundary.move(orange_velocity)
pink_boundary = pink_boundary.move(pink_velocity)
red_boundary = red_boundary.move(red_velocity)
frame.fill(BACKGROUND_COLOUR)
frame.blit(pacman, pacman_boundary)
frame.blit(blue, blue_boundary)
frame.blit(orange, orange_boundary)
frame.blit(pink, pink_boundary)
frame.blit(red, red_boundary)
pygame.display.flip()


pygame.quit()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-16 11:59:05

除非post的格式设置为off,否则看起来您所有的游戏循环逻辑现在都在循环之外。请记住,Python对缩进很敏感,因此所有以以下开头的代码:

代码语言:javascript
复制
if pacman_boundary.left < 0 or pacman_boundary.right > WIDTH:

不在循环中:

代码语言:javascript
复制
finished = False
while not finished:

你所有的绘制代码都发生在游戏循环之后,所以在当前的形式下,它只会被渲染一次,就在pygame.quit()被调用之前。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16027526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档