Skip to content
biud436 edited this page Nov 13, 2019 · 5 revisions

μ„€μΉ˜

슀크립트 μ—λ””ν„°μ˜ μ†Œμž¬(Matrials) μ„Ήμ…˜ μ•„λž˜μ— μƒˆλ‘œμš΄ 슀크립트 칸을 μƒμ„±ν•˜κ³ , 슀크립트 본문을 λ³΅μ‚¬ν•˜μ—¬ μΆ”κ°€ μ‚½μž…ν•΄μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€. μŠ€ν¬λ¦½νŠΈλŠ” Main μœ„μ— μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

νŠΉμ§•

  • 전체킀 μž…λ ₯ 지원
  • 마우슀 포인터 ν‘œμ‹œ
  • 마우슀 μž…λ ₯
  • 슀마트 무브 κΈ°λŠ₯ (μžλ™ 이동)
  • 마우슀 휠둜 슀크둀 λ‹€μš΄ κ°€λŠ₯
  • λͺ©μ μ§€ μ’Œν‘œ ν‘œμ‹œ κΈ°λŠ₯
  • μœ λ‹ˆμ½”λ“œ 처리

μ‚¬μš©λ²•

νŠΉμ • ν‚€κ°€ 눌린 μƒνƒœμΈμ§€ μ²΄ν¬ν•©λ‹ˆλ‹€. 인자 값은 λ¬Έμžμ—΄, 심볼, 가상 ν‚€ μ½”λ“œ κ°’ 쀑 ν•˜λ‚˜λ₯Ό λ°›μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄, 인자 값에 'A'λ₯Ό λ„˜κΈ°λ©΄ ν•΄λ‹Ή 가상 ν‚€μ½”λ“œ κ°’ 65λ₯Ό μ²΄ν¬ν•©λ‹ˆλ‹€.

p "]" if Input.press?("]")
p "[" if Input.press?("[")
p ";" if Input.press?(";")
p '"' if Input.press?('"')
p ">" if Input.press?(">")
p "<" if Input.press?("<")
p "?" if Input.press?("?")
p "\\" if Input.press?("\\")
p "-" if Input.press?("-")
p "+" if Input.press?("+")
p "~" if Input.press?("~")

가상 ν‚€ μ½”λ“œ 값을 숫자 κ°’μœΌλ‘œ 직접 μž…λ ₯ν•˜λŠ” 방법도 μžˆμŠ΅λ‹ˆλ‹€. ν‚€ μ½”λ“œ 221 은 자판 ']' 와 κ°™μŠ΅λ‹ˆλ‹€.

p "]" if Input.trigger?(221)

심볼을 μ‚¬μš©ν•  경우, λ‹€μŒ μ½”λ“œμ²˜λŸΌ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€. λ³΄μ‹œλŠ” κ²ƒμ²˜λŸΌ, μ‹¬λ³Όμ΄λΌλŠ” 건 콜둠(:) 문자둜 μ‹œμž‘ν•©λ‹ˆλ‹€.

p "backspace" if Input.press?(:VK_BACK)

λͺ¨λ“  가상 ν‚€ μ½”λ“œ 값은 164 행을 μ°Έκ³ ν•˜μ„Έμš”.

Input.trigger?(Symbol)
Input.repeat?(Symbol)
Input.release?(Symbol)
Input.press?(Symbol)
Input.trigger?(String)
Input.repeat?(String)
Input.release?(String)
Input.press?(String)
Input.mouse_trigger?(0)
Input.mouse_trigger?(1)
Input.mouse_trigger?(2)
Input.mouse_release?(0)
Input.mouse_release?(1)
Input.mouse_release?(2)
Input.mouse_press?(0)
Input.mouse_press?(1)
Input.mouse_press?(2)
Input.mouse_x
Input.mouse_y
TouchInput.x
TouchInput.y
TouchInput.z                  # 마우슀 휠; μ–‘μˆ˜(+)λ©΄ νœ μ„ μœ„λ‘œ μ˜¬λ¦¬λŠ” 쀑. 음수(-)λ©΄ νœ μ„ μ•„λž˜λ‘œ λ‚΄λ¦¬λŠ” 쀑. κΈ°λ³Έ μƒνƒœλŠ” 0;
TouchInput.wheel             # 마우슀 휠; μ–‘μˆ˜(+)λ©΄ νœ μ„ μœ„λ‘œ μ˜¬λ¦¬λŠ” 쀑. 음수(-)λ©΄ νœ μ„ μ•„λž˜λ‘œ λ‚΄λ¦¬λŠ” 쀑. κΈ°λ³Έ μƒνƒœλŠ” 0;
TouchInput.trigger?(:LEFT)
TouchInput.trigger?(:RIGHT)
TouchInput.trigger?(:MIDDLE)
TouchInput.press?(:LEFT)
TouchInput.press?(:RIGHT)
TouchInput.press?(:MIDDLE)
TouchInput.release?(:LEFT)
TouchInput.release?(:RIGHT)
TouchInput.release?(:MIDDLE)

μ†Œμ†Œν•œ 팁

