?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

안녕하세요? 펜릴입니다.

 

지난 1장 <변수 편>은 잘 보셨나요?

 

저번 시간에는 루비언어의 변수 사용법과 메서드를 정의하고 게임 내로

 

호출하는 방법을 배웠습니다.

 

이번시간에는 게임 최초 구동시 가장 중요한 변수들의 초기값을 정해주는

 

initialize 메서드와 실시간으로 메서드 내의 객체들을 호출하여 처리하는

 

update 메서드에 대해 알아보겠습니다.

 

이 강의는 기초문법 위주보다는 초보자분들이 가장 빠르게 루비언어를 이해하고

 

해석할수 있도록 실용성 있는 강의를 하려고 합니다.

 

따라서 기초문법이 궁금하시거나 문법적인 문제로 막히는 부분이 있으면

 

니오티님의 기초 문법 강좌를 참고하시기 바랍니다.

 

자 1장에서 사용했던 테스트 페이지를(F11키) 그대로 사용합니다.

그리고 다음과 같이 작성하겠습니다.

 #[1]번

class Test_Game
  def initialize
    $real_hp = $game_actors[1].hp
  end
end

 

###################################

#[2]번
class Game_Player < Game_Player
  def update
    super
    @객체저장용 = Test_Game.new

    $game_variables[10] = $real_hp
  end
end

 

이렇게 작성했으면 스크립트페이지를 저장하고 나와서

 

맵에다가 맵이벤트를 작성, 원하는 모습의npc를 만들어 봅시다

 

그 후 맵 이벤트를 클릭해서 이벤트툴의 "문장의 표시"를 선택하고

 

내용을 "당신의 현재 hp는 \V[10] 입니다" 라고 써줍니다( "\V[10]" = 10번째 변수의 내용을 출력)

 

시작조건은 결정버튼

 

그리고 테스트 플레이 해보면 해당 npc에게 가서 c버튼을 누르면

"당신의 현재 hp는 641  입니다 라고 말할겁니다.(숫자가 틀리면 플레이어의 초기hp가 다른것)

 

여기까지 왔으면 성공입니다.

 

 

자, 위 내용을 먼저 해석해보겠습니다.

 

1번에서

클래스 Test_Game을 만듭니다.(클래스는 "사과박스" 개념이라고 생각하시면 됩니다.

메서드 역시  사과박스안에 "사과"라고 생각하면 됩니다.)

그리고 오늘 배울 initialize 메서드 (이니셜라이즈 라고 읽습니다)

를 선언합니다.

 

initialize 메소드 안에 전역변수 $real_hp에다가 주인공의 hp가 저장되있는

 

$game_ators[1].hp 전역변수를 대입합니다.

 

그리고 닫아주고...

 

2번으로 넘어와

 

클래스 Game_Player 를 선언하고 다시 Game_Player를 상속받습니다

(Game_Player는 이미 내장되어있는 클래스로 해당클래스의 모든 객체를 상속받습니다)

(상속은 유산상속과 같은개념입니다 부모의 모든것들을 내가 가져다가 사용할 수 있는겁니다)

그리고 역시 오늘 배울 update 메서드를 선언합니다

super 는 같은 메서드의 모든것을 상속받겠다는 의미

(update라는 메서드도 이미 부모 클래스에 정의되어있습니다)

(우리는 먼저 부모클래스에서 정의된 같은이름의 메소드를 상속받아서 덧붙여쓰는겁니다)

 

그리고 @객체저장용 인스턴스 변수를 만들고 그 안에 아까 1에서 만든 Test_Game클래스를 객체화시켜 대입합니다.(new를 사용)

 

그 후 게임툴 이벤트에서 사용하는 10번째 게임변수($game_variables[10])에 $real_hp를 대입합니다

(게임변수에 2차적으로 대입해서 게임내에서 내가원하는대로 쓸수있게 응용)

 

그리고 메서드와 클래스를 닫아줍니다

 

 

이제 세부설명..

 

initialize 메서드는 루비언어에서 public 인스턴스 메서드 로써

해당 클래스를 객체로 (예를들며 사과박스를 용도에 맞게 사용하다) 만들어

호출하게 되면 초기화를 위한 메모리공간을 확보한 후 초기화 되지 않은

변수들을 new의 매개변수를 이용해 initialize 메소드를 호출합니다.

 

요약하면 이부분입니다  " @객체저장용=Test_Game.new"

 

