본문 바로가기
스크래치/스크래치 리듬게임

리듬게임 만들기4. 라인 확장

by 할거없네 2017. 12. 26.

이번 포스팅은 기존의 라인에서 더 많은 라인으로 추가하는 부분과, 노트를 생성하기 위한 데이터 관리를 만들 차례입니다.

▲ 이제 여러개 라인으로 추가해보도록 합니다.



1. 키 확장하기

기존에는 라인이 a 하나였지만 이제 나머지 s, d, f라인을 추가할 차례입니다. 이미 a라인을 만들었기 때문에 라인을 더 추가하는 것은 복사 붙인 후 변수들이 중복되는 것을 방지하도록 해주어야 할 것입니다. 라인이 추가되는 부분은 키와 노트부분이 되겠습니다. 먼저 키부분을 살펴보면 기존에 'a'키를 누르면 다음과 같이 노트의 위치에 따른 판정을 하도록 되어 있습니다.



위 그림을 보시면 빨간색 부분이 s, d, f로 추가되면서 바뀌어야 할 부분들입니다. 각각 변수와 리스트들을 추가적으로 만들어서 각각 변수로 바꿔주면서 추가를 해줍니다.





이렇게 각각 블록을 만들어 주고 이제 키 입력 부분에 똑같이 추가하도록 합니다.

입력부분은 이미 민들어 져 있는 부분에서 추가적으로 변수를 만들고 복사 붙이기 함으로써 확장이 끝납니다.



2 노트 라인 확장하기

다음은 노트가 다른 라인에서 떨어지도록 만들어줄 차례입니다.


여기서 node_list는 노트의 데이터블록으로 이후에 설명될 예정입니다. 다음으로 초기값과 복제생성을 위한 블록이 순차적으로 실행됩니다.


먼저 초기값부분에서 a가 아닌 다른 라인들(s, d, f)들도 각각 추가해서 동일하게 추가시켜 줍니다. 이전에서는 없었던 새로운 변수도 볼 수 있는데요, (node_number_shift)는 노트를 복제하는 개수를 정해주는 변수입니다. 여기서 10개로 한 것은 각 라인에 표시되는 노트는 최대 10개가 되는 것입니다. 미리 10개를 복제해 놓고 자신의 차례가 되면 보여주는 방식으로 사용하기 위한 수단인데, 이렇게 만드는 이유는 복제하는 렉을 감소시키고 화면에서 복제되는 개수를 제어할 수 있기 때문입니다. 만약에 이 방법이 어렵고 이해되기 어렵다면 단순히 복제하기를 기본적으로 쓰셔도 무방합니다.



노트가 만들어질 복제하기는 미리 생성이 됩니다. 각 라인당 10개씩 미리 만들어 놓습니다. 복제될 때 자신의 라인에서 @a, @s, @d, @f 값을 1에서 10까지 부여받게 됩니다.



복제된 노트들은 이제 자신의 타이밍에 따라서 화면에 보여지게 되고 아래로 이동하게 됩니다.



이미 초기값에서는 자신의 라인에 따라서 x위치는 정해져 있습니다.




노트들의 위치는 각 리스트 번호에서 시간에 따른 위치로 정해진 것입니다. a라인은 이미 만들어 보았기 때문에 나머지 라인들도 동일하게 복제하여 각각의 리스트로 수정하여 적용합니다.




노트 삭제 조건도 추가됩니다기존의 방법과 수정이 되었는데복제본 삭제되신 node_remake블록으로 이미 복제되어 있는 노트를 다음 노트로의 순번 대기를 시켜서 화면에 나와야 할 조건이 되기 까지 기다리도록 만들었습니다.그러면 복제본 만들기와 생성하기를 서로 하지 않기 때문에 생성렉은 발생하지 않게 됩니다물론 만들기 위한 방법은 좀 더 복잡하기 때문에 단순히 삭제시키고 다시 복제본을 만드는 방식을 써도 무방할 것입니다.




이제 노트 리스트에 a, s, d, f라인에 각각 데이터를 추가해서 넣어주면 노트가 다른 라인에도 떨어지는 것을 볼 수 있습니다.



스크립트 보기:

https://scratch.mit.edu/projects/193442487/

댓글