반응형
<질문>
저는 파이게임 문서를 훑어본 후 매우 거친 하향식 2D 어드벤처 게임을 작업하고 있습니다. 그러나 카메라 시스템에서 아무것도 찾을 수 없어서 약간의 장애물에 부딪혔고 카메라에 대한 대부분의 튜토리얼이 5년 이상 된 것이고 더 이상 작동하지 않는 것 같습니다. 아무도 내가 카메라를 만드는 데 도움을 줄 수 있습니까?
이것은 내 주요 실행 스크립트입니다
import sys, pygame
from PlayerObject import Player
pygame.init()
screen_height = 180
screen_width = 320
map_height = 1080
map_width = 1920
num_objects = 5
screen = pygame.display.set_mode((screen_width, screen_height))
player_image = pygame.image.load('models/hero.bmp').convert()
background = pygame.image.load('models/lobby.bmp').convert()
screen.blit(background, (0, 0))
objects = []
# randomly generates 5 entities with the 1st one being the controlled character
for i in range(num_objects):
o = Player(player_image, random.randint(0, screen_width), random.randint(0, screen_height), 10)
objects.append(o)
while 1:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
screen.blit(background, objects[0].pos, objects[0].pos)
objects[0].move_left()
screen.blit(objects[0].image, objects[0].pos)
if keys[pygame.K_RIGHT]:
screen.blit(background, objects[0].pos, objects[0].pos)
objects[0].move_right()
screen.blit(objects[0].image, objects[0].pos)
if keys[pygame.K_UP]:
screen.blit(background, objects[0].pos, objects[0].pos)
objects[0].move_up()
screen.blit(objects[0].image, objects[0].pos)
if keys[pygame.K_DOWN]:
screen.blit(background, objects[0].pos, objects[0].pos)
objects[0].move_down()
screen.blit(objects[0].image, objects[0].pos)
screen.blit(background)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
for o in objects:
screen.blit(background, o.pos, o.pos)
for num in range(num_objects - 1):
objects[num + 1].rand_move()
for o in objects:
screen.blit(o.image, o.pos)
pygame.display.update()
pygame.time.delay(100)
이것은 내 플레이어 클래스입니다.
import random
map_height = 180
map_width = 320
class Player:
def __init__(self, image, width, height, speed):
self.speed = speed
self.image = image
self.pos = image.get_rect().move(width, height)
self.image = image
def set_speed(self, speed):
self.speed = speed
def rand_move(self):
x = random.randint(-self.speed, self.speed)
y = random.randint(-self.speed, self.speed)
self.pos = self.pos.move(x, y)
# keeps player in boundaries
if self.pos.left < 0:
self.pos.left = 0
if self.pos.right > map_width:
self.pos.right = map_width
if self.pos.top < 0:
self.pos.top = 0
if self.pos.bottom > map_height:
self.pos.bottom = map_height
def move_left(self):
speed = self.speed
self.pos = self.pos.move(-speed, 0)
if self.pos.left < 0:
self.pos.left = 0
def move_right(self):
speed = self.speed
self.pos = self.pos.move(speed, 0)
if self.pos.right > map_width:
self.pos.right = map_width
def move_up(self):
speed = self.speed
self.pos = self.pos.move(0, -speed)
if self.pos.top < 0:
self.pos.top = 0
def move_down(self):
speed = self.speed
self.pos = self.pos.move(0, speed)
if self.pos.bottom > map_height:
self.pos.bottom = map_height
<답변1>
당신의 기본적인 오해는 물체의 위치에 배경을 그리려고 한 다음 물체를 움직이고blit
마침내 새로운 위치에 있습니다. 그 모든 것이 필요하지 않습니다.
일반적으로 전체 장면은 기본 응용 프로그램 루프의 각 프레임에 그려집니다. 전체 창에 배경을 그리는 것으로 충분하며blit
그 위에 있는 각 개체. 창 표면의 변경 사항을 즉시 확인할 수 없습니다. 디스플레이가 다음에 의해 업데이트되면 변경 사항이 표시됩니다.pygame.display.update()
또는pygame.display.flip()
:
기본 애플리케이션 루프는 다음을 수행해야 합니다.
- 다음 중 하나를 통해 이벤트를 처리합니다.
pygame.event.pump()
또는pygame.event.get()
. - 입력 이벤트 및 시간(각 프레임)에 따라 개체의 게임 상태 및 위치를 업데이트합니다.
- 전체 디스플레이를 지우거나 배경을 그립니다.
- 전체 장면을 그립니다(
blit
모든 객체) - 다음 중 하나로 디스플레이를 업데이트합니다.
pygame.display.update()
또는pygame.display.flip()
예:
while 1:
# handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# update objects (depends on input events and frames)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
objects[0].move_left()
if keys[pygame.K_RIGHT]:
objects[0].move_right()
if keys[pygame.K_UP]:
objects[0].move_up()
if keys[pygame.K_DOWN]:
objects[0].move_down()
for num in range(num_objects - 1):
objects[num + 1].rand_move()
# draw background
screen.blit(background, (0, 0))
# draw scene
for o in objects:
screen.blit(o.image, o.pos)
# update dispaly
pygame.display.update()
pygame.time.delay(100)
반응형
'개발 > Python' 카테고리의 다른 글
PyGame 애니메이션이 깜박이는 이유 (1) | 2023.08.12 |
---|---|
[파이썬] 정규식에서 반복되는 하위 패턴 (0) | 2023.08.12 |
[파이썬] 반복 변수를 수정해도 후속 반복에 영향을 주지 않는 이유 (0) | 2023.08.12 |
[파이썬] XML 파일을 pandas 데이터 프레임으로 변환하는 방법 (0) | 2023.08.12 |