티스토리 뷰
- 변수를 이용해야 조금 더 복잡한 프로그램을 만들 수 있다. 이번 글에서 배울 변수는 아래와 같다.
- 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에서 출력해보자
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
- 빅데이터 분석기사
- 프로세스
- Stream
- 자료구조
- nosql
- SQL
- Spring Boot
- git
- db
- Phaser
- 코테
- 알고리즘
- 프로그래머스
- 운영체제
- jpa
- MySQL
- node.js
- Advanced Stream
- Java8
- java
- SpringBoot
- 빅데이터
- spring
- MongoDB
- 메모리
- OS
- 코딩테스트
- Phaser3
- API
- DART
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |