import pygame as pg pg.init() 화면가로길이 = 600 화면세로길이 = 800 화면 = pg.display.set_mode((화면가로길이, 화면세로길이)) while True: for 이벤트 in pg.event.get(): if 이벤트.type == pg.QUIT: quit() 시간 = pg.time.get_ticks() print(시간)
추가내용
import pygame as pg pg.init() 화면가로길이 = 600 화면세로길이 = 800 화면 = pg.display.set_mode((화면가로길이, 화면세로길이)) 흰색 = (255, 255, 255) 파랑색 = (0, 255, 0) 원위치 = [30, 50] 시계 = pg.time.Clock() while True: 화면.fill(흰색) 흐른시간 = 시계.tick(60) / 1000 # 초당 60프레임이 돌아가는 것을 의미 원위치[0] += 200 * 흐른시간 if 원위치[0] > 570: 원위치[0] = 30 표시할원위치 = (int(원위치[0]), int(원위치[1])) pg.draw.circle(화면, 파랑색, 표시할원위치, 20) pg.display.update() for 이벤트 in pg.event.get(): if 이벤트.type == pg.QUIT: quit()
위에 코드는 원이 오른쪽으로 이동하는 예제입니다.
캐릭터가 움직이는 게임들에 경우
프레임에 따른 동기화 작업이 필요합니다.
get_ticks() 함수는 pg.init()가 호출된 후 걸린 시간을 milli second로 반환해 주기 때문에
현재 게임 시간을 알기에는 적합하지만 프레임에 따른 시간 차를 계산하기에는 적합하지 않습니다.
왜냐하면 이전까지 진행되었던 시간과 현재 지난 시간의 차를 프레임 시간으로 계산되어 이것을 움직임에 반영해주어야 되기 때문에 계산과정이 복잡합니다.
이를 해결하기 위해서는 pg.time.Clock 클래스의 함수인 tick함수를 사용합니다
시계.tick(frames) 함수는 안에 넣은 프레임 수에 따른 순간 시간을 계산해 딜레이 시켜줍니다. 그리고 딜레이된 시간을 반환해주기 때문에 일정한 프레임으로 계산을 할 수 있습니다.
만약 반복문 안에 tick과 같은 프레임을 맞춰주는 코드가 없다면 코드를 실행시키는 컴퓨터에 따라 원의 이동속도가 달리지게 됩니다.
※ tick() / 1000에서 1000을 나눈 이유는 tick 함수는 milli second 단위이기 때문에 1/1000초가 1로 표시 되기 때문에 1초를 1로 사용하기 위하여 나누었습니다.
※ pg.draw.circle 함수에서 표시할원위치를 굳이 사용한 이유는 좌표를 파라미터로 넣을 때 좌표가 정수만 가능하기 때문입니다.