cannot convert without pygame.display initialized error in pygame
我正在使用pygame在我的大学为一个项目制作游戏。我现在想要做的就是创建一个可以控制的球,当用户按下向左和向右箭头键时,它可以在屏幕上来回移动。老实说,我真的不知道自己在做什么,所以我使用的是pygame文档中的代码,该文档曾将pong用作游戏的基础。我的代码在下面,如果有人知道为什么我得到标题中的错误,请告诉我。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | 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() |
All I'm trying to get done right now is create a ball that can be
controlled to go back and forth on the screen when the user presses
the left and right arrow keys.
您已经非常复杂了,您不需要102条线就可以移动一个球。我写并评论了一个简单的示例,我认为它可以为您提供很多帮助。您真正需要做的就是检测按键,然后更新x和y变量,然后使用x和y变量绘制图像。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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() |
您正在运行什么版本的python / pygame,就像我用python 3.4测试代码时一样,我的try:语句首次出现语法错误,但这可能是由于不同版本的语法不同所致。修复该问题后,我遇到了按向左或向右时未定义
我从未遇到您所描述的错误,但是无论我做什么,游戏的确提供了恒定的黑屏。
我要说的是,有时错误可能是由代码中较早出现的其他错误引起的,这些错误没有被发现。这里的答案之一很好地总结了一下:错误:视频系统未初始化;错误:视频系统未初始化。有解决方案吗?
还有,什么变量存储球的x和y位置?我似乎无法弄清您是如何控制的?