"@객체저장용" 인스턴스변수에 Test_Game 클래스를 객체화 하면

 

Test_Game의 클래스에서는 제일먼저 initialize 메소드를 호출합니다

따라서 initialize에 변수를 선언해주면 초기값이 잡히는것입니다.

 

우리가 클래스를 만들고 메서드를 만들어도 호출하는 매개체가 없으면

(npc를 지정해서 스크립트를 넣고 c버튼을 눌러 대화를 거는것도 매개체를 이용한방법)

 

해당 메서드는 불러지지않기 때문에 그 역할을 할수가 없습니다.

(마치, 칼이 있어도 요리를 하지않으면 무용지물인것)

 

따라서 initialize는 처음 변수의 초기값을 정해주는 능력을 가지고 있기때문에

 

반드시 알아야할 중요한 부분입니다.

(게임내에서는 어떤식으로 쓰이는지 스크립트 페이지에서 컨트롤+시프트+F키로 검색해봅시다)

 

 

그리고 2번에서 나온 update 메서드는 RGSS(알피지xp)에서 사용하는 실시간 호출 메서드입니다.

 

프레임단위로 호출하며, 이 메서드 안에는 동적인 변수들이 들어가기 적합합니다.

 

특히 이곳에는 조건문과 반복문을 구성하여 액션RPG의 핵심적인 요소들을 구현할수 있습니다.

 

 만들어논 예시를 보면,

 

update 메서드 안에 들어가있는  $game_variables[10] = $real_hp 부분은

 

실시간으로 현재 플레이어의 hp가 게임변수 10번에 들어가는것을 알수 있습니다.

 

정말 실시간인지 확인을 한번 해보겠습니다.

 

맵에서 아까 만들어논 hp확인하는 npc 옆에 hp를 떨어트리는 이벤트를 만들겠습니다.

 

이미지는 아무거나 설정하시고.. 이벤트툴에서 HP의 증감, 파티전체 -5를 선택하고

 

시작 조건은 결정 버튼으로 셋팅해줍시다.

 

그리고 게임시작을 눌러서 hp를 감소시키는 npc에게 hp를 감소를 당하고 다시 현재hp를

 

확인하는 npc에게 가보면 실시간으로 처리되고 있다는걸 알수 있습니다.

 

 

오늘배운 initialize와 update는 RPG만들기시리즈에서 엄청 중요한 메서드이기 때문에

 

내용이 다소 어려워도 반드시 복습을 해보시고 응용해보시는걸 추천드립니다.

 

이부분을 완전히 이해하셔야, 마지막강에 배울 본격적인 액션RPG 스크립트 해석을

 

따라가실수 있을겁니다.

 

 

다음시간에는, 알면 똑똑해 지는 주요 라이브러리 강의를 하도록 하겠습니다

  • profile
    니오티 2010.01.24 16:08

    오우 초보자가 접근하기는 힘들지만, 상당히!

    디테일하게 설명해주셨습니다.

    싸지방이라 안타깝게 예제도 있었으면 좋았으련만 업로드가 안되는 관계로 글로만 되었다는게 아쉽습니다.

     

    그래도 상세하게 적어주셔서 테스트해본다면, 상당히 원리 이해를 할 수 있었습니다.^^

  • ?
    펜릴 2010.01.24 16:14

    요 갭만 넘으면 스크립트에 대한 흥미와 욕구가 엄청나게 생길텐데 ^^

  • ?
    kok202 2010.02.16 17:32

    흠... 이벤트로 치면  initialize는 자동으로 시작한다 -> 변수 설정 1번 변수 = 주인공의 현재 HP  ->이벤트일시 삭제

    이고 update는                              정기별로 처리한다 -> 변수 설정 1번 변수 = 2번 변수

    이런식인가요?

  • profile
    니오티 2010.02.16 22:26

    이벤트로 치면

     

    initialize 는 이벤트 속에 0010 : 주인공실제 HP 라는 변수에 아르시스의 실제 HP를 넣은 것이구요.

    update 는 위 이벤트를 계속 플레이어가 화면에 있는 동안에 현재 HP를 0010에 계속 대입해주는 중이라고 생각하시면됩니다.

  • profile
    은하계 2010.08.20 23:43

    어렵다..



Copyright ⓒ Nioting All Rights Reserved. (since 1999)    개인정보
        

Fatal error: Cannot access property sessionController::$lifetime in /web/old/xe/modules/session/session.controller.php on line 45