使图像多次出现

时间:2018-06-20 20:55:53

标签: python pygame

我在这里一次出现了一个电池图像,它从右移到左然后消失了。我希望电池不断进出,直到玩家击中其中之一。 我的问题是,如何在玩家击中电池之前一直保持电池电量呢?我希望它们分开出现100个单位。

from pygame import * 
import os
import random
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d, %d" %(0, 0)
init()
#set screen size
size = width, height = 800, 600
screen = display.set_mode(size)
#set fonts
fontGame=font.SysFont("Times New Roman", 30)
fontBack=font.SysFont("Ariel", 30)
fontTitle=font.SysFont("Ariel", 100)
fontResearch=font.SysFont ("Times New Roman", 18)
#set button and page to 0
button = 0
page=0

#setting colours
BLACK = (0, 0, 0)
RED = (255,0,0)
GREEN = (0, 255, 0)
BLUE = (106,186,232)
#loading image
backgroundPic=image.load("Background.jpg")
backgroundGame=image.load("gameBackground.jpg")
backgroundGame=transform.scale(backgroundGame,(800,600))
battery=image.load("Battery.png")
battery=transform.scale(battery,(100,100))

backgroundx=0
playerPic=image.load("player.png")
playerPic=transform.scale(playerPic,(70,70))

batteryx=[]


#defining what is going to be shown on the screen
def drawScene(screen, button,page,locationx,locationy): 
    global batteryx
    mx, my = mouse.get_pos() #will get where the mouse is
    #if the user does nothing
    if page==0:
        draw.rect(screen, BLACK, (0,0, width, height))

        screen.fill(BLACK)
        rel_backgroundx= backgroundx % backgroundGame.get_rect().width
        screen.blit(backgroundGame, (rel_backgroundx - backgroundGame.get_rect().width,0))
        if rel_backgroundx < width:
            screen.blit (backgroundGame, (rel_backgroundx,0))
        screen.blit(playerPic,(locationx,locationy))

        screen.blit(battery,(batteryx,420))                
        batteryx-=1               

    display.flip()
    return page

#def collision (battery, playerPic):
    #if battery.colliderect(playerPic):
        #return True
    #return False

running = True
myClock = time.Clock()

KEY_LEFT= False
KEY_RIGHT= False
KEY_UP= False
KEY_DOWN= False
locationx=0
jumping=False
accel=20
onGround= height-150
locationy=onGround

batteryx=random.randrange(50,width,10)  

# Game Loop
while running:
    button=0
    print (KEY_LEFT, KEY_RIGHT)
    for evnt in event.get():             # checks all events that happen
        if evnt.type == QUIT:
            running=False
        if evnt.type == MOUSEBUTTONDOWN:
            mx,my=evnt.pos
            button = evnt.button
        if evnt.type== KEYDOWN:
            if evnt.key==K_LEFT:
                KEY_LEFT= True
                KEY_RIGHT= False
            if evnt.key==K_RIGHT:
                KEY_RIGHT= True
                KEY_LEFT= False
            if evnt.key==K_UP and jumping==False:
                jumping=True 
                accel=20
            if evnt.key== K_DOWN:
                KEY_DOWN= True
                KEY_UP= False 
        if evnt.type==KEYUP:
            if evnt.key==K_LEFT:
                KEY_LEFT= False
            if evnt.key==K_RIGHT:
                KEY_RIGHT= False
            if evnt.key==K_DOWN:
                KEY_DOWN=False

    if KEY_LEFT== True:
        locationx-=10
        backgroundx+=10
    if KEY_RIGHT== True:
        locationx+=10
        backgroundx-=10
    if jumping==True:
        locationy-=accel
        accel-=1
        if locationy>=onGround:
            jumping=False
            locationy=onGround

    #player cannot move off screen
    if locationx<0:
        locationx=0
    if locationx>400:
        locationx=400
    #if collision(battery, playerPic)==True:
        #screen.fill(BLACK)

    page=drawScene(screen,button,page,locationx,locationy)
    myClock.tick(60)  # waits long enough to have 60 fps
    if page==6:  #if last button is clicked program closes
        running=False

quit()

1 个答案:

答案 0 :(得分:0)

创建一个用作电池位置的整流器列表。使用for循环更新rect,并在rect中使电池图像变白。删除离开屏幕的整流器,并添加新的整流器以创建新电池

import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BG_COLOR = pg.Color('gray12')

battery_image = pg.Surface((30, 50))
battery_image.fill(pg.Color('sienna1'))

# Append pygame.Rect objects to this list.
batteries = []
batteries.append(battery_image.get_rect(topleft=(700, 100)))
battery_speed = -5
battery_timer = 40

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True

    # A simple frame based timer.
    battery_timer -= 1
    if battery_timer <= 0:
        battery_timer = 40
        # After 40 frames a new rect gets appended to the list.
        batteries.append(battery_image.get_rect(topleft=(700, 100)))

    temp_list = []
    # Iterate over the rects to update them.
    for battery_rect in batteries:
        battery_rect.x += battery_speed
        # Rects with x <= 50 won't be appended to the temp_list.
        if battery_rect.x > 50:
            temp_list.append(battery_rect)

    # Assign the list with the remaining rects to the batteries variable.
    batteries = temp_list

    # Blit everything.
    screen.fill(BG_COLOR)
    for battery_rect in batteries:
        screen.blit(battery_image, battery_rect)
    pg.display.flip()
    clock.tick(30)

pg.quit()