矢印キーで四角形を移動したいのですが、これまでは四角形を描くことしかできませんが、キーハンドラーは機能しません。 私はpythonとpygameの初心者です。このコードでpygameを使ってPythonで矩形を移動するにはどうすればいいですか?
これは私のmain.pyです:
import pygame
import time
import random
from Player import *
# Initialize Pygame
pygame.init()
game_over = False
# Color
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (192, 192, 192)
# Setting up the window
surfaceWidth = 800
surfaceHeight = 500
surface = pygame.display.set_mode((surfaceWidth, surfaceHeight))
pygame.display.set_caption("Rectangle Runner")
clock = pygame.time.Clock()
#Player(surface, surface_height, surface_width, size, jump_height, color)
player = Player(surface, surfaceHeight, surfaceWidth, 50, 200, BLACK)
# Game Loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if game_over == True:
pygame.quit()
quit()
surface.fill(GRAY)
#Player.draw()
player.keyHandling()
player.checkBoundaries()
player.draw()
#Obstacle.draw()
pygame.display.update()
clock.tick(60)
# This code shall be unreachable
pygame.quit()
quit()
これはPlayer.pyです:
import pygame
class Player:
def __init__(self, surface, surface_height, surface_width, size, jump_height, color):
self.surface = surface
self.surface_height = surface_height
self.surface_width = surface_width
self.size = size
self.jump_height = jump_height
self.color = color
self.x = (0 + (self.surface_width/10))
self.y = self.surface_height - self.size
self.x_move = 0
self.y_move = 0
self.rect = pygame.draw.rect(self.surface, self.color, [self.x, self.y, self.size, self.size])
def keyHandling(self):
# Draw the player
#pygame.draw.rect(self.surface, self.color,
#[self.x, self.y, self.size, self.size])
# KeyListener
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.y_move = -10
#self.y += self.y_move
#self.rect.move_ip(0, -10)
if event.key == pygame.K_LEFT:
self.x_move = -5
#self.x += self.x_move
#self.rect.move_ip(-5, 0)
if event.key == pygame.K_RIGHT:
self.x_move = 5
#self.x += self.x_move
#self.rect.move_ip(5, 0)
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
self.y_move = 0
#self.y += self.y_move
#self.rect.move_ip(0, 10)
if event.key == pygame.K_LEFT:
self.x_move = 0
if event.key == pygame.K_RIGHT:
self.x_move = 0
self.x += self.x_move
self.y += self.y_move
def checkBoundaries(self):
# Checking for Boundaries
#if self.y <= self.jump_height:
# self.y_move = -10
if self.y > self.surface_height - self.size:
self.y_move = 0
if self.y <= self.jump_height + self.size:
self.y_move = -10
def draw(self):
pygame.draw.rect(self.surface, self.color, [self.x, self.y, self.size, self.size])
#pygame.draw.rect(self.surface, self.color,[self.x, self.y, self.size, self.size])
私は助けを必要としています。私はこれを一日中考えている。 事前に感謝:D
はまた、プログラムは非常に不格好な方法で動くことに注意してください。おそらく、force/vectorsシステムがこれを修正するでしょう(私はPygameのために過去に実装しました)、それがあなたが追加したい何かになる場合は、よりスムーズにします。 – Frogboxe
これは私の問題を解決しました!力/ベクトルシステムのコード例があれば、本当に感謝しています! – wjatscheslaw
実際、 'pygame.event.get()'はジェネレータを返していません。それは普通のリストを返す。変数 'events = pygame.event.get()'にリストを保存すると、リストを複数回反復することができます。イベントリストを複数のオブジェクトに渡したいかどうかを知ることができます(例えば、 'keyHandling'は単一のイベントの代わりにイベントリスト全体を取ることができます)、またはすべてのイベントを繰り返して次のフレームのために保存したい。最後の呼び出し以降に起こったすべてのイベントを返すのは 'pygame.event.get()'関数です。 –