게임제작/강좌

[게임메이커 스튜디오2]스위치로 보이지 않는 블럭을 온 오프 시키기

게임코드프리 2020. 11. 1. 21:57
반응형

 

기본적으로 게임메이커 스튜디오 시리즈가 자주 변하면서 자꾸 함수의 기능이나 사용법을 미묘하게 바꿔버려

계속해서 새로 공부해야 하거나 헷갈리게 만드는 경우가 있습니다.

특히 게임메이커 스튜디오 2의 2.3 대규모 업데이트가 이뤄지면서 기존 작업 중이던 게임들이 정상적으로

작동하지 않거나 버그나 오류가 엄청나게 벌어지면서 또한번 저의 취미생활에 고통을 주었습니다.

어쨌거나 작업을 하면서 너무나 시간을 많이 손해를 보아 이 내용에 대해 공유를 하고자 글을 남깁니다.

 

스위치를 켜면 블록이 보이고 끄면 사라지는 블록 작업

 

먼저 스위치가 필요합니다. 스위치로 사용할 이미지는 누르기 전과 누른 후의 이미지 2장이 필요하며

저는 이렇게 설정해두었습니다.

 

1. 스위치 작업

 

그 다음 오브젝트를 생성 후, 

스위치에 사용할 변수들을 정의해야 하는데 초보자들의 경우는 감이 전혀 안 오겠지만 기본적으로 

이미지가 프레임(1장 이상의 움직임을 가진 그림)이 있을 경우 게임메이커에서는 자동적으로 재생을 해버리기에

계속 움직이는 상태로 보여집니다.

그래서 크리에이트 코드에서 아래와 같이 작성합니다.

 

///@desc switch object init variable
image_speed = 0;
image_index = 0;
switch_push = false;

 

이미지의 스피드를 0으로 설정하여 움직이지 못하는 상태로 만들어줍니다.

그 이후 이미지 인덱스(몇 번째 프레임을 사용할 것인지의 여부)를 설정. 첫 번째 프레임을 고정적으로 보여줄 것이기에

0으로 설정합니다.

그다음에는 스위치 푸시라는 변수명을 정해줬고 그것을 오프로 먼저 설정했습니다.

 

///@desc step event switch push

if (place_meeting(x+15, y, obj_player)) or (place_meeting(x-15, y, obj_player))
{
	if (keybord_check_pressed(vk_enter))
    {
    	switch_push = !switch_push;
    }
}

if (switch_push = true)
{
	image_speed = 0;
	image_index = 1;
}else
{
	image_speed = 0;
    image_index = 0;
}

 

이번에는 스텝 이벤트로 가서 스위치에 플레이어가 다가갔을 때 엔터를 입력하면 온/오프가 되도록 작성한 코드입니다.

x + 15 (오른쪽 15픽셀 정도에서 만나면)는 여유 있게 충돌 체크를 하기 위해서 썼으며 왼쪽도 마찬가지입니다.

그다음 게임메이커 스튜디오의 기본 함수인 키보드 체크를 통해 이프 문을 만들었고,

이후에는 스위치 푸시 변수를 누를 때마다 온/오프가 되도록 작성하였습니다. 변수명 =! 변수명은 true/false를 계속

반환해주기에 외워두면 좋은 코드입니다.

 

아래의 코드도 설명이 필요 없을 만큼 간단한 스위치가 트루가 되면 이미지를 바꿔주고 그렇지 않으면 다시 원래대로

돌려놓는 코드입니다.

 

온/오프가 되는지 테스트

 

2. 블록의 작업

 

블럭의 작업에서 상당히 고통스러웠던 이유에 대해서는 앞서 설명대로 게임메이커 스튜디오가 자꾸 변덕을 부려서

어떤 버전에서는  solid 함수가 아주 쉽고 간단하게 작동을 하다가 이번에는 되지 않아 절망하고 있었지만,

외국의 포럼에서 알게 된 사실은 스프라이트가 있고 없고 가 더 중요하다는 사실을 알게 되었습니다. (내가 똥 멍청이 었음)

 

1. 오브젝트를 만들되 스프라이트를 처음에는 설정하지 않을 것!

 

보이지 않는 블록에서는 처음 세팅에서 스프라이트 설정을 제외시켜야 합니다.

크리에이션 코드에서는 그저 스위치 오브젝트의 온/오프 값을 받아올 변수 정도만 있으면 되기에,

create -

on_off = false;

이것으로 충분하며 스텝 이벤트에서 많은 일이 벌어집니다.

 

///@desc invisible block step event

if (instance_exists(obj_switch))
{
	on_off = obj_switch.switch_push;
}

if (on_off = true)
{
	visible = true;
    sprite_index = spr_secret_block;
	mask_index = spr_secret_block;
}else
{
	visible = false;
	sprite_index = noone;
	mask_index = noone;
	solid = false;
}

 

먼저 초기에 만든 스위치 오브젝트가 있는지의 여부를 체크하고 있다면 보이지 않는 블록의 오브젝트에서 설정한

on_off  변수에 스위치 푸시 변수의 값을 받아옵니다.

그것으로 온이 되면 이미지를 보여주고 스프라이트를 이제야 세팅합니다.

그게 아닐 경우에는 이미지를 보여주는 것을 오프 시키고 스프라이트나 마스크 값을 모두 해제하는 것으로

정상 작동이 됩니다.

 

bandicam 2020-11-01 21-58-13-386.mp4
0.90MB

반응형
facebook twitter kakaoTalk kakaostory naver band shareLink
人気ブログランキングでフォロー