Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 没有pygame无法转换。pygame中显示初始化错误_Python_Pygame_Display - Fatal编程技术网

Python 没有pygame无法转换。pygame中显示初始化错误

Python 没有pygame无法转换。pygame中显示初始化错误,python,pygame,display,Python,Pygame,Display,我正在使用pygame为我大学的一个项目制作一个游戏。我现在要做的就是创建一个球,当用户按下左右箭头键时,可以控制球在屏幕上来回移动。老实说,我真的不知道我在做什么,所以我使用pygame文档中用于pong的代码作为我游戏的基础。下面是我的代码,如果有人知道我为什么会出现标题中的错误,请告诉我 try: import sys import random import math import os import get

我正在使用pygame为我大学的一个项目制作一个游戏。我现在要做的就是创建一个球,当用户按下左右箭头键时,可以控制球在屏幕上来回移动。老实说,我真的不知道我在做什么,所以我使用pygame文档中用于pong的代码作为我游戏的基础。下面是我的代码,如果有人知道我为什么会出现标题中的错误,请告诉我

try:
        import sys
        import random
        import math
        import os
        import getopt
        import pygame
        from socket import *
        from pygame.locals import *
except ImportError, err:
        print "couldn't load module. %s" % (err)
        sys.exit(2)

def load_png(name):
    """ Load image and return image object"""
    fullname = name
    try:
        image = pygame.image.load(fullname)
        if image.get_alpha() is None:
            image = image.convert()
        else:
            image = image.convert_alpha()
    except pygame.error, message:
            print 'Cannot load image:', fullname
            raise SystemExit, message
    return image, image.get_rect()

class Ball(pygame.sprite.Sprite):
    def __init__(self, (xy)):
        pygame.sprite.Sprite.__init__(self)
        self.image, self.rect = load_png('ball.png')
        screen = pygame.display.get_surface()
        self.area = screen.get_rect()
        self.hit = 0
        self.speed = 10
        self.state = "still"

    def reinit(self):
        self.state = "still"
        self.movepos = [0,0]
        if self.side == "left":
            self.rect.midleft = self.area.midleft

    def update(self):
        newpos = self.rect.move(self.movepos)
        if self.area.contains(newpos):
            self.rect = newpos
        pygame.event.pump()

    def moveleft(self):
        self.movepos[1] = self.movepos[1] - (self.speed)
        self.state = "moveleft"

    def moveright(self):
        self.movepos[1] = self.movepos[1] + (self.speed)
        self.state = "moveright"

def main():
    running = True
    pygame.init()
    (width, height) = (800, 600)
    screen = pygame.display.set_mode((width, height))

    # Fill background
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((0, 0, 0))
    screen.blit(background, (0, 0))
    pygame.display.flip()


    global player
    player = Ball("left")
    playersprite = pygame.sprite.RenderPlain(player)

    playersprite.draw(screen)
    player.update()
    while running:

        for event in pygame.event.get():
            if event.type == KEYDOWN:
                if event.key == K_q:
                    running = False
                if event.key == K_LEFT:
                    player.moveleft()
                if event.key == K_RIGHT:
                    player.moveright()
            elif event.type == KEYUP:
                if event.key == K_UP or event.key == K_DOWN:
                    player.movepos = [0,0]
                    player.state = "still"
        #screen.blit(background, ball.rect, ball.rect)
        screen.blit(background, player.rect, player.rect)
        #screen.blit(background, player2.rect, player2.rect)
        #ballsprite.update()
        playersprite.update()
        #ballsprite.draw(screen)
        playersprite.draw(screen)



if __name__ == '__main__': main()

当我用Python3.4测试代码时,我首先在try:except语句中发现语法错误,但这可能是由于不同版本的语法不同造成的。在修复后,我遇到了按下左键或右键时未定义
movepos
的问题。将
self.movepos=[0,0]
添加到Ball类的
\uuuu init\uuuu()
中修复了此问题

我从来没有遇到过你描述的错误,但是无论我做什么,游戏都会持续出现黑屏

我想说的是,错误有时可能是由代码前面没有被发现的其他错误引起的。这里的一个答案很好地概括了这一点:


还有,哪些变量存储球的x和y位置?我似乎不明白你是如何控制它的?

当我用python 3.4测试你的代码时,你运行的python/pygame版本是什么,我第一次在你的try中遇到语法错误:除了语句,但这可能是由于不同版本的语法不同。在修复后,我遇到了按下左键或右键时未定义
movepos
的问题。将
self.movepos=[0,0]
添加到Ball类的
\uuuu init\uuuu()
中修复了此问题

我从来没有遇到过你描述的错误,但是无论我做什么,游戏都会持续出现黑屏

我想说的是,错误有时可能是由代码前面没有被发现的其他错误引起的。这里的一个答案很好地概括了这一点:

还有,哪些变量存储球的x和y位置?我好像不明白你是怎么控制的

我现在要做的就是创造一个可以 控制在用户按下时在屏幕上来回移动 左右箭头键

你太复杂了,你不需要102条线来移动一个球。我写了一个简单的例子,并对其进行了评论,我认为这个例子对您有很大帮助。您真正需要做的就是检测按键,然后更新x和y变量,然后使用x和y变量绘制图像

import pygame

screen_width = 1280
screen_height = 720

pygame.init()
screen = pygame.display.set_mode((screen_width,screen_height))

BLACK = (0,0,0)

ballImg = pygame.image.load("ball.jpg")
ballPosition = [0,0]
speed = 1


def game_loop():
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

        #get all the keys being pressed
        keys = pygame.key.get_pressed()


        #depending on what key the user presses, update ball x and y position accordingly
        if keys[pygame.K_UP]:
            ballPosition[1] -= speed
        if keys[pygame.K_DOWN]:
            ballPosition[1] += speed
        if keys[pygame.K_LEFT]:
            ballPosition[0] -= speed
        if keys[pygame.K_RIGHT]:
            ballPosition[0] += speed


        screen.fill(BLACK) #fill the screen with black
        screen.blit(ballImg, ballPosition) #draw the ball
        pygame.display.update() #update the screen

game_loop()
我现在要做的就是创造一个可以 控制在用户按下时在屏幕上来回移动 左右箭头键

你太复杂了,你不需要102条线来移动一个球。我写了一个简单的例子,并对其进行了评论,我认为这个例子对您有很大帮助。您真正需要做的就是检测按键,然后更新x和y变量,然后使用x和y变量绘制图像

import pygame

screen_width = 1280
screen_height = 720

pygame.init()
screen = pygame.display.set_mode((screen_width,screen_height))

BLACK = (0,0,0)

ballImg = pygame.image.load("ball.jpg")
ballPosition = [0,0]
speed = 1


def game_loop():
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

        #get all the keys being pressed
        keys = pygame.key.get_pressed()


        #depending on what key the user presses, update ball x and y position accordingly
        if keys[pygame.K_UP]:
            ballPosition[1] -= speed
        if keys[pygame.K_DOWN]:
            ballPosition[1] += speed
        if keys[pygame.K_LEFT]:
            ballPosition[0] -= speed
        if keys[pygame.K_RIGHT]:
            ballPosition[0] += speed


        screen.fill(BLACK) #fill the screen with black
        screen.blit(ballImg, ballPosition) #draw the ball
        pygame.display.update() #update the screen

game_loop()

哦,我的上帝,非常感谢你。我真的是新手,所以这真的很有帮助,谢谢!没问题,我想你最好从头开始构建你的程序,而不是从一大堆你不懂的神秘代码开始。哦,我的天,非常感谢你。我真的是新手,所以这真的很有帮助,谢谢!没问题,我认为从头开始构建程序会比从一大堆你不懂的神秘代码开始要好得多。