λ³Έ μŠ€ν¬λ¦½νŠΈλŠ” 바닐라 μƒνƒœμ˜ RPG Maker VX Aceμ—μ„œ μ‚¬μš©ν•˜κΈ° μ ν•©ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ³Έ μŠ€ν¬λ¦½νŠΈλŠ” Windows ν”Œλž«νΌ 용이기 λ•Œλ¬Έμ— μœˆλ„μš°μ¦ˆμ—μ„œλ§Œ λŒμ•„κ°€λ©°, Ruby/SDL 기반의 λ„€μ½” ν”Œλ ˆμ΄μ–΄λ‚˜ MKXPμ—μ„œ λŒμ•„κ°€λ„λ‘ μ„€κ³„λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ˜ν•œ λŒ€λΆ€λΆ„μ˜ μž…λ ₯ μŠ€ν¬λ¦½νŠΈκ°€ 마우슀 μ™Όμͺ½ λ²„νŠΌμ„ 클릭할 λ•Œ 마치 κ²°μ •ν‚€λ₯Ό λˆ„λ₯Έ κ²ƒμ²˜λŸΌ 취급을 ν•˜λŠ”λ°μš”. 이 μŠ€ν¬λ¦½νŠΈλŠ” ν•΄λ‹Ή μŠ€ν¬λ¦½νŠΈλ“€μ²˜λŸΌ fake ν‚€λ₯Ό μ‚½μž…ν•˜λŠ” μ‹μœΌλ‘œ λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

마우슀 μž…λ ₯κ³Ό ν‚€λ³΄λ“œ μž…λ ₯은 μ •ν™•νžˆ κ΅¬λΆ„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄, Window_Selectable을 λΆ€λͺ¨λ‘œ 가지고 μžˆμ§€ μ•Šμ€ Windowμ—μ„œλŠ” 마우슀 μ™Όμͺ½ λ²„νŠΌ 클릭 μ—¬λΆ€λ₯Ό κ²€μ‚¬ν•˜κ³ μž ν•  땐 TouchInput.trigger?(:LEFT)λ‚˜ TouchInput.press?(:LEFT) λ“±μ˜ λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ 직접 μ²΄ν¬ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.

λ˜ν•œ ν•œκΈ€ μž…λ ₯의 경우, 이것은 ν•œκΈ€ μž…λ ₯ μŠ€ν¬λ¦½νŠΈκ°€ μ•„λ‹ˆκΈ° 떄문에 ν•œκΈ€ μž…λ ₯ μŠ€ν¬λ¦½νŠΈκ°€ ν¬ν•¨λ˜μ–΄μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•œκΈ€ μž…λ ₯의 경우, λ³„λ„μ˜ μ• λ“œμ˜¨μ„ ν•„μš”λ‘œ ν•©λ‹ˆλ‹€. ν•œκΈ€ μž…λ ₯의 경우, DLL을 톡해 Windowsκ°€ μ‘°ν•©ν•΄μ£ΌλŠ” ν•œκΈ€ 문자λ₯Ό κ°€μ Έμ˜€λŠ” 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€.

Github RAW : RS_HangulNameInputProcessing.rb

DLL : RSEditHost.dll

μ΄λ ‡κ²Œ κ΅¬ν˜„ν•œ μ΄μœ λŠ” μ˜μ–΄, 쀑ꡭ어, 일본어, μ•„λžμ–΄ λ“± μ—¬λŸ¬κ°€μ§€ μ–Έμ–΄λ₯Ό μž…λ ₯ν•  수 있게 ν•˜κΈ° μœ„ν•¨μ΄λ©° ν•œκΈ€ μ‘°ν•©μ˜ 경우 λ§Žμ€ μΌ€μ΄μŠ€λ₯Ό ν•„μš”λ‘œ ν•˜λ©° κ½€ λ³΅μž‘ν•©λ‹ˆλ‹€. 개인적으둜 κ΅¬ν˜„ν•΄λ³΄κΈ°λ„ ν–ˆμ§€λ§Œ 혹 놓쳐 버린 λ²„κ·Έλ‘œ 인해 μ‹€μ œ κ²Œμž„μ—μ„  μ‚¬μš©ν•˜μ§„ μ•ŠμœΌλ©° μ‚¬μš© μ‹œ ν’ˆμ§ˆ μ €ν•˜λ‘œ μ΄μ–΄μ§ˆ 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

λ‹€μš΄λ‘œλ“œ

슀크립트 : RS_Input.rb

Windowsμ—μ„œ 마우슀의 Wheel 값을 κ°€μ Έ 였렀면, 창을 생성할 λ•Œ λ“±λ‘λœ μœˆλ„μš° ν”„λ‘œμ‹œμ € ν•¨μˆ˜λ₯Ό μ„œλΈŒ ν΄λž˜μ‹±ν•˜μ—¬ 휠 값에 ν•΄λ‹Ήν•˜λŠ” λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•΄μ„œ 가져와야 ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μž‘μ—…μ„ λ³„λ„μ˜ DLL 없이도 μˆ˜ν–‰ν•  μˆ˜λŠ” μžˆμœΌλ‚˜ λ£¨λΉ„λ‘œ κ΅¬ν˜„ν•˜λ©΄ μ‹¬κ°ν•œ 속도 μ €ν•˜ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 마우슀 휠 값은 λ³„λ„μ˜ DLLμ—μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

