1

pygameでゲームを表示しようとしています。しかし、それは何らかの理由で機能しません、何かアイデアはありますか?これが私のコードです:

import pygame, sys
from pygame.locals import *
pygame.init()
screen=pygame.display.set_mode((640,360),0,32)
pygame.display.set_caption("My Game")
p = 1
green = (0,255,0)
pacman ="imgres.jpeg"
pacman_x = 0
pacman_y = 0
while True:
    pacman_obj=pygame.image.load(pacman).convert()
    screen.blit(pacman_obj, (pacman_x,pacman_y))
    blue = (0,0,255)
    screen.fill(blue)
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type==KEYDOWN:
            if event.key==K_LEFT:
                p=0
    pygame.display.update()
4

4 に答える 4

7

私は実際にこれを実行していないので、単なる推測です:

画面が青く表示されているだけで、パックマンの画像が表示されていませんか? パックマンを画面にブリットしてから screen.fill(blue) を実行している可能性があります。これは基本的にパックマンの画像を青で上書きしています。コード内でこれらの手順を逆にしてみてください (つまり、画面を青く塗りつぶしてから pacman をブリットします)。

于 2012-06-18T21:40:33.940 に答える
2

画面が青く表示される場合は、実行後に画像を「ブリット」する必要があるためですscreen.fill

また、青は上部で定義する必要があり、別のループにある必要があります。ここに私がそれを行う方法があります:

    import pygame, sys
    from pygame.locals import *
    pygame.init()
    screen=pygame.display.set_mode((640,360),0,32)
    pygame.display.set_caption("My Game")
    p = 1
    green = (0,255,0)
    blue = (0,0,255)
    pacman ="imgres.jpeg"
    pacman_x = 0
    pacman_y = 0
    pacman_obj=pygame.image.load(pacman).convert()
    done = False
    clock=pygame.time.Clock()
    while done==False:
        for event in pygame.event.get(): 
            if event.type == pygame.QUIT:
                done=True
            if event.type==KEYDOWN:
                if event.key==K_LEFT:
                    p=0
        screen.fill(blue)
        screen.blit(pacman_obj, (pacman_x,pacman_y))

        pygame.display.flip()
        clock.tick(100)

    pygame.quit()
于 2013-04-07T03:23:11.960 に答える
1

ノート:

  • フレームごとに新しい画像を作成しています。これは遅いです。
  • ブリットの座標はRect()s

更新されたコードは次のとおりです。

WINDOW_TITLE = "hi world - draw image "

import pygame
from pygame.locals import *
from pygame.sprite import Sprite
import random
import os

class Pacman(Sprite):
    """basic pacman, deriving pygame.sprite.Sprite"""
    def __init__(self, file=None):
        """create surface"""
        Sprite.__init__(self)
        # get main screen, save for later
        self.screen = pygame.display.get_surface()                

        if file is None: file = os.path.join('data','pacman.jpg')
        self.load(file)

    def draw(self):
        """draw to screen"""
        self.screen.blit(self.image, self.rect)

    def load(self, filename):
        """load file"""
        self.image = pygame.image.load(filename).convert_alpha()
        self.rect = self.image.get_rect()      

class Game(object):
    """game Main entry point. handles intialization of game and graphics, as well as game loop"""    
    done = False
    color_bg = Color('seagreen') # or also: Color(50,50,50) , or: Color('#fefefe')

    def __init__(self, width=800, height=600):
        """Initialize PyGame window.

        variables:
            width, height = screen width, height
            screen = main video surface, to draw on

            fps_max     = framerate limit to the max fps
            limit_fps   = boolean toggles capping FPS, to share cpu, or let it run free.
            color_bg    = backround color, accepts many formats. see: pygame.Color() for details
        """
        pygame.init()

        # save w, h, and screen
        self.width, self.height = width, height
        self.screen = pygame.display.set_mode(( self.width, self.height ))
        pygame.display.set_caption( WINDOW_TITLE )        

        # fps clock, limits max fps
        self.clock = pygame.time.Clock()
        self.limit_fps = True
        self.fps_max = 40        

        self.pacman = Pacman()

    def main_loop(self):
        """Game() main loop.
        Normally goes like this:

            1. player input
            2. move stuff
            3. draw stuff
        """
        while not self.done:
            # get input            
            self.handle_events()

            # move stuff            
            self.update()

            # draw stuff
            self.draw()

            # cap FPS if: limit_fps == True
            if self.limit_fps: self.clock.tick( self.fps_max )
            else: self.clock.tick()

    def draw(self):
        """draw screen"""
        # clear screen."
        self.screen.fill( self.color_bg )

        # draw code
        self.pacman.draw()

        # update / flip screen.
        pygame.display.flip()

    def update(self):
        """move guys."""
        self.pacman.rect.left += 10

    def handle_events(self):
        """handle events: keyboard, mouse, etc."""
        events = pygame.event.get()

        for event in events:
            if event.type == pygame.QUIT: self.done = True
            # event: keydown
            elif event.type == KEYDOWN:
                if event.key == K_ESCAPE: self.done = True

if __name__ == "__main__": 
    game = Game()
    game.main_loop()    
于 2012-06-19T23:28:43.883 に答える
-1

最初に画像をブリットしてから BLUE で塗りつぶします。そのため、ブルー スクリーンのみが表示される場合があります。

解決策: 最初に画面を青く塗りつぶしてからブリットします。

import pygame, sys
from pygame.locals import *
pygame.init()
screen=pygame.display.set_mode((640,360),0,32)
pygame.display.set_caption("My Game")
p = 1
green = (0,255,0)
pacman ="imgres.jpeg"
pacman_x = 0
pacman_y = 0
while True:
    pacman_obj=pygame.image.load(pacman).convert()
    
    blue = (0,0,255)
    screen.fill(blue)   # first fill screen with blue
    screen.blit(pacman_obj, (pacman_x,pacman_y))  # Blit the iamge
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type==KEYDOWN:
            if event.key==K_LEFT:
                p=0
    pygame.display.update()
于 2016-02-21T07:50:38.713 に答える