메뉴 건너뛰기

창조도시 기록보관소

RPG2K [한단계 도약] 되풀이 처리

2007.09.12 03:01

A. 미스릴 조회 수:449 추천:2

이 강좌를 쓰게 된 게기는 아싸사랑님의 괴물이다!!를 플레이 하면서 입니다.


이 게임이 대단한 작품임에는 틀림없습니다만 별 노가다 없이 만들 수 있었는데


노가다를 해서 고생을 하신 것 같아 안타까운 마음이 많이 들었습니다.


스위치, 변수만 알고 있어도 왠만한 시스템은 다 구현할 수 있습니다.


하지만 시스템이 복잡해질수록 너무 많은 노가다가 들어갑니다.


이런 노가다를 크게 줄일 수 있는 여러가지 기능들이 알만툴에 있습니다.


그것을 다양한 분이 쓸 수 있기를 바라며 강좌를 씁니다 -ㅁ-


 


C++나 RPGXP를 배운 분이라면 while문이나 for문을 알고 있을 것입니다.


아니면 RPGXP에서 loop do라는 문도 있습니다.


이런 것을 반복문이라고 합니다.


일단 이벤트 커맨드에 "되풀이 처리"라는 것이 있습니다.


이것을 이용해서 다음 알고리즘을 만듭시다.


◆반복 처리


   문장의 표시 : 뭐임마 싸우자?


 : 이상 반복


( 이벤트 커맨드에선 되풀이 처리라고 나오지만 실행내용에선 반복 처리로 나옵니다. 신선짱님의


실수인 듯 합니다 )


이러고 테스트 플레이를 실행해서 해당 이벤트를 실행해 봅시다.


뭐임마 싸우자? 가 무한으로 뜰 것입니다.


이것을 "무한 루프'라고 하는데 그건 집어치우고 중요한 것은


반복 처리와 이상 반복의 사이에 끼워져 있는 이벤트들이 연속적으로 실행되고 있다는 사실입니다.


하지만 이 반복은 대부분 언젠가는 중단되야 하겠죠? -_-;;


이벤트 커맨드에서 "되풀이 처리의 중단"이란 커맨드가 있습니다. 이것을 이용해서 다음 알고리즘을


만듭시다.


 


◆반복 처리


   문장의 표시 : 뭐임마 싸우자?


   ◆반복 처리의 중단


 : 이상 반복


( 이벤트 커맨드에선 되풀이 처리 중단이라고 나오지만 실행내용에선 반복 처리로 나옵니다.


신선짱님의 실수인 듯 합니다 )


이렇게 하면 전과는 달리 뭐임마 싸우자?가 1번만 뜨고 더이상은 뜨지 않습니다. 반복이 중단된


것입니다. 다음 알고리즘을 또 만들어 봅시다.


◆반복 처리


   문장의 표시 : 뭐임마


   ◆반복 처리의 중단


   문장의 표시 : 싸우자?


 : 이상 반복


이러면 뭐임마가 뜬다음 싸우자?가 뜨지 않습니다.


"반복처리가 중단" 이후부터 : 이상 반복 까지의 커맨드도 무시한다는 뜻입니다.


이것을 헷갈리지 마시기 바랍니다(저도 쓸때 약간 혼란을 겪었습니다)


되풀이 처리는 일반적으로 두 가지에 쓰입니다(다른 경우에 쓰일 수도 있습니다)


1. 노가다를 줄인다(특히 변수 번호의 변수와 섞어 쓰면 엄청난 효과를 거둘 수 있다)


2. 라벨을 대신한다


일단 노가다를 줄입니다. 주로 이런 이유로 쓰이리라 믿습니다.


만일 1부터 100까지 출력한다면 당신은 이렇게 만들어야 합니다.


◆변수의 조작 : 변수 0001, 가산, 1


◆문장의 표시 : v[1]


◆변수의 조작 : 변수 0001, 가산, 1


◆문장의 표시 : v[1]


◆변수의 조작 : 변수 0001, 가산, 1


◆문장의 표시 : v[1]


...(중략)


◆변수의 조작 : 변수 0001, 가산, 1


◆문장의 표시 : v[1]


고로 당신은


"


◆변수의 조작 : 변수 0001, 가산, 1


◆문장의 표시 : v[1]


"


를 100번이나 써야 한다는 겁니다.


복사 붙여넣기를 하면 되지만 오래 걸리고 내용도 대단히 길어질 뿐 아니라


 도중에 버그가 일어나거나 횟수가 차이나면 수정하기도 어렵습니다 ㅡㅡ;;


이런 비효율적인 알고리즘을 되풀이 처리를 이용하면 효율적으로 만들 수 있습니다.


◆반복 처리


   ◆조건 분기 : 변수 0001이 100보다 크다


      ◆반복 처리의 중단


    : 분기 종료


   ◆변수의 조작 : 변수 0001, 가산, 1


   ◆문장의 표시 : v[1]


 : 이상 반복


진짜 짧아졌죠? 뿐만 아니라 정확성, 효율성은 물론 수정도 쉽게 할 수 있습니다.


좀 더 발전해서 변수 번호의 변수와 병행한다면 진짜 고수분이 될 겁니다.


