0

したがって、私のゲームは正常に動作していましたが、スプライトはキーの繰り返し押しを処理しませんでした。私はそれを修正したと思っていましたが、スタート画面を通過すると何もできなくなりました。問題があると思われるコードは、playgame() の下にあります。誰かがそれを知っていれば、それは素晴らしいことです!

import pygame 
from Classes import PlaneClass
pygame.init()
import sys,random,os
from pygame.locals import*
#import pdb

menuscreen=pygame.display.set_mode((640, 480))#FULLSCREEN
def highscores():
    WHITE=(255,255,255)
    global menuscreen
    highscoresFile= open('data/highscores.txt','r')
    filecontentstoread=''
    for line in highscoresFile:
        filecontentstoread+=str(line)+'\n'

    menuscreen.fill(WHITE)
    my_font = pygame.font.SysFont('Courier', 20)
    the_text = my_font.render(filecontentstoread, True, (0,0,0))
    menuscreen.blit(the_text, (20, 40))
    pygame.display.update()

def playgame():

    BLACK=(0,0,0)#Define the color black, later used as backgound
    plane_x=0  #Define the planes x and y coordinates
    plane_y=0


    gamescreen=pygame.display.set_mode((640, 480))#FULLSCREEN
    gamescreen.fill(BLACK) #Fill screen with black, as background
    plane_img=pygame.image.load('data/plane.png')
    plane=PlaneClass(plane_x,plane_y,plane_img)

    plane.move(plane_x,plane_y)


    gamerunning=True

    while gamerunning==True:
        #Move plane according to keyboard input
            keys=pygame.key.get_pressed()
            if keys[K_LEFT]:
                    plane_x -=1
                    plane.move(plane_x,plane_y)
            if keys[K_RIGHT]:
                    plane_x +=1
                    plane.move(plane_x,plane_y)
            if keys[K_UP]:
                    plane_y -=1
                    plane.move(plane_x,plane_y)
            if keys[K_DOWN]:
                    plane_y+=1
                    plane.move(plane_x,plane_y)



            #gamescreen.fill(BLACK)

clock=pygame.time.Clock()
clock.tick(30)
def menu_screen_options():
    menuvalue=main_menu()
    laserstartup=pygame.mixer.Sound('data/laserstartup.wav')
    laserstartup.play()
    if menuvalue==0:
        playgame()
    if menuvalue==1:
        highscores()
    if menuvalue==2:
        credits()
    if menuvalue==3:
        pygame.quit()
        sys.exit()


def main_menu():
    menuclock=pygame.time.Clock()
    clock.tick(30)


    pygame.display.set_caption('Dog Fight')
    #pygame.mouse.set_visible(False)

    WHITE=(255,255,255)
    GREEN=(0,255,0)
    BLUE=(0,0,255)
    background=pygame.image.load('data/background.png')
    lasersound=pygame.mixer.Sound('data/lasershot.wav')


    arrow=pygame.image.load('data/arrow.png')

    arrowpos = { 0 : (140,147) , 1:(140,210) , 2:(140,270) , 3 :(140,330) }



    menu=True
    counter = 0
    menuscreen.blit(arrow,arrowpos[counter])
    menuscreen.blit(background,(0,0))
    pygame.display.update()

    while menu == True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    menu = False






                if event.key == K_UP:
                    if counter > 0:
                        counter -= 1



                if event.key == K_DOWN:
                    if counter < 3:
                        counter += 1





                if event.key == K_RETURN:
                    return counter


            menuscreen.fill(WHITE)
            menuscreen.blit(background,(0,0))

            menuscreen.blit(arrow,arrowpos[counter])
        pygame.display.update()




menu_screen_options()

また、これが役立つかどうかはわかりませんが、スプライト クラスのコードは役に立ちます。

import pygame


class PlaneClass(pygame.sprite.Sprite):




    # -- Methods
    # Constructor function
    def __init__(self,x,y,sprite_image):
        self.image=sprite_image

        self.x=x
        self.y=y
        pygame.sprite.Sprite.__init__(self)

    def move(self,new_x,new_y):
        screen=pygame.display.get_surface()
        self.new_x=new_x
        self.new_y=new_y
        screen.blit(self.image,(new_x,new_y))
        pygame.display.update()
4

2 に答える 2

0

キーダウンポーリングを使用していることに注意してください。代わりにキープレスイベントが必要になる場合があります。参照: https://stackoverflow.com/a/11918084/341744

于 2012-10-29T03:25:14.293 に答える
0

そのget_pressed呼び出しはwhile Trueループ内にあるため、メイン イベント ループ ( の部分for event in pygame.event.get():) に戻ることはありません。これにより、プログラムはこれ以上イベントを処理できなくなります。つまり、プログラムがロックされます。

代わりに、メイン イベント ループでキー イベントを待機し、get_pressed処理するキー押下があることがわかっている場合にのみ呼び出す必要があります。

于 2012-10-28T22:54:25.727 に答える