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
번호 분류 제목 글쓴이 날짜 조회 수
296 RPG Maker 게이지바 스크립트 브레인 2006.09.08 4995
295 RPG Maker SRPG 만들기 강의 - 0. SRPG는 무엇일까? 2 contect 2008.07.27 4352
294 RPG Maker [RPG XP]스크립트를 이용한 SRPG 이동범위 산출 및 범위 보여주기 4 file 신덴 2009.01.09 4170
293 RPG Maker 본문스크랩- rpg 제작툴 NWN 1 세죠 2010.06.26 3746
292 RPG Maker rpg만들기 DS 사용법(60%) GMF 2008.01.01 3402
291 RPG Maker [VX] 창문으로 빛이 뚫고 나오게 하기 [뽀샵] 1 정의로운녀석! 2008.07.20 3386
290 RPG Maker [MiD]비전투RPG -1- 천공MiD짱 2006.05.18 3349
289 RPG Maker 본문 스크랩ㅡ 게임 브리오 엔진 소개 세죠 2010.06.26 3251
288 RPG Maker RPG 2000/2003에서의 마우스 사용(수정) file Black-☆ 2007.11.19 3191
287 RPG Maker 넷플레이 스크립트 2.0 사용법 3 독도2005 2009.05.03 3170
» RPG Maker 게임에서 마우스로 게임하기 브레인 2006.09.08 3099
285 RPG Maker 본문 스크랩ㅡ 언리얼 엔진2 1 세죠 2010.06.14 2955
284 RPG Maker [vx]주인공들 체력 변수로 관리하기 (스크립트) 나나야츠루 2009.03.13 2882
283 RPG Maker [VX] 메뉴화면에 이어하기를 넣는 스크립트... 카리스 2009.01.09 2877
282 RPG Maker RPG만들기 실력테스트! 엔젤레기온 2007.12.18 2860
281 RPG Maker RPG_xp업그레이드 팩키지 1 星の카비 2008.04.26 2803
280 RPG Maker 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다! 2 file 정궈니 2016.03.12 2754
279 RPG Maker 게이지바 만들기 ( HP, MP, EXP 가로형) file CC 2005.08.13 2717
278 RPG Maker 액알을 사용해볼까? 『연금술사』 2005.06.05 2656
277 RPG Maker rpg2K에서 경험치 패턴 3 베넘 2011.06.21 2616
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15






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

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