티스토리 뷰

흥미/gamemaker

#2 드래그 앤 드롭 - 변수

RadderNepa 2023. 7. 18. 02:51

- 변수를 이용해야 조금 더 복잡한 프로그램을 만들 수 있다. 이번 글에서 배울 변수는 아래와 같다.

- Assign Variable(인스턴스 변수)
- Declare Temp(지역변수, 임시변수)
- Global Variable(전역변수)
- 내장 변수
- 다른 오브젝트의 변수 불러오기

인스턴스 변수(Assign Variable)

- 이전 글에서 만들었던 텍스트 오브젝트에 Create event를 추가해보자.

Create event : 오브젝트가 처음 만들어졌을 때 초기 행동을 설정하는 이벤트

- 3개의 Assign Variable Action을 drag&drop 했다. 해당 Action은 새로운 변수를 선언할 때 사용하는 Action이다. 3개의 변수에 각각 이름과 값을 할당하자.

- Draw 이벤트를 이용해 선언&할당한 3개의 변수를 화면에 출력해보자

오른쪽이 실제 게임 실행 화면

Caption : 변수 왼쪽에 출력될 값 입력  /  value : 값을 출력할 변수를 입력  /  x와 y : 글자가 출력될 좌표

cf) Draw와 관련된 액션 아이콘의 색상은 황토색으로 표시, 해당 색상의 액션들은 오직 Draw 이벤트에서만 작동한다.


● 지역변수(Declare Temp)

- 위에서 본 Draw 이벤트에 Declare Temp action, Draw Value action을 하나씩 더 추가해보자

Assign Value(인스턴스 변수)
- 오브젝트의 Create 이벤트에서 처음으로 선언한 후 오브젝트 내의 어떠한 이벤트에서도 사용할 수 있는 변수

Declare Temp(지역변수, 임시변수)
- 선언된 이벤트 내에서 한 번 사용된 후 더 이상 사용하지 않고 버려지며 다른 이벤트에서는 사용할 수 없는 변수

- Create 이벤트에서 전역변수가 아닌 지역변수를 선언한 후 다른 이벤트에서 해당 변수를 사용하면 오류가 발생한다. by scope

- 이는 변수의 영역(scope)에 따른 개념이다. 변수에 scope가 있는 이유는 컴퓨터의 메모리와 연관이 있다.
- 변수에 값을 저장 및 활용할 때는 메모리를 사용하는데 잠시만 사용하는 변수는 더 이상 필요가 없어지면 그때 그때 폐기하는 편이 메모리 용량 관리 및 게임 최적화에 좋다.


● 전역변수(Global Variable)

- 또 다른 변수를 Create Event에 추가해보자

- Set Global Variable을 추가할 것인데 해당 변수는 선언 이후에 게임이 종료되기 전까지 어떠한 오브젝트, 어떠한 룸에서도 계속 사용할 수 있는 변수이다.
- 따라서 전역변수는 게임의 첫 시작 부분에서 선언한 후 다시 선언되지 않는것이 바람직하다.

- 전역변수와 인스턴스 변수 개념이 헷갈릴 수 있어 다시 한 번 정리해보았다. 활용 가능 scope에 차이가 있다.

Assign Value(인스턴스 변수)
- 오브젝트의 Create 이벤트에서 처음으로 선언한 후 오브젝트 '내'의 어떠한 이벤트에서도 사용할 수 있는 변수

Global Variable(전역변수)
- 선언 이후에 게임이 종료되기 전까지 '어떠한' 오브젝트, '어떠한' 룸에서도 계속 사용할 수 있는 변수

- objText 오브젝트에서 선언한 전역변수를 다른 오브젝트(objText2)에서 사용해보자

- objText2에 Draw 이벤트를 추가해 전역변수를 출력해보자. Get Global Variable을 이용해 선언한 전역변수를 가져올 수 있다.(선언한 전역변수의 Name을 Target에 불러오는 기능 수행)

- Temp에 체크하는 경우 선언하는 변수는 지역변수가 된다.
- 만약 objText에서 선언한 전역변수인 day 변수가 Assign Value(인스턴스 변수)나 Declare Temp(지역변수, 임시변수)라면 scope를 벗어나기에 에러가 발생할 것이다.

- 룸에 objText2를 추가한 후 실행시켜보자

- 참고로 굳이 Get Global Variable을 사용할 필요없이 (global.전역변수이름)을 이용해 전역변수를 불러올 수도 있다.

- 이 방법을 자주 사용하자


● 내장 변수

- 내장 변수는 개발자가 직접 선언하지는 않았으나 기본적으로 내장되어있는 변수이다.
- 인스턴스의 좌표, 속도, 스프라이트 알파값, 게임 프레임 등 다양한 내장 변수가 있다.
- Draw Value를 이용해 image_alpha(오브젝트 알파값), fps(Frame Per Second), speed(오브젝트 속도)를 확인해보자


● 다른 오브젝트의 변수 불러오기

- 룸에 오브젝트A가 존재했을 때 다른 오브젝트B가 오브젝트A의 변수값을 가져올 수도 있다.
- 만약 오브젝트A가 룸에 존재하지 않는다면 에러가 발생할 수 있으니 주의하자
- 만약 같은 오브젝트A가 룸에 여러개 있다면 가장 마지막으로 생성된 것의 변수를 불러오게 된다.
- 편리할 때도 있지만 남용하면 엉뚱한 값이 불려질 수도 있으니 주의하자

- objText의 Create Event에서 선언한 변수 3개(name, age, point)를 다른 오브젝트인 objText2에서 출력해보자

왼쪽 : objText / 오른쪽 : objText2 / (오브젝트명.변수명) 방식으로 objText의 변수를 호출했다.

cf)

- 개인적인 소견으로 위의 방식이라면 굳이 전역변수(Global Variable)가 있어야하나 싶은 생각이 들수도 있다.

- 하지만 의도치 않게 코드가 꼬이는 걸 방지하고 명확하게 데이터를 사용 및 저장하기 위해서는 애초에 scope에 알맞는 변수를 선언 및 사용하는게 개발과 추후 유지보수에서 더 좋다고 생각한다.

'흥미 > gamemaker' 카테고리의 다른 글

#3 드래그 앤 드롭 - 매크로  (0) 2023.07.19
#1-1 IDE 기본 기능  (0) 2023.07.17
#1 드래그 앤 드롭 - 이벤트와 액션  (0) 2023.07.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함