Если это не просто проблема вставки кода, похоже, что класс playerobject
не имеет правильно определенной функции update()
(потому что ему не хватает отступа, чтобы сделать его частью playerobject
).
Существует проблема стиля с кодом, заключающаяся в том, что он обрабатывает пользовательский ввод как в playerobject
, так и в основном цикле.Лучше всего обрабатывать все ваши пользовательские вводы в основном цикле (или хотя бы в одном месте).Я перестроил код, чтобы вести себя так.О, и ваши числа вверх / вниз поменялись местами (возможно, это было специально).
import os
import random
import time
import pygame
#declarations
displaywidth = 600
displayheight = 850
gamedisplay = pygame.display.set_mode((displaywidth, displayheight))
fps = 60
white = (255, 255, 255)
black = (0, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
red = (255, 0, 0)
#initializations
pygame.init()
pygame.mixer.init()
pygame.display.set_caption("Into The Battlefield")
clock = pygame.time.Clock()
#classes
class playerobject(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 40))
self.image.fill(green)
self.rect = self.image.get_rect()
self.rect.centerx = displaywidth / 2
self.rect.bottom = displayheight - 10
self.speedx = 0
self.speedy = 0
def setSpeedXY( self, x, y ):
self.speedx = x
self.speedy = y
def adjustSpeedX( self, x ):
self.speedx += x
def adjustSpeedY( self, y ):
self.speedy += y
def update(self):
self.rect.x += self.speedx
self.rect.y += self.speedy
#sprite group
sprites = pygame.sprite.Group()
playerobject = playerobject()
sprites.add(playerobject)
#gameloop
def gameloop():
gameon = True
while gameon:
clock.tick(fps)
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameon = False
keypress = pygame.key.get_pressed()
if keypress[pygame.K_LEFT]:
playerobject.adjustSpeedX( -5 )
if keypress[pygame.K_RIGHT]:
playerobject.adjustSpeedX( 5 )
if keypress[pygame.K_UP]:
playerobject.adjustSpeedY( -5 )
if keypress[pygame.K_DOWN]:
playerobject.adjustSpeedY( 5 )
if keypress[pygame.K_SPACE]:
playerobject.setSpeedXY( 0, 0 )
gamedisplay.fill(black)
sprites.update()
sprites.draw(gamedisplay)
pygame.display.update()
pygame.display.flip()
gameloop()
pygame.quit()
Теперь он движется действительно быстро.