1

私はPygameやPythonにまったく慣れていませんが、何かが正しくない場合、Pythonシェルにエラーが発生したことを示すテキストが表示されることを知っています。私は実際にそれらの多くに遭遇しました、そして今回、それは最終的に実行されてウィンドウを表示します、しかしそれは応答しません。コード全体に間違いがあるかもしれないことを知っているので、遠慮なく訂正してください(そして、私はまだこのようなものに慣れていないので、親切に説明してください)。

以下のコードですが、それが役に立ったら、あなたがそれを求めれば、私もファイルを投稿できるかどうかを確認します。とにかく、ここにコードがあります:

#import Modules
import os, sys
import pygame
from pygame.locals import *

background_img="C:/Users/JM/Documents/Python/Pygame_Alpha/background_img.jpg"
cursor_img="C:/Users/JM/Documents/Python/Pygame_Alpha/pygameCursor.png"

def load_image(img_file, colorkey=None):
    file_pathname = os.path.join("\Users\JM\Documents\Python\Pygame_Alpha",img_file)

    try:
        image = pygame.image.load(file_pathname).convert_alpha()

    except pygame.error, message:
        print "Can't load image:", file_pathname
        raise SystemExit, message

    image = image.convert()

    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0,0))
    image.set_colorkey(colorkey, RLEACCEL)

    return image, image.get_rect()



#Main character's position and movements
char_x,char_y = 0,0
char_go_x,char_go_y = 0,0

#Main char class
class char(pygame.sprite.Sprite):
 """Main Character"""
     def __init__(self):
        pygame.sprite.Sprite.__init__(self)#call Sprite initializer
        self.image, self.rect = load_image("char_img.png", -1)
        self.jumping = 0

    def update(self):
        self.rect.midtop = char_x,char_y
        if self.jumping == 1:
        self.rect.move_ip(-35,-3)


    def char_no_jump(self):
        self.jumping = 0

    pygame.init()
    pygame.display.set_caption("pygame_Alpha")
    screen = pygame.display.set_mode((800,480),0,32)
    background = pygame.image.load(background_img).convert()
    cursor = pygame.image.load(cursor_img).convert_alpha()

    char = char()

    clock = pygame.time.Clock()
    millisec = clock.tick()
    sec = millisec/1000.0

    char_fall = sec*25
    jump = sec*50

    #blit the background
    screen.blit(background,(0,0))

    #Main Loop
    while 1:

       #Tell pygame not to exceed 60 FPS
       clock.tick(60)


       #Events
       for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

            #Events triggered when a key/s is/are pressed
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()
                elif event.key == K_UP or event.key == K_w:
                    char.jumping = 1

                elif event.key == K_DOWN or event.key == K_s:
                    char_go_y += 1
                elif event.key == K_LEFT or event.key == K_a:
                    char_go_x -= 0.5                
                elif event.key == K_RIGHT or event.key == K_d:
                    char_go_x += 0.75
                    if char_x > 800:
                        char_x = 0

            #Events triggered when a key/s is/are released
            if event.type == KEYUP:
                if event.key == K_UP or event.key == K_w:
                    char_go_y += 1
                elif event.key == K_DOWN or event.key == K_s:
                    char_go_y = 0
                elif event.key == K_LEFT or event.key == K_a:
                    char_go_x = 0
                    if char_x < 0:
                    char_x = 0
                elif event.key == K_RIGHT or event.key == K_d:
                    char_go_x = 0
                    if char_x > 700:
                    char_x = 0

        char.update()
        while char_y < 200:
        char_go_y += char_fall

        if char_y > 200:
        char_y = 200

        #Update values of position of Main Char
        char_x += char_go_x
        char_y += char_go_y

        #Position Variables of Cursor Image, setting its values equal to cursor pos, and blit it to screen
        cursor_x,cursor_y = pygame.mouse.get_pos()
        cursor_x -= cursor.get_width()/2
        cursor_y -= cursor.get_height()/2
        screen.blit(cursor,(cursor_x,cursor_y))

        pygame.display.update()
4

3 に答える 3

2

うーん...

while char_y < 200:
           char_go_y += char_fall

私が見ていない興味深いエイリアシングがない限り、char_y <200(最初にあるはずですが、char_go_yを更新しているので常にそうなります)。

それが問題ではない場合でも、ループを通過しているかどうかを判断するために、いくつかのプリントを追加することをお勧めします。

于 2012-05-15T14:57:28.817 に答える
0

実行時にアイドル状態のエラーメッセージはありますか?画面がフリーズするたびに何か問題がありますが、エラーメッセージを知らずに何を特定するのは困難です。画像を開くのに問題があるかもしれません。画像ファイル名の最後に.convert()を付けてみてください。ただし、これは単なる推測です。

于 2012-05-15T14:05:01.600 に答える
0

pygame.quitとsys.exitを呼び出すと、おそらく問題が発生します。通常、pygameではそれらは必要ありません。

それ以外の:

#Main Loop
while 1:

   #Tell pygame not to exceed 60 FPS
   clock.tick(60)


   #Events
   for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

これを行う

#Main Loop
done = False
while not done:
   clock.tick(60)

   for event in pygame.event.get():
        if event.type == QUIT:
            done = True
        if event.type == KEYDOWN:
            if event.key == K_ESC:
                done = True
于 2013-02-07T20:08:22.777 に答える