메뉴 건너뛰기

OBG

Programming

Python
2013.11.10 17:10

고양이 밖으로 못나가게 하기

MoA
조회 수 630 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

바로 전 글에 이어서 고양이를 밖으로 못나가게 해보자.

 

앞서 고양이를 이동시키는 예제에서 고양이를 그려주는 코드는 blit 부분이다.

 

DISPLAYSURF.blit(catImg, (catx, caty))

우리는 방향키를 누를 때마다 catx, caty를 바꾸어 준 뒤 catImg를 바뀐 (catx, caty) 좌표에 뿌려주었다.
이를 생각하면 밖으로 못나가게 하는 건 쉽다. catx, caty가 화면 크기보다 커지면 catx, caty 값을 그대로 두면 된다.

즉 다음과 같은 코드가 있으면 된다.

 

elif event.type == KEYDOWN and event.key == K_RIGHT:
 if catx <= 400
 catx += 5

위 코드에서 400은 화면의 가로 크기이다.

 

그런데 문제가 있다.

catx가 397이면 catx += 5가 실행되면서 402가 된다.

이를 고려하면 위 코드는 아래와 같이 바뀐다.

 

elif event.type == KEYDOWN and event.key == K_RIGHT:
 if catx <= 400 - 5
 catx += 5

오른쪽 키 뿐만 아니라 위, 아래, 왼쪽 키에 대해서도 마찬가지로 적용하면 잘 동작할거라 생각이 든다.

하지만 실제로 해보면 왼쪽, 위쪽은 잘 동작하지만 오른쪽, 아래쪽은 화면 밖을 넘어가 버린다.

 

왜 그럴까?

 

처음에 언급한 blit 함수를 다시 살펴보자.

blit함수는 이미지를 화면에 그려주는 함수이다.

위에선 catx, caty 좌표에 고양이 이미지를 그렸다.

이 catx, caty 좌표의 기준은 어디일까?

제일 처음 고양이 이미지가 그려지는 위치를 생각해보면 알 수 있다.

바로 고양이 이미지의 왼쪽 위 꼭지점이다.

 

즉, 고양이를 밖으로 못나가게 하려면 catx, caty 값이 아래와 같은 영역 안에 있어야 한다.

 

cat trap.png

 

그러면 가로 방향의 좌표는 화면의 가로 크기 - 고양이 이미지의 가로 크기 안에 있어야 하고

세로 방향의 좌표는 화면의 세로 크기 - 고양이 이미지의 세로 크기 안에 있어야 한다는 것을 알 수 있다.

 

고양이 이미지의 크기는 다음과 같이 알 수 있다.

 

가로 사이즈 = catImg.get_width()
세로 사이즈 = catImg.get_height()

이를 이용하면 코드는 아래와 같이 바뀐다.

 

elif event.type == KEYDOWN and event.key == K_RIGHT:
 if catx <= 400 - catImg.get_width() - 5
 catx += 5

전체 소스는 아래와 같다.

(키 누르는 동안 움직이는 코드도 추가하였다)

 

import pygame, sys
from pygame.locals import *

pygame.init()

FPS = 30 # frames per second setting
fpsClock = pygame.time.Clock()

# set up the window
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Cat')

WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')
catx = 10
caty = 10
RightkeyIsDown = False
LeftkeyIsDown = False
DownkeyIsDown = False
UpkeyIsDown = False

while True: # the main game loop
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN and event.key == K_RIGHT:
            RightkeyIsDown = True
        elif event.type == KEYDOWN and event.key == K_LEFT:
            LeftkeyIsDown = True
        elif event.type == KEYDOWN and event.key == K_DOWN:
            DownkeyIsDown = True
        elif event.type == KEYDOWN and event.key == K_UP:
            UpkeyIsDown = True
        elif event.type == KEYUP and event.key == K_RIGHT:
            RightkeyIsDown = False
        elif event.type == KEYUP and event.key == K_LEFT:
            LeftkeyIsDown = False
        elif event.type == KEYUP and event.key == K_DOWN:
            DownkeyIsDown = False
        elif event.type == KEYUP and event.key == K_UP:
            UpkeyIsDown = False

    if RightkeyIsDown == True:
        if catx <= 400 - catImg.get_width() - 5:
            catx += 5
    if LeftkeyIsDown == True:
        if catx >= 5:
            catx -= 5
    if DownkeyIsDown == True:
        if caty <= 300 - catImg.get_height() - 5:
            caty += 5
    if UpkeyIsDown == True:
        if caty >= 5:
            caty -= 5

    DISPLAYSURF.fill(WHITE)
    DISPLAYSURF.blit(catImg, (catx, caty))

    pygame.display.update()
    fpsClock.tick(FPS)

?

  1. Programming 게시판 관련

    Date2014.11.01 CategoryTool/etc ByMoA Views1714
    read more
  2. 고양이 밖으로 못나가게 하기

    Date2013.11.10 CategoryPython ByMoA Views630
    Read More
  3. [농장게임 만들기] 9. 밀을 재배하자

    Date2014.05.01 CategoryPython ByMoA Views640
    Read More
  4. [GUI] Tkinter, wxPython

    Date2013.11.27 CategoryPython ByMoA Views644
    Read More
  5. [GUI] wxPython 기본 프로그램

    Date2013.11.30 CategoryPython ByMoA Views660
    Read More
  6. [액션게임 만들기] 4. 캐릭터 선택 화면

    Date2014.05.07 CategoryPython ByOBG Views674
    Read More
  7. [첫게임 만들기] 4. 화살을 발사해보자

    Date2013.11.21 CategoryPython ByMoA Views676
    Read More
  8. [농장게임 만들기] 8. HUD에 텍스트를 표시하자

    Date2014.05.01 CategoryPython ByMoA Views677
    Read More
  9. [농장게임 만들기] 2. Nubcake Farms 클래스 분석

    Date2014.04.26 CategoryPython ByOBG Views716
    Read More
  10. [농장게임 만들기] 6. 나머지 오브젝트를 그리자

    Date2014.05.01 CategoryPython ByMoA Views758
    Read More
  11. 고양이 움직이기

    Date2013.11.08 CategoryPython ByMoA Views841
    Read More
  12. [액션게임 만들기] 1. Street Pyghter 게임 소개

    Date2014.05.03 CategoryPython ByOBG Views890
    Read More
  13. [첫게임 만들기] 1. 게임 소개 및 실습 준비

    Date2013.11.20 CategoryPython ByMoA Views910
    Read More
  14. [액션게임 만들기] 2. 클래스 분석

    Date2014.05.06 CategoryPython ByOBG Views970
    Read More
  15. 화면 캡쳐 소스

    Date2014.01.14 CategoryPython ByMoA Views973
    Read More
  16. [첫게임 만들기] 3. Bunny를 회전시키자

    Date2013.11.21 CategoryPython ByMoA Views1010
    Read More
  17. [첫게임 만들기] 7. 게임 정보 표시

    Date2013.11.21 CategoryPython ByMoA Views1035
    Read More
  18. OpenCV 이용한 템플릿 매칭

    Date2014.01.16 CategoryPython ByMoA Views1250
    Read More
  19. [게임 만들기] 강좌 진행 예정

    Date2014.04.26 CategoryPython ByMoA Views1463
    Read More
  20. [농장게임 만들기] 1. Nubcake Farms 게임 소개

    Date2014.04.26 CategoryPython ByOBG Views1590
    Read More
  21. 파이썬에서 C모듈 사용하기

    Date2014.02.10 CategoryPython ByMoA Views1919
    Read More
Board Pagination Prev 1 2 ... 3 Next
/ 3
위로