...


다음으로 라벨을 대신한다니, 이건 무슨 소리인가?


다음은 라벨의 설정으로 만든 "주사위를 다시 굴린다" 시스템입니다.


라벨에 친숙한 분이라면 금방 이해하실 수 있을 겁니다.


 


◆라벨의 설정 : 1번


◆변수의 조작: 0001:아햏, 대입 1~6


◆문장의 표시 : v[1]


◆문장의 표시 : 다시 굴리시겠습니까?


◆선택지의 표시 : 예 / 아니오


◆예의 경우


   ◆지정 라벨의 이동 : 1번


◆아니오의 경우


 : 분기 종료


 


이것을 이렇게 고칠 수 있습니다.


 


◆반복 처리


   ◆변수의 조작: 0001:아햏, 대입 1~6


   ◆문장의 표시 : v[1]


   ◆문장의 표시 : 다시 굴리시겠습니까?


   ◆선택지의 표시 : 예 / 아니오


   ◆예의 경우


   ◆아니오의 경우


      ◆반복 처리의 중단


    : 분기 종료


 : 분기 종료


 


지정 라벨의 처리엔 아무것도 내놓지 않고(그러면 반복한답시고 위에 있는 이벤트부터


다시 시작하니까 라벨의 설정 밑의 이벤트들이 반복 처리 이벤트 안에 있으면 같은


효과가 나는 셈이다.) 지정 라벨의 처리를 안쓸 곳에는 반복 처리의 중단을(돌아가지


않을거니까...) 시킵니다. 그런 원리입니다.


굳이 이렇게 하는 이유는 라벨의 설정 번호에 한계가 있을 수도 있기 때문입니다 -0-;


 


잘 배우셨습니까?
그럼 당신의 실력확인을 위해 문제를 내겠습니다.


◆주인공의 동작 지정 : 주인공, 투명도 업


◆대기 : 0,1초


◆주인공의 동작 지정 : 주인공, 투명도 업


◆대기 : 0,1초


◆주인공의 동작 지정 : 주인공, 투명도 업


◆대기 : 0,1초


◆주인공의 동작 지정 : 주인공, 투명도 업


◆대기 : 0,1초


◆주인공의 동작 지정 : 주인공, 투명도 업


◆대기 : 0,1초


◆주인공의 동작 지정 : 주인공, 투명도 업


◆대기 : 0,1초


◆주인공의 동작 지정 : 주인공, 투명도 업


◆대기 : 0,1초


◆주인공의 동작 지정 : 주인공, 투명도 업


◆대기 : 0,1초


이것을 간단하게 만들어 보십시오


50%라도 이해하셨다면 하실수 있으리라 믿습니다 ㅇㅅㅇ/


( 이것은 사실 찰드님이 자중지난 알고리즘을 응용해서 연출에서 사용하셨다고 채팅방에서 말씀



  1. 하셨습니다. 좀 불편해 하시더군요 ㅡ,.ㅡ; )
번호 제목 글쓴이 날짜 조회 수
429 [덧붙임] 변수번호의 스위치 사용은 되도록이면 자제 [1] A. 미스릴 2007.10.15 503
428 RPG에 자주 있는것들 [15] ⓦildⓡose★ 2007.09.26 1514
427 [한단계 도약]변수 번호의 변수 [5] A. 미스릴 2007.09.21 643
426 한가지 경우에만 적용되는 경험치 게이지바 [7] file 베넘 2007.09.21 616
425 [한단계 도약] 변수 번호의 스위치 [6] A. 미스릴 2007.09.12 653
» [한단계 도약] 되풀이 처리 [2] A. 미스릴 2007.09.12 449
423 RPG 2K시리즈에서도 Script의 사용이 가능합니다. [9] 타다기 2007.08.21 1103
422 귀찮아‡님의 자동세이브 스크립트의 한글화 [3] J.Clifford 2007.08.19 617
421 가장 보편적인 범위 좌표 설정하기. [6] 아싸사랑 2007.08.15 852
420 간단팁) XP에서 1초는 몇프레임인가? [4] 유진 2007.08.08 993
419 대기중에 캐릭터가 움직이게/못움직이게 하려면? [2] 유진 2007.08.08 679
418 게임의 리얼리티화 [3] 유진 2007.08.05 1248
417 [C++] 최단거리 구하는 알고리즘, E log V Dijkstra [2] 악희 2007.08.01 749
416 [DX/VB] DirectDraw? 별거 아냐! (3) 더블 버퍼의 생성과 블리팅 [2] 악희 2007.08.01 624
415 0707후반기[제작자포럼]공성결과 [5] 천무 2007.08.01 401
414 [DX/VB] DirectDraw? 별거 아냐! (2) 블리팅, 그리고 투명도 [1] 악희 2007.07.30 570
413 [DX/VB] DirectDraw? 별거 아냐! (1) DirectDraw객체의 생성과 표면의 생성 [3] 악희 2007.07.27 631
412 게시판 이용 및 라이센스 공지 J.Clifford 2007.07.23 521
411 두드리는 미니게임... [3] JIN[晉] 2007.07.22 565
410 7월상반기(제작자포럼)공성결과 천무 2007.07.16 358