본문 바로가기
블록코딩/ㆍ코듈라

이미지 스프라이트끼리 겹쳐서 사라진다면?

by diMik 2022. 5. 20.

캔버스에 이미지 스프라이트를 띄워 드래그하다보면, 스프라이트끼리 겹치기도 하죠. 이 경우 스프라이트가 가려지거나 서로 달라붙어버리는 현상이 발생합니다. 이렇게 말이죠. 캔버스 배경에 강아지 사진을 띄워두고, 이미지 스프라이트를 이용해 하트, 별, 잔디 스티커로 강아지 사진을 꾸며보려했는데, 이게 뭔일인가요.

 

아 좀 떨어지라고 !

 

이를 sprite cannibalism 현상이라고 부릅니다. 해석하면 스프라이트 동족끼리 잡아먹는 현상 정도가 되겠네요. 어감이 좀 무시무시하죠? ㅎㅎ 이 현상을 해결하지 않으면 사진꾸미기, 게임제작 등 여러가지 캔버스 사용 작업 시에 문제가 발생합니다. 하지만 걱정마세요. 이 문제도 간단한 코드추가로 해결할 수 있습니다. 

 

해결방법

 

1. 디자이너화면 설정

일단 그림이 없는 숨김용 이미지 스프라이트 하나를 만들어줍니다. 그 다음 visible 체크를 해제하여 실제로 캔버스에서는 보이지 않게 해주세요. 

 

디자이너 화면에서 설정

 


2. 블록화면에서 코딩

코드를 아래와 같이 작성해주세요.

 

우선 현재터치라는 변수를 하나 만들어요. 이 변수는 사용자가 바로 현재 어떤 스프라이트를 터치하고 있는 지를 담게 됩니다.

그 다음 어떤 스프라이트든지 터치를 하는 순간 (Touch Down) 터치한 그 스프라이트(component)가 현재 터치가 되도록 코딩합니다. 터치하고 있는 스프라이트에만 집중되게 만드는 거죠.

손을 핸드폰에서 떼는 순간(Touch Up) 그 포커스는 우리가 실제 사용하지 않는 숨김 스프라이트로 가게 돼요. 

드래그는 터치다운을 해야 이루어지는 것이기 때문에, 드래그(Dragged)를 하게 되면 터치하고 있는 그 스프라이트를 자유롭게 이동할 수 있어요. 다른 스프라이트의 간섭을 받지 않지요. 

 


3. 결과 확인

 

더이상 서로를 잡아먹지 않아요

 

 

어때요? 생각보다 간단한 작업이죠? 

사진에 스티커를 붙이는 앱도, 이러한 코딩을 넣어줘야 사용자가 더욱 편리하게 사용할 수 있을 거에요. 이제 스프라이트끼리 겹치는 걱정없이 다양한 앱들을 만들어보세요. 

 

 

혹시 궁금한 점이 있으시면, 댓글 남겨주세요. 제가 아는 것들은 최대한 답변 달아드릴게요. 이번 시간도 수고하셨습니다.

 

댓글