# B 버튼이 밀렸을 경우
if Input.trigger?(Input::B)
# 캔슬 SE 를 연주
$game_system.se_play($data_system.cancel_se)
# 맵 화면으로 전환해
$scene = Scene_Map.new
return
end
# C 버튼이 밀렸을 경우
if Input.trigger?(Input::C)
# 파티 인원수가 0 명으로, 세이브, 게임 종료 이외의 커멘드의 경우
if $game_party.actors.size == 0 and @command_window.index < 4
# 버저 SE 를 연주
$game_system.se_play($data_system.buzzer_se)
return
end
# 커멘드 윈도우의 커서 위치에서 분기
case @command_window.index
when 0 # 아이템
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 아이템 화면으로 전환해
$scene = Scene_Item.new
when 1 # 스킬
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 스테이터스 윈도우를 액티브하게 한다
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # 장비
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 스테이터스 윈도우를 액티브하게 한다
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3 # 스테이터스
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 스테이터스 윈도우를 액티브하게 한다
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 4 # 세이브
# 세이브 금지의 경우
if $game_system.save_disabled
# 버저 SE 를 연주
$game_system.se_play($data_system.buzzer_se)
return
end
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 세이브 화면으로 전환해
$scene = Scene_Save.new
when 5 # 게임 종료
# 결정 SE 를 연주
$game_system.se_play($data_system.decision_se)
# 게임 종료 화면으로 전환해
$scene = Scene_End.new
end
return
end
메뉴는 이렇게 하잖아요?
그런데 메뉴(커맨드)를 눌렀을때 말고 누르지 않고 그냥 올려두었을때(??) 효과 지정은 안될려나요?
Input Class에 대한 설명을 하자면....
.press?
누르고 있을 경우에 인식되는 겁니다.
만약 메뉴오픈을 press로 만들면 1frame단위로 계속 열릴겁니다 -_- ;;;
.trigger?
1회에 한하여 인식합니다.
계속 누르고 있어도 메뉴오픈은 1번만 이루어지죠.
그리고 단순히 손이 올라갔을 때의 감지라면.... 키보드가 아니라 터치패드가 아닐지 -_- ;;;;
아마 press쪽을 말씀하시는 걸거라고 생각됩니다.
단지 press의 문제가 1frame당 1회씩 인식을 하기 때문에
a = 0
loop do
Input.update
if Input.press?(Input::C)
a += 1
end
end
라는 식을 생성하게되면 a는 1 frame당 1씩증가.
즉, 사람의 눈으로는 포착하기 힘든 속도로 수가 올라가 버립니다.
메뉴의 이동이라던가, 결정이라던가에서는 이것에 문제를 많이 받죠.
그렇기 때문에 trigger를 쓰거나 press를 쓰되 어느정도 딜레이를 거는 경우가 많습니다만....
딜레이를 거는 경우는 섯불리 잘못했다간 키입력자체가 둔화되므로 유의하시는 편이 좋습니다.