我正在尝试制作游戏并遇到问题...我无法移动矩形,并且它也没有给我错误代码吗?..我认为问题在于,它不断使矩形不断重复在while循环中...但是我不知道如何解决这个问题。
#! /usr/bin/env python
import os
import random
import pygame
import math
import sys
os.environ["SDL_VIDEO_CENTERED"] = "1"
screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption("LEVEL 2 = Find the Correct Square!")
clock = pygame.time.Clock()
class Player(object):
def __init__(self):
self.rect = pygame.draw.rect(screen, (0, 0, 128), (64, 54, 16, 16))
def handle_keys(self):
key = pygame.key.get_pressed()
dist = 1
if key[pygame.K_LEFT]:
self.rect.move(-1, 0)
if key[pygame.K_RIGHT]:
self.rect.move(1, 0)
if key[pygame.K_UP]:
self.rect.move(0, -1)
if key[pygame.K_DOWN]:
self.rect.move(0, 1)
def draw(self, surface):
pygame.draw.rect(screen, (0, 0, 128), (64, 54, 16, 16))
pygame.init()
player = Player()
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
break
running = False
screen.fill((255, 255, 255))
player.draw(screen)
player.handle_keys()
pygame.display.update()
clock.tick(40)
Run Code Online (Sandbox Code Playgroud)
您需要对Player课程进行一些更改。您需要重新分配self.rect结果self.rect.move()或使用就位变体self.rect.move_ip()
class Player(object):
def __init__(self):
self.rect = pygame.rect.Rect((64, 54, 16, 16))
def handle_keys(self):
key = pygame.key.get_pressed()
dist = 1
if key[pygame.K_LEFT]:
self.rect.move_ip(-1, 0)
if key[pygame.K_RIGHT]:
self.rect.move_ip(1, 0)
if key[pygame.K_UP]:
self.rect.move_ip(0, -1)
if key[pygame.K_DOWN]:
self.rect.move_ip(0, 1)
def draw(self, surface):
pygame.draw.rect(screen, (0, 0, 128), self.rect)
Run Code Online (Sandbox Code Playgroud)
每次按键,矩形将移动一次。如果您想在按住某个键时继续前进,则需要降低主循环的一部分
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
break
running = False
screen.fill((255, 255, 255))
player.draw(screen)
player.handle_keys()
pygame.display.update()
clock.tick(40)
Run Code Online (Sandbox Code Playgroud)