RPG Maker
2006.09.08 04:58

게임에서 마우스로 게임하기

조회 수 3099 추천 수 7 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

# 걶벑볺궻롨룈갌
# 갋궞궻긚긏깏긵긣귩긄긢귻?궔귞륷딮긜긏긘깈깛궸긓긯긻갃
# 갋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 = "" * 256
  $readini.call('Game','Title','',game_name,255,".\Game.ini")
  game_name.delete!("")
  # 긂귻깛긤긂긪깛긤깑귩롦벦
  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 스키 님 글

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
116 RPG Maker SRPG 만들기는 비밀소년 2006.07.07 1141
115 RPG Maker 전투관련 밸런스. 한글화마스터 2006.07.09 1018
114 RPG Maker [H.N.1] 투명색 ? 투명색이 뭐지 ? file 혼노 2006.07.17 431
113 RPG Maker 특정 프로그램에서 mp3파일을 wav로 넣고 싶을때 Vermond 2006.07.25 717
112 RPG Maker 제가 만들어본 온리 100%이벤트trpg 예제 -수정- *YeNa* 2006.07.26 713
111 RPG Maker RPG 2000 강좌 No.1 쉐로, 2006.07.27 421
110 RPG Maker 포션없다 시스템 비밀소년 2006.07.28 1613
109 RPG Maker 어떻게 하면 스토리를 잘 구성할수 있을까? Game/over 2006.07.28 1362
108 RPG Maker 키보드 마우스를 만들어 보자! 그노에즈 2006.07.29 981
107 RPG Maker 중,고수를 위한 빠른 숲맵배치[+부록:노하우통맵배치] 『덩키동크』 2006.07.30 1408
106 RPG Maker [포트리스] 울궈먹기! [S's-S] 2006.08.07 719
105 RPG Maker 대화창을 화사하게 장식해볼까요? 장식은 정말 쉽죠? 노친네 2006.08.17 1748
104 RPG Maker 다들 연세가 어떻게들 되시나요 MrGeek 2006.08.18 1086
103 RPG Maker srpg의 이동 시스템 창공의곰팅이 2006.08.21 1539
102 RPG Maker 이런거 올려도 되나? Action Rpg 개념 BB.Crow 2006.08.29 1198
» RPG Maker 게임에서 마우스로 게임하기 브레인 2006.09.08 3099
100 RPG Maker 게이지바 스크립트 브레인 2006.09.08 4995
99 RPG Maker 미니맵을 만들어 보자 - 스크립트 - 브레인 2006.09.08 2570
98 RPG Maker 액션 게임을 만들어 보자! 『연금술사』 2006.09.27 1766
97 RPG Maker 게임자체가 히든피스!! [S's-S] 2006.09.28 1397
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 15 Next
/ 15






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)