RPGXP/VX 게임에서 마우스로 게임하기
2006.09.06 03:08
# 걶벑볺궻롨룈갌
# 갋궞궻긚긏깏긵긣귩긄긢귻?궔귞륷딮긜긏긘깈깛궸긓긯긻갃
# 갋RGSS100J.dll먩뛱뚺둎붎댥?걁긟긏?깑Web궸궇귟귏궥걂귩Game.exe궴
# ?벏궣긲긅깑?궸긓긯?갃
# 걶긖깛긵깑궸궰궋궲갌
# 륷딮긵깓긙긃긏긣궸긚긏깏긵긣귩벑볺뚣갂Data긲긅깑?궸Map001.rxdata귩
# 긓긯?궢궲렳뛱궢궲궘궬궠궋갃
# ?긞긵됪뽋궳됪뽋귩뜺긏깏긞긏궥귡궴?긃긚궻긓?궕댷벍궢귏궥갃
module Input
# 믦릶걁winuser.h귝귟걂
VK_LBUTTON = 1
VK_RBUTTON = 2
VK_MBUTTON = 4
SM_SWAPBUTTON = 23
gsm = Win32API.new 'user32', 'GetSystemMetrics', 'i', 'i' # 긘긚긡?륉뫴궻뙚뢯
# 긏깋긚빾릶
@@swapped = gsm.call(SM_SWAPBUTTON) != 0 # ?긂긚??깛궻뜺덭궻볺귢뫶궑궻됀붬
@@key_state = Win32API.new 'user32', 'GetAsyncKeyState', # 긌?걁??깛걂륉뫴롦벦
'i', 'i'
@@cursor_pos = Win32API.new 'user32', 'GetCursorPos', # ?긂긚긇??깑띆뷭궻롦벦
'p', 'i'
module_function
#--------------------------------------------------------------------------
# 걶 ?긂긚궻긚긏깏?깛띆뷭
#--------------------------------------------------------------------------
def mouse_global_pos
pos = [0, 0].pack('ll')
# 뚁귂뢯궢궸맟뚻궢궫뤾뜃
if @@cursor_pos.call(pos) != 0
return pos.unpack('ll')
# 렪봲궢궫뤾뜃
else
return nil
end
end
#--------------------------------------------------------------------------
# 걶 ?긂긚궻긏깋귽귺깛긣띆뷭
# catch_anywhere : 긂귻깛긤긂둖궸긇??깑궕궇궯궲귖?귦궦띆뷭귩뺅궥
#--------------------------------------------------------------------------
def mouse_pos(catch_anywhere = false)
# 긚긏깏?깛뤵궻?긂긚긇??깑궻띆뷭귩긏깋귽귺깛긣띆뷭궸
x, y = screen_to_client(*mouse_global_pos)
# 긏깋귽귺깛긣쀌덃궻묈궖궠귩롦벦
width, height = client_size
# 됪뽋둖궳귖?귦궶궋뤾뜃궔됪뽋볙궸긇??깑궕궇귡뤾뜃
if catch_anywhere or (x >= 0 and y >= 0 and x < width and y < height)
return x, y
else
return nil
end
end
#--------------------------------------------------------------------------
# 걶 ?긂긚궻뜺??깛궻돓돷뵽믦
# ignore_swap : ??깛궕뜺롨뾭봹뭫궳궇궯궲귖뼰럨궥귡
#--------------------------------------------------------------------------
def mouse_lbutton(ignore_swap = false)
# ?긂긚??깛궕뜺덭볺귢뫶궑귞귢궲궓귟갂볺귢뫶궑귩뼰럨궢궶궋뤾뜃
if @@swapped and !ignore_swap
button = @@key_state.call(VK_RBUTTON)
else
button = @@key_state.call(VK_LBUTTON)
end
# 0x8000귏궫궼0x8001궶귞궽돓궠귢궲궋귡
return(button == -32767 or button == 32768)
end
#--------------------------------------------------------------------------
# 걶 ?긂긚궻덭??깛궻돓돷뵽믦
# ignore_swap : ??깛궕뜺롨뾭봹뭫궳궇궯궲귖뼰럨궥귡
#--------------------------------------------------------------------------
def mouse_rbutton(ignore_swap = false)
# ?긂긚??깛궕뜺덭볺귢뫶궑귞귢궲궓귟갂볺귢뫶궑귩뼰럨궢궶궋뤾뜃
if @@swapped and !ignore_swap
button = @@key_state.call(VK_LBUTTON)
else
button = @@key_state.call(VK_RBUTTON)
end
# 0x8000귏궫궼0x8001궶귞궽돓궠귢궲궋귡
return(button == -32767 or button == 32768)
end
#--------------------------------------------------------------------------
# 걶 ?긂긚궻뭷돍??깛궻돓돷뵽믦
#--------------------------------------------------------------------------
def mouse_mbuton
button = @@key_state.call(VK_MBUTTON)
# 0x8000귏궫궼0x8001궶귞궽돓궠귢궲궋귡
return(button == -32767 or button == 32768)
end
end
$scr2cli = Win32API.new 'user32', 'ScreenToClient', %w(l p), 'i' # 긚긏깏?깛띆뷭궔귞긏깋귽귺깛긣띆뷭귉빾듂
$client_rect = Win32API.new 'user32', 'GetClientRect', %w(l p), 'i' # 긏깋귽귺깛긣쀌덃롦벦
$readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', # ini긲?귽깑벶귒뜛귒
%w(p p p p l p), 'l'
$findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l' # 긂귻깛긤긂긪깛긤깑롦벦
#--------------------------------------------------------------------------
# 걶 긚긏깏?깛띆뷭궔귞긏깋귽귺깛긣띆뷭귉빾듂
# x, y : 긚긏깏?깛띆뷭
#--------------------------------------------------------------------------
def screen_to_client(x, y)
# 띆뷭궕뼰뚼궶귞렪봲
return nil unless x and y
pos = [x, y].pack('ll')
# 뚁귂뢯궢궸맟뚻궢궫뤾뜃
if $scr2cli.call(hwnd, pos) != 0
return pos.unpack('ll')
# 렪봲궢궫뤾뜃
else
return nil
end
end
#--------------------------------------------------------------------------
# 걶 긂귻깛긤긂긪깛긤깑롦벦
#--------------------------------------------------------------------------
def hwnd
# 긒??뼹귩롦벦궥귡
game_name = "\0" * 256
$readini.call('Game','Title','',game_name,255,".\\Game.ini")
game_name.delete!("\0")
# 긂귻깛긤긂긪깛긤깑귩롦벦
return $findwindow.call('RGSS Player',game_name)
end
#--------------------------------------------------------------------------
# 걶 긏깋귽귺깛긣쀌덃롦벦
#--------------------------------------------------------------------------
def client_size
rect = [0, 0, 0, 0].pack('l4')
$client_rect.call(hwnd, rect)
# top궴left궼륂궸0궶궻궳뤙뿪
right, bottom = rect.unpack('l4')[2..3]
return right, bottom
end
---------------------------------------------------------------------------------------------------------------
우선 위의 스크립트를 main위에 Use_Mouse 라는 이름으로 넣습니다.
그리고 예를 들어서 케릭터 하나와 대화를 만들어 보겠습니다.
케릭터를 하나 만들어서 병렬처리로 만들어 줍니다.
이벤트페이지4쪽에 있는 '스크립트'를 이용하여
lbutton =Input.mouse_lbutton
x, y = Input.mouse_pos
if lbutton and x and y
$game_variables[1] = x / 32
$game_variables[2] = y / 32
end
를 추가 합니다.
$game_variables[1] = x / 32
에서 variables[1] 는 변수1번 이라는 겁니다.
변수 1번을 이미 다른대에 사용하고 계시다면 이 숫자를 바꿔주세요.
그 밑으로 계속 이벤트를 추가 합시다.
◆조건분기 : 변수[0001: npc_x] == 5 # npc x좌표
◆조건분기 : 변수[0002: npc_y] == 9 # npc y좌표
◆문장 : 잘 선택하셨습니다.
◆변수의 조작 : [0001: npc_x] = 0
◆변수의 조작 : [0002: npc_y] = 0
◆
: 분기종료
◆
: 분기종료
◆
위의 이벤트 설명 :
npc_x라는 변수가 5 일경우(npc의 x좌표 를 적어주는겁니다.)
npc_y라는 변수가 9 일경우(npc의 y좌표 를 적어주는겁니다.)
문장 출력되고..
이대로 끝나버리면 문장이 계속 출력되기 때문에..
npc_좌표 를 0으로 초기화 해준겁니다.
아까 변수 1번을 이미 사용하고 있다면.. 이 이벤트도 약간 다르겠죠?
자, 이걸로 마우스 사용이벤트는 끝났습니다.
게임상에서 5,9좌표를 누르면 대화가 출력됩니다.
--------------------------------------------------------------------------------------------------------------------------
자!!!!!!!!!!!!!!!!!!!!!!!
재일 중요한게 남았습니다.
이거 안하면 위에 한거 다 소용없습니다!!!!
rpgXP 실행파일이 있는 폴더로 갑시다.
그중.. 'RGSS100J.dll' 라는 파일이 보이시죠??
파일을 복사한뒤.. 자신이 만들고 있는 게임폴더 속에 넣습니다!!
그리고나서 게임을 하면.. 아아~주 자알~ 될껍니다.
출처 : 십자군RPG 스키 님 글
댓글 10
-
아란
2006.09.08 04:58
-
그노에즈
2006.09.10 00:12
와... 마우스로 XP를..|+rp2+|2287|+rp3+|acoc_board_ideatip -
다크아머
2006.09.10 19:45
하하;; 작동안된다;;|+rp2+|2289|+rp3+|acoc_board_ideatip -
JIN[晉]
2006.09.17 04:46
하하하;;; (죽겟다)|+rp2+|2302|+rp3+|acoc_board_ideatip -
이르실디스크
2006.11.13 01:27
됐다 안됐다그러네..|+rp2+|2389|+rp3+|acoc_board_ideatip -
야크로댤
2006.12.02 19:00
이거 안됌니다...|+rp2+|2446|+rp3+|acoc_board_ideatip -
garfe
2006.12.13 01:47
깛궕뜺덭볺귢뫶궑귞귢궲궓귟갂볺귢뫶궑귩뼰럨궢궶궋뤾뜃|+rp2+|2509|+rp3+|acoc_board_ideatip -
독도2005
2006.12.31 22:49
글씨 깨지면 작동 안되고 오류떠요...|+rp2+|2575|+rp3+|acoc_board_ideatip -
장동현
2007.01.16 06:40
태클 걸겠습니다 -
이 방식은 2004년도인가 2005년도 인가 그때, 어떤싸이트인지는 모르지만(?) Len 이라는 분이 올리셨던 자료
입니다. 이 마우스 스크립트의 단점은, NPC가 없는 상황에서 화면의 5/9의 좌표를 마우스로 누르면,
NPC가 말을 한다는것이죠.
즉 : 저 스크립트에서 좌표를 설정해주는것은 NPC의 맵 좌표가 아니라,
화면좌표를 설정해주는것이 됩니다.|+rp2+|2669|+rp3+|acoc_board_ideatip -
takehim906
2007.01.27 00:06
걄걄?|+rp2+|2716|+rp3+|acoc_board_ideatip
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
469 | 게이지바 스크립트 [6] | 브레인 | 2006.09.06 | 4371 |
468 | [MiD]비전투RPG -1- [2] | 천공MiD짱 | 2006.05.17 | 3211 |
467 | 연애 시뮬레이션 만들기 2 [11] | Vermond | 2006.07.26 | 3082 |
466 | 신개념 마법시스템? [16] | [S's-S] | 2006.07.25 | 2856 |
» | 게임에서 마우스로 게임하기 [10] | 브레인 | 2006.09.06 | 2472 |
464 | SRPG 만들기 강의 - 0. SRPG는 무엇일까? [6] | contect | 2008.07.23 | 2392 |
463 | RPG 2000/2003에서의 마우스 사용(수정) [14] | Black-☆ | 2007.11.19 | 2132 |
462 | 미니맵을 만들어 보자 - 스크립트 - [11] | 브레인 | 2006.09.06 | 1922 |
461 | [VX] 창문으로 빛이 뚫고 나오게 하기 [뽀샵] [2] | 정의로운녀석! | 2008.06.22 | 1875 |
460 | rpg만들기 DS 사용법(60%) [4] | GMF | 2007.12.28 | 1819 |
459 | 인벤토리 시스템 [내용 또 수정] [17] | 비밀소년 | 2006.07.28 | 1800 |
458 | RPG만들기 실력테스트! [16] | 엔젤레기온 | 2007.12.18 | 1792 |
457 | 악당들의 유형들..? [23] | 크레시스 | 2005.12.27 | 1767 |
456 | RPG_xp업그레이드 팩키지 [3] | 星の카비 | 2007.12.16 | 1764 |
455 | [TIP]대기 0초 [19] | Yggdrasil | 2006.08.11 | 1763 |
454 | 보스는 왜 맨날 쫄자들만 보내는가!? [23] | 다크아머 | 2006.01.23 | 1674 |
453 | 바람의나라 - 쇄혼비무 , 초혼비무 [9] | 액알의초보 | 2006.07.04 | 1672 |
452 | [THDO]판화 세계지도제작 스크립트. [7] | 협객 | 2007.06.25 | 1668 |
451 | 콤보 스크립트 [7] | 귀여븐닌자 | 2006.08.23 | 1624 |
450 | [공개자료] 먼치킨 액알 만들기 [11] | 책벌레공상가 | 2007.03.26 | 1598 |
의 압박...
어쨌든 수고하셨습니다.|+rp2+|2278|+rp3+|acoc_board_ideatip