RPG Maker
2006.09.08 04:58

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

조회 수 3133 추천 수 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 스키 님 글

?

  1. 물체 밀어서 움직이는 이벤트 조금 더 쉽게 하는 법

    Date2018.01.02 CategoryRPG Maker Byzero? Views644
    Read More
  2. [마지막 3명 모집] [취업연계무료교육] VR/AR 게임 콘텐츠 전문가 양성 과정 교육생 모집

    Date2017.07.14 Category언어/기타 By황금상자 Views702
    Read More
  3. rpg vxa 로 겜만들때 데미지 설정 공식[링크]

    Date2017.06.08 CategoryRPG Maker By준E Views740
    Read More
  4. [꿀팁] 간단하게 만들 수 있는 실시간 전투 시스템

    Date2017.03.31 CategoryRPG Maker By준E Views2019
    Read More
  5. JSON parser 변환데이터 저장시 생기는 Object Too Deep 해결하기

    Date2016.12.24 Category언어/기타 Bytitle: 댓글러lklslel Views851
    Read More
  6. 앙뜨프리너십에서 해커톤 부트캠프 모집중이네요

    Date2016.11.08 Category언어/기타 By마나님이 Views908
    Read More
  7. RPG MV에서 플러그인 오류의 원인에 대하여

    Date2016.07.08 CategoryRPG Maker Bytitle: 댓글러lklslel Views2359
    Read More
  8. RPG MV 게임 도중에 윈도우 스킨 파일 자체를 통째로 바꿔버리는 방법 (출처: HIME)

    Date2016.07.08 CategoryRPG Maker By최저 Views1627
    Read More
  9. 게임의 버전을 짜 보자! - 유의적 버전 2.0.0

    Date2016.06.07 Category언어/기타 ByYanggaeng Views1123
    Read More
  10. 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다!

    Date2016.03.12 CategoryRPG Maker By정궈니 Views2938
    Read More
  11. rpgmv 마우스 지원과 터치 지원이 되니.

    Date2015.10.25 CategoryRPG Maker By팡소리 Views1011
    Read More
  12. RPG Maker MV 와 AJAX를 이용한 웹통신 관련 영상.

    Date2015.10.25 CategoryRPG Maker ByHT9MAN Views2246
    Read More
  13. RPG게임 뻔한요소들.

    Date2015.10.05 Category언어/기타 Bytitle: 천무천무 Views1644
    Read More
  14. 자바스크립트와 관련해서 참고할 만한 사이트들

    Date2015.10.04 Category언어/기타 ByMARCO Views921
    Read More
  15. 꿀잼이군요!

    Date2015.05.20 Category언어/기타 By사람님[대회참가] Views873
    Read More
  16. [RPG2000/3 팁] 간편한 이벤트 단축키

    Date2015.04.06 CategoryRPG Maker Bytitle: 자게이하앵 Views1833
    Read More
  17. [RPG2000/3 팁] 간편한 이벤트 단축키

    Date2015.04.05 CategoryRPG Maker Bytitle: 자게이하앵 Views748
    Read More
  18. [강의링크] 대비법칙-색상대비-밀당의 재미 약한 반대색 설계

    Date2015.04.02 Category언어/기타 Bytitle: 천무천무 Views636
    Read More
  19. 오다 주웠습니다.

    Date2015.03.30 Category언어/기타 By사람님[대회참가] Views917
    Read More
  20. 무료 이미지 사이트 Pixabay!

    Date2015.03.28 Category언어/기타 By나작소 Views909
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51


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

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