简体   繁体   English

pygame暂停键

[英]Pygame pause key

I am making a game for android in pygame here is my code: 我在pygame中为Android制作游戏,这是我的代码:

import pygame, sys
from pygame.locals import * 

try:
    import Android
except ImportError:
    Android = None

pygame.init()

if Android:
    android.init()
    android.map_key(android.KEYCODE_BACK, pygame.K_ESCAPE)

size = width, height = 1276,650
screen = pygame.display.set_mode(size)

r = 0
bif = pygame.image.load("map.png") 
pygame.display.set_caption("Pygame 2D RPG !")
x,y=0,0
movex, movey=0,0
character="boy.png"
player=pygame.image.load(character).convert_alpha()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type==KEYDOWN:
            if event.key==K_a:
                movex=-1
            elif event.key==K_d:
                movex=+1
            elif event.key==K_w:
                movey=-1
            elif event.key==K_s:
                movey=+1
        if event.type==KEYUP:
            if event.key==K_a:
                movex=0
            elif event.key==K_d:
                movex=0
            elif event.key==K_w:
                movey=0
            elif event.key==K_s:
                movey=0
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()
    x+=movex
    y+=movey
    screen.fill((r,0,0))
    screen.blit(bif,(0,0))
    screen.blit(player,(x,y)) 

    pygame.display.update() 
  1. Could any one give me a link to resources where I could learn pygame. 任何人都可以给我一个指向可以学习pygame的资源的链接。

  2. Say in my game when I press "q" then it pauses the game and when I press it again it unfreezes could any one give me a advice as how to do this. 在我的游戏中说,当我按下“ q”时,它将暂停游戏;当我再次按下它时,它会冻结,任何人都可以向我提出如何执行此操作的建议。 I now this is a bit vague however so what is mean is whenever the "q" key is presses it stops the character from moving and everything stops. 我现在这有点含糊,所以意思是每按一次“ q”键,字符就会停止移动,一切都停止。

Free ebooks (PDF) 免费电子书(PDF)

Pause make more or less like this: 暂停或多或少是这样的:

self.PAUSED = False

while True:
    for event in pygame.event.get():
        if event.type==KEYDOWN:
            if event.key==K_q:
                self.PAUSED = not self.PAUSED


    if not self.PAUSED:

        x+=movex
        y+=movey
        screen.fill((r,0,0))
        screen.blit(bif,(0,0))
        screen.blit(player,(x,y)) 

        pygame.display.update() 

EDIT: 编辑:

You don't have code in classes so you have to use PAUSED without self. 您在类中没有代码,因此必须在没有self.情况下使用PAUSED self.

Working code with paused screen and keyboard and with text "PAUSED" 屏幕和键盘已暂停且文本为“ PAUSED”的工作代码

import pygame, sys
from pygame.locals import * 

try:
    import Android
except ImportError:
    Android = None

pygame.init()

if Android:
    android.init()
    android.map_key(android.KEYCODE_BACK, pygame.K_ESCAPE)

size = width, height = 1276,650
screen = pygame.display.set_mode(size)

r = 0
bif = pygame.image.load("map.png") 
pygame.display.set_caption("Pygame 2D RPG !")
x,y=0,0
movex, movey=0,0
character="boy.png"
player=pygame.image.load(character).convert_alpha()

PAUSED = False
font = pygame.font.SysFont("serif", 72)
text_paused = font.render("PAUSED", True, (255, 0, 0))

while True:

    # --- events ---

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type==KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
            elif event.key==K_q:
                PAUSED = not PAUSED

        if not PAUSED:
            if event.type==KEYDOWN:
                if event.key==K_a:
                    movex=-1
                elif event.key==K_d:
                    movex=+1
                elif event.key==K_w:
                    movey=-1
                elif event.key==K_s:
                    movey=+1
            if event.type==KEYUP:
                if event.key==K_a:
                    movex=0
                elif event.key==K_d:
                    movex=0
                elif event.key==K_w:
                    movey=0
                elif event.key==K_s:
                    movey=0

    # --- changing values ---

    if not PAUSED:
        x+=movex
        y+=movey

    # --- drawing ---

    screen.fill((r,0,0))
    screen.blit(bif,(0,0))
    screen.blit(player,(x,y)) 

    if PAUSED:
        screen.blit(text_paused, (100, 100))

    pygame.display.update() 

EDIT: 编辑:

Version (more or less) with classes 具有类的版本(或多或少)

