在pygame

时间:2016-10-07 08:54:47

标签: pygame blit

第一次在pygame中制作东西...... 我正在尝试生成图像的多个实例,然后从下到上滚动它们。由于某种原因,原始图像放置,而另一个图像移动到预期。我也试图在屏幕最左边的四分之一或最右边的四分之一处生成图像的实例。我的图片只显示在左侧。我的gameDisplay是1150x500像素。 关于如何纠正我的代码的任何提示将不胜感激!

这是我使用的方法:

def gameHighScore():  
    points=0
    guesses=0
    time=0

    balloons= pygame.image.load("balloons.png") 

    objects=[]

    for i in range (4):
        xpos= random.randrange(0, round(display_width/4)) or random.randrange(round((3/4)*display_width), display_width)
        #object generated at start height 400, random xpos with a speed -i*2
        o=Balloons(balloons, 400, xpos ,-i*2)           
        objects.append(o) 


    gamehs=True
    while gamehs:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                quit()
            if event.type==pygame.KEYDOWN:
                if event.key==pygame.K_SPACE:   # space for continue
                    paused=False
                    gameTimer.start()
                elif event.key==pygame.K_q: #q for quit
                    pygame.quit()
                    quit()



        for o in objects:
            gameDisplay.fill(BLACK)
            message_to_screen("HIGH SCORE", WHITE, y_displace=-100, size="large")
            message_to_screen(" You scored " +str(points) +" points", WHITE, y_displace=0, size="medium")
            message_to_screen("in " +str(time) +" after " +str(guesses) +" guesses", WHITE, y_displace=50, size="medium")
            button("Play (space bar)", 300,400,250,50, GRAY, BLUE, action ="continue")
            button("Quit (Q)", 600,400,250,50, GRAY, BLUE, action ="quit")
        for o in objects:
            o.move()
            gameDisplay.blit(o.image, o.pos)


        pygame.display.update()
        clock.tick(30)              #static screen, no need for high fps

这是移动物体的类:

class Balloons:

    def __init__(self, image, height, xpos, speed):
        self.speed=speed
        self.image=image
        self.xpos=xpos
        self.pos=image.get_rect().move(xpos, height)             #momve(x,y) change x to random

    def move(self):
        self.pos=self.pos.move(0, self.speed)
        if self.pos.top< -200:
            self.pos.bottom=800

1 个答案:

答案 0 :(得分:1)

这里有几件事情。

特别是,这条线有一些问题......

xpos= random.randrange(0, round(display_width/4)) or random.randrange(round((3/4)*display_width), display_width)

(3/4)评估为ZERO,因为它们是整数。但更大的问题是你使用or,这不是你认为它正在做的事情。 or将使用左边的第一个表达式并使用它,除非它是False。因为在randrange选择0的情况下这只是假,所以右手边永远不会被评估。我会做这样的事情......

# pick a random position in a quarter-size of the screen.
xpos = int(random.random() * display_width / 4)

# 50% chance of offsetting that position to the right quarter of the screen.
if random.random() < .5: xpos += display_width * 3 / 4

关于为什么您的某个图片始终保持不变:您根据for i in range(4)分配速度。其中一个图像的i值为0,因此速度为0.