EDITを更新していない:私はそれを固定している、私は宇宙の侵略者のゲームを作っていますinvader_position_xpygameのスプライトはすぐ
のリターンのインフロント自己があるはずです。しかし、私は奇妙な行動に遭遇しました。
キーボードの右のキーを押すと、スプライトは移動しませんが、数秒間押し続けると右の境界にジャンプします。
スペースインベーダーゲームは、クラスを使用しており、これはメインクラスです:
# IMPORTS
import pygame, sys
from pygame.locals import *
import invader
pygame.init()
###################
#IMAGE SIZE AND FPS
width = 800
height = 600
fps = 30
fpsClock = pygame.time.Clock()
DISPLAY = pygame.display.set_mode((width,height))
#################
#OTHER VARIABLES
pygame.display.set_caption('space invaders!')
white = (225,225,225)# The colour white
invader_sprite = pygame.image.load("cross.png")
invader_lenght = 40
invader_position_x = 400
invader_position_y = 560
right_boundary = width- invader_lenght
keypress = ""
my_invader = invader.Invader(invader_position_x,right_boundary,keypress)# Initialising invader
while True: # main game loop
DISPLAY.fill(white)
DISPLAY.blit(invader_sprite,(invader_position_x,invader_position_y))
keypress = pygame.key.get_pressed()
invader_position_x=my_invader.invader_move(keypress,right_boundary,invader_position_x)
print(invader_position_x)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
fpsClock.tick(fps)
これは、別々のファイルに私のインベーダークラスは次のとおりです。
import pygame, sys
from pygame.locals import *
pygame.init()
class Invader():
def __init__(self,invader_position_x,right_boundary,keypress):
self.invader_position_x= invader_position_x
self.right_boundary=right_boundary
self.keypress= keypress
def invader_move(self,keypress,right_boundary,invader_position_x):
if self.invader_position_x> right_boundary:#Right boundary
invader_position_x=right_boundary-5
if self.invader_position_x<0:
invader_position_x= 5
if keypress[K_RIGHT]:# right
self.invader_position_x = self.invader_position_x+ 5
elif keypress[K_LEFT]:# left
self.invader_position_x =self.invader_position_x- 5
return invader_position_x
だから、これを修正する解決策ものです奇妙な行動?
私は、 'invader_position_x'と' self.invader_position_x'の間に混乱があると思います。 –
私はそれを試しました。リターンは自己infrontを持っていなかった!どうもありがとう! –
クラス 'Invader'を持っているなら、このクラスの中でその位置、長さ、スプライトを保持する必要があります。 – furas