I:
for event in pygame.event.get():
if event.type == QUIT:
self.terminate()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
self.terminate()
if event.key == K_LEFT or event.key == K_a:
self.moveRight = False
self.moveLeft = True
if event.key == K_RIGHT or event.key == K_d:
self.moveLeft = False
self.moveRight = True
if event.type == KEYUP:
if event.key == K_LEFT or event.key == K_a:
self.moveLeft = False
if event.key == K_RIGHT or event.key == K_d:
self.moveRight = False
# Move the player around
if self.moveLeft :
# Moves the player object to left with self.PLAYERMOVERATE pixels.
self.player.setLeftRight(-1 * self.PLAYERMOVERATE)
if self.moveRight :
self.player.setLeftRight(self.PLAYERMOVERATE)
は、私もこの代替を試してみました:
私の問題は、左または右キーが押されているとき、私のオブジェクトと呼ばれるプレイヤーは、常に移動していないということです問題はあなたがメインのゲームループで入力を処理していないことだと考えてください。
あなたのコードでは、オブジェクトPlayer
のメソッド内で入力を処理しているようです。これは入力の処理方法ではありません。 2番目のコード例では、ループがないことを意味するwhile True:
ループがあるため、メソッドの実行は決して終了しません。私はあなたの最初の例で同様の問題があるかもしれないと思う。
代わりにあなたがする必要があります
は、すべてのオブジェクトとクラスを作成します。
メインゲームループを作成します。
ゲームのメインループは入力を処理し、ゲームのロジックを処理してレンダリングすべきものをレンダリングする必要があります。
ここに短いコード例があります。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit() # Exit from pygame window
quit() # End python thread
if event.type == KEYDOWN:
if event.key == K_LEFT or event.key == K_a:
player.moveRight = False
player.moveLeft = True
if event.key == K_RIGHT or event.key == K_d:
player.moveLeft = False
player.moveRight = True
if event.type == KEYUP:
if event.key == K_LEFT or event.key == K_a:
player.moveLeft = False
if event.key == K_RIGHT or event.key == K_d:
player.moveRight = False
# Move player using method
if player.moveLeft:
# Move player
# ...
# Render player
これがあなたを助けてくれることを願っております。ご不明な点がございましたら、下記のコメント欄にお寄せください。
メソッド 'setLeftRight()'には何がありますか?たぶん問題があります。変数(つまり 'self.PLAYERMOVERATE'と' self.player.rect')に値を表示し、コードのどの部分が実行されたかの情報を表示するには 'print()'を使います。現在のコードはOKです。 – furas
または、ある変数で位置を変更しても、別の変数を使用して新しい位置にプレーヤーを表示することができます。だから、 'print()'を使って、プレーヤーを表示するための変数に値を表示してください。 – furas
setLeftRightメソッドには、1行のコードしか含まれていません。このメソッドは次のとおりです。def setLeftRight(self、pixels):self.rect.move_ip(pixels、0)。私はこの問題がここにないと確信しています。 –