当我尝试多处理时,会出现多个窗口

2024-05-23 22:40:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为我的第一场皮球比赛创造一个乒乓球游戏。我对Pygame很陌生,对Python来说相对来说是一个新的。到目前为止,我只在两边有两个保险杠。以下是我迄今为止的代码:

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

from multiprocessing import Process


window = pygame.display.set_mode((600,400))
pygame.display.set_caption("Pong")
screen = pygame.display.get_surface()

pongBackground = pygame.image.load("C:/Users/LN/Desktop/PongBackground.png")
pongHitter = pygame.image.load("C:/Users/LN/Desktop/PongHitter.png")
pongHitter = pygame.image.load("C:/Users/LN/Desktop/PongHitter.png")
pongBall = pygame.image.load("C:/Users/LN/Desktop/PongBall.png")


pygame.init()


class hitter():
    """moves the pong hitter with arrow keys"""

    def _init_(self):
        screen.blit(pongBackground, (0,0))
        self.position = pongHitter.get_rect()

        pygame.display.update()

    def goTo(self, coord):
        screen.blit(pongHitter,coord)
        self.position = self.position.move(coord)
        pygame.display.update()   

    def moveUp(self):
        for i in range(1):
            screen.blit(pongBackground, self.position, self.position)
            self.position = self.position.move(0, -1)
            screen.blit(pongHitter, self.position)
            pygame.display.update()
            pygame.time.delay(10)
    def moveDown(self):
        for i in range(1):
            screen.blit(pongBackground, self.position, self.position)
            self.position = self.position.move(0, 1)
            screen.blit(pongHitter, self.position)
            pygame.display.update()
            pygame.time.delay(10)


hitterA=hitter()
hitterB=hitter()
hitterA._init_()
hitterB._init_()
hitterA.goTo((5,200))
hitterB.goTo((590,200))


pygame.key.set_repeat(1,1)
contin=True
def inputLeft():
    while True:
        for event in pygame.event.get():
            if pygame.key.get_pressed()[K_UP]:
                hitterA.moveUp()
            elif pygame.key.get_pressed()[K_DOWN]:
                hitterA.moveDown()
            elif pygame.key.get_pressed()[K_ESCAPE]:
                sys.exit(0)

def inputRight():
    while True:
        for event in pygame.event.get():
            if pygame.key.get_pressed()[K_w]:
                hitterB.moveUp()
            elif pygame.key.get_pressed()[K_s]:
                hitterB.moveDown()
            elif pygame.key.get_pressed()[K_ESCAPE]:
                sys.exit(0)

if __name__=='__main__':
    p = Process(target=inputLeft)
    p.start()
    p.join()
    p2 = Process(target=inputRight)
    p2.start()
    p2.join()

现在我想弄到它,这样两个保险杠都能同时移动。我已经尝试过多处理,正如您可以看到的,但是它创建了不同的窗口,每个进程。我怎样才能把所有东西都显示在一个窗口上?谢谢!顺便说一下,这是python 3.3。


Tags: keyimageselfgetdefdisplaypositionscreen
1条回答
网友
1楼 · 发布于 2024-05-23 22:40:17

多处理是错误的方法

另一支箭被另一支击出,然后另一支被击出

以下是主循环应该是什么样子,而不是有两个:

while True:
    for event in pygame.event.get():
        if pygame.key.get_pressed()[K_UP]:
            hitterA.moveUp()

        if pygame.key.get_pressed()[K_DOWN]:
            hitterA.moveDown()

        if pygame.key.get_pressed()[K_w]:
            hitterB.moveUp()

        if pygame.key.get_pressed()[K_s]:
            hitterB.moveDown()

        if pygame.key.get_pressed()[K_ESCAPE]:
            sys.exit(0)

没有必要进行多重处理,没有它它也能正常工作

你的代码看起来很好,但是你要摆脱多重处理

这里有一个很好的例子,你可以用它来帮助你

Pygame Pong Example

相关问题 更多 >