DLL (마우슀 휠 μ‚¬μš©) : RS- InputCore.dll

인증 받지 μ•Šμ€ DLL 파일의 경우, μ•…μ„± μ½”λ“œλ‘œ μ˜€μ§„ν•˜μ—¬ 백신이 μ‚­μ œν•˜λŠ” κ²½μš°κ°€ μ’…μ’… μžˆμŠ΅λ‹ˆλ‹€. μΈμ¦μ„œκ°€ λΉ„μ‹ΈκΈ° λŒ€λ¬Έμ— λ³„λ„λ‘œ μΈμ¦μ„œλŠ” μ—†μŠ΅λ‹ˆλ‹€. 직접 λΉŒλ“œν•΄μ„œ μ‚¬μš©ν•˜μ‹œλ €λ©΄ μ•„λž˜ 링크에 μžˆλŠ” λͺ¨λ“  νŒŒμΌμ„ 받은 ν›„, Visual Studio 2015 μ΄μƒμ—μ„œ RS-InputCore.sln νŒŒμΌμ„ μ‹€ν–‰ν•˜μ—¬ Release λͺ¨λ“œλ‘œ λΉŒλ“œλ₯Ό ν•΄μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.

DLL μ†ŒμŠ€ : 링크

마우슀 휠 κ°’ νšλ“μ€ λ‹€μŒκ³Ό 같이 C++둜 μž‘μ„±λœ μ½”λ“œμ΄λ©° μ½”λ“œκ°€ DLL둜 λΉŒλ“œλ˜κ³ , μ΅œμ’…μ μœΌλ‘œ Input::RSGetWheelDelta.call을 톡해 κ°€μ Έμ˜€κ²Œ λ©λ‹ˆλ‹€.

LRESULT CALLBACK SuperProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_LBUTTONDOWN:
		SetFocus(g_hRGSSPlayer);
		break;
	case WM_MOUSEWHEEL:
		g_nWheelDelta = (SHORT(HIWORD(wParam)) > 0) ? 1 : -1;
		break;
	}
	return CallWindowProc(OldProc, hWnd, uMsg, wParam, lParam);
}

마우슀 νœ μ„ μ‚¬μš©ν•˜κ³  싢지 μ•Šμ€ κ²½μš°μ— λŒ€ν•΄μ„œλŠ” μ„ νƒκΆŒμ΄ μ—†μŠ΅λ‹ˆλ‹€. 휠 처리λ₯Ό μ‚¬μš©ν•˜κ³  싢지 μ•Šλ‹€λ©΄ λ³„λ„λ‘œ 슀크립트λ₯Ό μˆ˜μ •ν•˜μ…”μ•Ό ν•©λ‹ˆλ‹€.

버전 둜그

# v1.0.0 (2018.10.29) - First Release.
# v1.0.1 (2018.10.29) : 
# - Fixed the bug that causes an error when clicking the right button of the mouse.
# - Added the TouchInput feature that is the same as RPG Maker MV.
# - Fixed the issue that did not play the cursor sound when selecting the button using mouse
# v1.0.2 (2018.11.11)
# - Added the feature such as a path finding in RPG Maker MV
# - Added the destination sprite such as RPG Maker MV
# v1.0.3 (2019.01.20) :
# - Added the feature that can use the mouse wheel in the Save and Load scenes.
# v1.0.4 (2019.01.21) :
# - In the selectable window, Added the feature that can use the mouse wheel.
# v1.0.5 (2019.02.02) :
# - Added feature that can use the mouse left button in the Window_DebugRight
# v1.0.6 (2019.03.25) :
# - Added the repeat? method into Input class.
# v1.0.7 (2019.11.13) :
# - 마우슀 μ™Όμͺ½ 클릭으둜 비행선을 νƒ‘μŠΉν•  수 μ—†μ—ˆλ˜ 문제λ₯Ό μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
# - λͺ©μ μ§€ μŠ€ν”„λΌμ΄νŠΈλ₯Ό ν™”λ©΄μ—μ„œ 감좜 수 μžˆλŠ” κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
# - λΉ„ν–‰μ„  νƒ‘μŠΉ ν›„, 마우슀 μžλ™ 이동 μ‹œ ν•œ 칸만 움직이고 λ©ˆμΆ”λŠ” ν˜„μƒμ„ μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
# - TouchInput.updateλ₯Ό μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μ‚¬μš© 쑰건

상업적인 κ²Œμž„ 및 비상업적인 κ²Œμž„μ—μ„œ λͺ¨λ‘ 무료둜 이용 κ°€λŠ₯ν•©λ‹ˆλ‹€.

단, ν¬λ ˆλ”§μ— λŸ¬λ‹μ€λΉ› λ˜λŠ” biud436을 κΈ°μž…ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ°Έκ³ 

Lectures on Game Programming - 링크