import pygame, sys
from pygame.locals import * 

try:
    import Android
except ImportError:
    Android = None


#----------------------------------------------------------------------

class Background():

    def __init__(self, screen):

        self.screen = screen

        self.x = 0
        self.y = 0

        self.r = 0

        filename = "maps.png" # "start_screen.jpg" #

        self.image = pygame.image.load(filename).convert_alpha()

    def draw(self):
        self.screen.fill((self.r,0,0))
        self.screen.blit(self.image, (self.x, self.y))


#----------------------------------------------------------------------

class Player():

    def __init__(self, screen):

        self.screen = screen

        self.x = 0
        self.y = 0
        self.movex = 0
        self.movey = 0

        filename = "boy.png" # "jar.png" # 

        self.image = pygame.image.load(filename).convert_alpha()

    def move(self):
        self.x += self.movex
        self.y += self.movey        

    def draw(self):
        self.screen.blit(self.image, (self.x, self.y))

    def events(self, event):

        if event.type == KEYDOWN:
            if event.key == K_a:
                self.movex = -1
            elif event.key == K_d:
                self.movex = +1
            elif event.key == K_w:
                self.movey = -1
            elif event.key == K_s:
                self.movey = +1

        if event.type==KEYUP:
            if event.key == K_a:
                self.movex = 0
            elif event.key == K_d:
                self.movex = 0
            elif event.key == K_w:
                self.movey = 0
            elif event.key == K_s:
                self.movey = 0

#----------------------------------------------------------------------

class Game():

    def __init__(self):

        pygame.init()

        if Android:
            android.init()
            android.map_key(android.KEYCODE_BACK, pygame.K_ESCAPE)

        self.size = self.width, self.height = 1276, 650
        self.screen = pygame.display.set_mode(self.size)

        pygame.display.set_caption("Pygame 2D RPG !")

        self.background = Background(self.screen)
        self.player = Player(self.screen)

        font = pygame.font.SysFont("serif", 72)
        self.text_paused = font.render("PAUSED", True, (255, 0, 0))

    def run(self):

        PAUSED = False

        RUNNING = True

        while RUNNING:

            # --- events ---

            for event in pygame.event.get():

                if event.type == pygame.QUIT:
                    RUNNING = False

                if event.type==KEYDOWN:
                    if event.key == K_ESCAPE:
                        RUNNING = False
                    elif event.key==K_q:
                        PAUSED = not PAUSED

                if not PAUSED:
                    self.player.events(event)

            # --- changing values ---

            if not PAUSED:
                self.player.move()

            # --- drawing ---

            self.background.draw()
            self.player.draw()

            if PAUSED:
                self.screen.blit(self.text_paused, (100, 100))

            pygame.display.update() 

        pygame.quit()
        sys.exit()

#----------------------------------------------------------------------

if __name__ == '__main__':
    Game().run()

http://www.pygame.org/wiki/tutorials looks like a great place for some tutorials. http://www.pygame.org/wiki/tutorials看起来像是一些教程的好地方。 I'm not sure how advanced your looking for, so they might be a bit basic. 我不确定您的搜索有多高级,因此它们可能有点基础。 At a first glance this looks pretty good: http://programarcadegames.com/index.php?chapter=bitmapped_graphics_and_sound&lang=en#section_12 乍一看,这看起来不错: http : //programarcadegames.com/index.php?chapter=bitmapped_graphics_and_sound&lang=en#section_12

It's probably a very clunky way of doing it, but you could create an infinite loop that repeats until you press the q key again: 这可能是一个很笨拙的方法,但是您可以创建一个无限循环,该循环重复执行,直到再次按下q键:

if <q key pressed>:
    while 1:
        sleep(1)
        if <q key pressed>:
             break

is a rather simplified version. 是一个相当简化的版本。

The default Punch the chimp tutorial is a pretty good place to start. 默认的“ 打孔黑猩猩”教程是一个很好的起点。 Specifically, you should look at their usage of pygame.time.Clock.tick to limit framerate. 具体来说,您应该查看pygame.time.Clock.tick的用法以限制帧速率。

Once you have a game loop, the easiest way to pause is to use "event.wait()", which stops and waits until an event happens. 一旦出现游戏循环,最简单的暂停方法是使用“ event.wait()”,该事件将停止并等待事件发生。 You just use this to wait until the unpause is pressed, and continue the event loop. 您只需要使用它来等待按下暂停键,然后继续事件循环。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM