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

时间:2013-09-05 03:45:59

标签: python multiprocessing pygame python-3.3

我正在尝试为我的第一个Pygame游戏创建一个乒乓球游戏。我是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。

1 个答案:

答案 0 :(得分:2)

多处理是错误的方法

给一个击球手和箭头键给另一个击球手然后为你按下按键的声明,这样就可以移动一个球拍,箭头移动另一个球杆

这是你的主循环应该是什么样子而不是两个:

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乒乓游戏的例子你可以用它来帮助你

Pygame Pong Example