newlab의 사용법을 열심히 생각하다
9742 단어 HSP
작년 HSP Advent Calendar에 계속 투고합니다. 작년에 말씀드린 것처럼 저는 고양이를 매우 좋아합니다. 화이트 명령 프로그램의 동작이 멈출 때와 HSP 스크립트 편집기가 떨어질 때를 잊었습니다.대학에 사는 들고양이에게 먹이를 주어 마음의 평온을 유지한다. 이 들고양이는 그 후 의외로 많이 늘었다. 이대로 가면 안 될까 봐 매일 고양이를 진심으로 사랑하지 못하는 나날을 보내고 있다.
고양이에 대해 쓰고 싶은 게 많지만 너무 기술적인 내용에서 벗어나면 Qiita 운영이 삭제될 수 있으니 조금만 참아주세요.
오늘은 HSP의 알려지지 않은 기능인 newlab에 대해 이야기하고 싶습니다.
Microsoft 명령 newlab
HSP에 조용한 newlab 명령이 있습니다.
이 명령은 라벨형 변수를 초기화하여 라벨이 없는 곳에서도 파라미터에 따라 gooto,goosub에서 비행할 수 있는 명령이다.
OHDL에는 다음과 같은 설명이 있지만 실제 사용법을 모르는 분들도 계시겠죠?
ラベル型変数を初期化
newlab p1,p2
p1=変数 : 初期化する変数名
p2=参照元 : 参照されるラベルまたはオプション
解説
指定されたラベルが代入されたラベル型の変数を初期化します。
p1で、初期化される変数名を指定します。
p2で、変数に保存されるラベルの参照元を指定します。
p2にラベルを指定した場合は、ラベルが示す場所を参照元とします。
この場合は、「変数=*ラベル名」と記述した場合と変わらない動作となります。
p2に数値を指定した場合は、以下の動作を行ないます。
値 : 参照されるラベル
--------------------------------------------------
0 次に実行されるプログラム位置を参照する
1 次の1ステートをスキップした後に実行されるプログラム位置を参照する
(http://ohdl.hsproom.me/?q=newlab)
특히 재미있는 것은 두 번째 파라미터다.p2에서 0을 지정할 때 newlab 명령의 다음 위치에 라벨을 설정하고 p1을 대체합니다.
p2에서 1을 지정할 때 newlab 명령의 다음 위치에 라벨을 설정하고 p1을 대체합니다.
재미있다.
이것은 무슨 명령을 위한 것입니까?
특히 두 번째 매개 변수에서 1을 지정하는 경우 소위 말하는 것으로 알려져 있다추수선소.
Python, Ruby, C# 등 언어에서 yeld 형식으로 이루어진 것으로 균형기 생성에 사용된다.
이 언어들은 yeld를 호출할 때 이 블록의 변수 범위에서 뽑을 수 있고 다음 호출할 때 변수 상태를 유지하고 계속 처리할 수 있기 때문에 처리를 잠시 중단하고 호출 원본을 되돌려줍니다.
HSP는 다른 언어에 비해 변수에 작용하지 않고 이엘드처럼 컨디션을 유지하는 기능 등이 없기 때문에 이번에는 HSP에 적용되는 코르크 사용법 몇 가지를 소개한다.
두 번째 매개변수가 0인 경우
이것은 newlab 명령 이후 즉시 처리를 다시 시작하는 모드입니다.
미안하지만, 나는 실용적인 예를 생각하지 못했다.
두 번째 매개변수가 1일 경우
newlab 명령의 다음부터 처리를 다시 시작하는 모드입니다.
newlab 명령 다음에 되돌아오는 명령이 있습니다.
문자 보내기
아래의 예는 마을 사람들에게 대사를 전달하는 예이다.콜친은 RPG 등 시나리오 처리에 적합하죠.
message = "" // メッセージ
// レベル1のステージ読み込み処理を呼び出す
gosub *start
goto *main
*start
message = "こんにちは。▼"
newlab nextmessage, 1: return
message = "こんにちは。\nここはハジメノ村さ。▼"
newlab nextmessage, 1: return
message = "僕は何の変哲もない村人。▼"
newlab nextmessage, 1: return
message = "君とは仲良くなれそうだ、うちに寄って行かない?▼"
newlab nextmessage, 1: return
message = "みたいな感じです。▼"
newlab nextmessage, 1: return
stop
*main
redraw 0
// 背景塗りつぶし
hsvcolor 100, 200, 50
boxf
// 文字表示
hsvcolor 100, 200, 230
pos 100, 100
mes "村人"
mes message
// クリックされたら次のメッセージを読み込む
stick key
if (key & 256) {
gosub nextmessage
}
redraw 1
await 33
goto *main
순서대로 상태를 바꾸다
다음 예는 게임에서 현재 무대 등이 순서대로 움직이는 상태를 바꾸기 위해 사용하는 코르크.
나는 왼쪽 단추를 누르면 수준이 상승할 수 있다는 것을 알 수 있다고 생각한다.
caption = "" // ステージ名
bgcolor = 0 // 背景色
// レベル1のステージ読み込み処理を呼び出す
gosub *level1
goto *main
*level1
caption = "LEVEL1"
bgcolor = 40
// レベル1のステージ読み込み処理
newlab nextlevel, 1: return
caption = "LEVEL2"
bgcolor = 80
// レベル2のステージ読み込み処理
newlab nextlevel, 1: return
caption = "LEVEL3"
bgcolor = 120
// レベル3のステージ読み込み処理
newlab nextlevel, 1: return
caption = "LEVEL4"
bgcolor = 160
// レベル4のステージ読み込み処理
newlab nextlevel, 1: return
caption = "CLEAR"
bgcolor = 191
stop
*main
redraw 0
// 背景塗りつぶし
hsvcolor bgcolor, 200, 50
boxf
// 文字表示
hsvcolor bgcolor, 200, 230
pos 100, 100
mes "現在のレベル:"+caption
// クリックされたら次のステージへ
stick key
if (key & 256) {
gosub nextlevel
}
redraw 1
await 33
goto *main
이외에도 게임의 프레임에 따라 장면을 전환할 때 경소설 게임, RPG 등 태그가 쉽게 추가되는 처리도 활용할 수 있다.
자유자재로 사용하려면 다소 머리가 쓰이지만 시원하게 사용하면 편하다.
기본적으로 어떤 신호에 따라 순서대로 처리하는 상황에서 비교적 사용하기 쉽다.
뉴랩을 사용하는 다양한 기술 방법을 꼭 고려해 주십시오.
Reference
이 문제에 관하여(newlab의 사용법을 열심히 생각하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mjhd/items/44d1a919b5485629e7e8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)