2005.06.28 16:01

링메뉴에 관해서....

조회 수 176 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
#==============================================================================
# ■ Scene_Item
#------------------------------------------------------------------------------
#  아이템 화면의 처리를 실시하는 클래스입니다.
#==============================================================================

class Scene_Item
  #--------------------------------------------------------------------------
  # ● 메인 처리
  #--------------------------------------------------------------------------
  def main
    # 헬프 윈도우, 아이템 윈도우를 작성
    @help_window = Window_Help.new
    @item_window = Window_Item.new
    # 헬프 윈도우를 관련짓고
    @item_window.help_window = @help_window
    # 타겟 윈도우를 작성 (불가시·비액티브하게 설정)
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    # 트란지션 실행
    Graphics.transition
    # 메인 루프
    loop do
      # 게임 화면을 갱신
      Graphics.update
      # 입력 정보를 갱신
      Input.update
      # 프레임 갱신
      update
      # 화면이 바뀌면(자) 루프를 중단
      if $scene != self
        break
      end
    end
    # 트란지션 준비
    Graphics.freeze
    # 윈도우를 해방
    @help_window.dispose
    @item_window.dispose
    @target_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신
  #--------------------------------------------------------------------------
  def update
    # 윈도우를 갱신
    @help_window.update
    @item_window.update
    @target_window.update
    # 아이템 윈도우가 액티브의 경우: update_item 를 부른다
    if @item_window.active
      update_item
      return
    end
    # 타겟 윈도우가 액티브의 경우: update_target 를 부른다
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (아이템 윈도우가 액티브의 경우)
  #--------------------------------------------------------------------------
  def update_item
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 메뉴 화면으로 전환하고
      $scene = Scene_Menu.new(2)
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 아이템 윈도우로 현재 선택되고 있는 데이터를 취득
      @item = @item_window.item
      # 사용 아이템이 아닌 경우
      unless @item.is_a? (RPG::Item)
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 사용할 수 없는 경우
      unless $game_party.item_can_use? (@item.id)
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 결정 SE 를 연주
      $game_system.se_play($data_system.decision_se)
      # 효과 범위가 아군의 경우
      if @item.scope >= 3
        # 타겟 윈도우를 액티브화
        @item_window.active = false
        @target_window.x = (@item_window.index + 1) % 2 * 304
        @target_window.visible = true
        @target_window.active = true
        # 효과 범위 (단체/전체)에 응해 커서 위치를 설정
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      # 효과 범위가 아군 이외의 경우
      else
        # 코먼 이벤트 ID 가 유효의 경우
        if @item.common_event_id > 0
          # 코먼 이벤트 호출 예약
          $game_temp.common_event_id = @item.common_event_id
          # 아이템의 사용시 SE 를 연주
          $game_system.se_play(@item.menu_se)
          # 소모품의 경우
          if @item.consumable
            # 사용한 아이템을 1 줄인다
            $game_party.lose_item(@item.id, 1)
            # 아이템 윈도우의 항목을 재묘화
            @item_window.draw_item(@item_window.index)
          end
          # 맵 화면으로 전환하고
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (타겟 윈도우가 액티브의 경우)
  #--------------------------------------------------------------------------
  def update_target
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 아이템 조각등으로 사용할 수 없게 되었을 경우
      unless $game_party.item_can_use? (@item.id)
        # 아이템 윈도우의 내용을 재작성
        @item_window.refresh
      end
      # 타겟 윈도우를 소거
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 아이템을 다 사용했을 경우
      if $game_party.item_number(@item.id) == 0
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 타겟이 전체의 경우
      if @target_window.index == -1
        # 파티 전체에 아이템의 사용 효과를 적용
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      # 타겟이 단체의 경우
      if @target_window.index >= 0
        # 타겟의 엑터에게 아이템의 사용 효과를 적용
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      # 아이템을 사용했을 경우
      if used
        # 아이템의 사용시 SE 를 연주
        $game_system.se_play(@item.menu_se)
        # 소모품의 경우
        if @item.consumable
          # 사용한 아이템을 1 줄인다
          $game_party.lose_item(@item.id, 1)
          # 아이템 윈도우의 항목을 재묘화
          @item_window.draw_item(@item_window.index)
        end
        # 타겟 윈도우의 내용을 재작성
        @target_window.refresh
        # 코먼 이벤트 ID 가 유효의 경우
        if @item.common_event_id > 0
          # 코먼 이벤트 호출 예약
          $game_temp.common_event_id = @item.common_event_id
          # 맵 화면으로 전환하고
          $scene = Scene_Map.new
          return
        end
      end
      # 아이템을 사용하지 않았던 경우
      unless used
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end


#==============================================================================
# ■ Scene_Equip
#------------------------------------------------------------------------------
#  장비 화면의 처리를 실시하는 클래스입니다.
#==============================================================================

class Scene_Equip
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #     actor_index : 엑터 인덱스
  #     equip_index : 장비 인덱스
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
    @equip_index = equip_index
  end
  #--------------------------------------------------------------------------
  # ● 메인 처리
  #--------------------------------------------------------------------------
  def main
    # 엑터를 취득
    @actor = $game_party.actors[@actor_index]
    # 윈도우를 작성
    @help_window = Window_Help.new
    @left_window = Window_EquipLeft.new(@actor)
    @right_window = Window_EquipRight.new(@actor)
    @item_window1 = Window_EquipItem.new(@actor, 0)
    @item_window2 = Window_EquipItem.new(@actor, 1)
    @item_window3 = Window_EquipItem.new(@actor, 2)
    @item_window4 = Window_EquipItem.new(@actor, 3)
    @item_window5 = Window_EquipItem.new(@actor, 4)
    # 헬프 윈도우를 관련짓고
    @right_window.help_window = @help_window
    @item_window1.help_window = @help_window
    @item_window2.help_window = @help_window
    @item_window3.help_window = @help_window
    @item_window4.help_window = @help_window
    @item_window5.help_window = @help_window
    # 커서 위치를 설정
    @right_window.index = @equip_index
    refresh
    # 트란지션 실행
    Graphics.transition
    # 메인 루프
    loop do
      # 게임 화면을 갱신
      Graphics.update
      # 입력 정보를 갱신
      Input.update
      # 프레임 갱신
      update
      # 화면이 바뀌면(자) 루프를 중단
      if $scene != self
        break
      end
    end
    # 트란지션 준비
    Graphics.freeze
    # 윈도우를 해방
    @help_window.dispose
    @left_window.dispose
    @right_window.dispose
    @item_window1.dispose
    @item_window2.dispose
    @item_window3.dispose
    @item_window4.dispose
    @item_window5.dispose
  end
  #--------------------------------------------------------------------------
  # ● 리프레쉬
  #--------------------------------------------------------------------------
  def refresh
    # 아이템 윈도우의 가시 상태 설정
    @item_window1.visible = (@right_window.index == 0)
    @item_window2.visible = (@right_window.index == 1)
    @item_window3.visible = (@right_window.index == 2)
    @item_window4.visible = (@right_window.index == 3)
    @item_window5.visible = (@right_window.index == 4)
    # 현재 장비중의 아이템을 취득
    item1 = @right_window.item
    # 현재의 아이템 윈도우를 @item_window 로 설정
    case @right_window.index
    when 0
      @item_window = @item_window1
    when 1
      @item_window = @item_window2
    when 2
      @item_window = @item_window3
    when 3
      @item_window = @item_window4
    when 4
      @item_window = @item_window5
    end
    # 라이트 윈도우가 액티브의 경우
    if @right_window.active
      # 장비 변경 후의 파라미터를 소거
      @left_window.set_new_parameters(nil, nil, nil)
    end
    # 아이템 윈도우가 액티브의 경우
    if @item_window.active
      # 현재 선택중의 아이템을 취득
      item2 = @item_window.item
      # 장비를 변경
      @actor.equip(@right_window.index, item2 == nil ?  0 : item2.id)
      # 장비 변경 후의 파라미터를 취득
      new_atk = @actor.atk
      new_pdef = @actor.pdef
      new_mdef = @actor.mdef
      # 장비를 되돌린다
      @actor.equip(@right_window.index, item1 == nil ?  0 : item1.id)
      # 레프트 윈도우에 묘화
      @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신
  #--------------------------------------------------------------------------
  def update
    # 윈도우를 갱신
    @left_window.update
    @right_window.update
    @item_window.update
    refresh
    # 라이트 윈도우가 액티브의 경우: update_right 를 부른다
    if @right_window.active
      update_right
      return
    end
    # 아이템 윈도우가 액티브의 경우: update_item 를 부른다
    if @item_window.active
      update_item
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (라이트 윈도우가 액티브의 경우)
  #--------------------------------------------------------------------------
  def update_right
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 메뉴 화면으로 전환하고
      $scene = Scene_Menu.new(0)
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 장비 고정의 경우
      if @actor.equip_fix? (@right_window.index)
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 결정 SE 를 연주
      $game_system.se_play($data_system.decision_se)
      # 아이템 윈도우를 액티브화
      @right_window.active = false
      @item_window.active = true
      @item_window.index = 0
      return
    end
    # R 버튼이 밀렸을 경우
    if Input.trigger? (Input::R)
      # 커서 SE 를 연주
      $game_system.se_play($data_system.cursor_se)
      # 다음의 엑터에게
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 다른 장비 화면으로 전환하고
      $scene = Scene_Equip.new(@actor_index, @right_window.index)
      return
    end
    # L 버튼이 밀렸을 경우
    if Input.trigger? (Input::L)
      # 커서 SE 를 연주
      $game_system.se_play($data_system.cursor_se)
      # 전의 엑터에게
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 다른 장비 화면으로 전환하고
      $scene = Scene_Equip.new(@actor_index, @right_window.index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (아이템 윈도우가 액티브의 경우)
  #--------------------------------------------------------------------------
  def update_item
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 라이트 윈도우를 액티브화
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 장비 SE 를 연주
      $game_system.se_play($data_system.equip_se)
      # 아이템 윈도우로 현재 선택되고 있는 데이터를 취득
      item = @item_window.item
      # 장비를 변경
      @actor.equip(@right_window.index, item == nil ?  0 : item.id)
      # 라이트 윈도우를 액티브화
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      # 라이트 윈도우, 아이템 윈도우의 내용을 재작성
      @right_window.refresh
      @item_window.refresh
      return
    end
  end
end



># ▼▲▼ XRXS_MP 6. 링 메뉴 도입 ver.1.2 ▼▲▼
># by 가즈키
>
>#==============================================================================
># □ 커스터마이즈 포인트
>#==============================================================================
>class Window_RingMenu < Window_Base
>  STARTUP_FRAMES =  20 # 초기 애니메이션의 프레임수
>  MOVING_FRAMES  =   5 # 링을 돌렸을 때의 프레임수
>  RING_R         =  64 # 링의 반경
>  SE_STARTUP  = "056-Right02" # 메뉴를 열었을 때에 울리는SE
>  ICON_ITEM   = RPG::Cache.icon("034-Item03")   # 「 아이템 」메뉴의 아이콘
>  ICON_SKILL  = RPG::Cache.icon("044-Skill01")  # 「스킬 」메뉴의 아이콘
>  ICON_EQUIP  = RPG::Cache.icon("001-Weapon01") # 「  장비  」메뉴의 아이콘
>  ICON_STATUS = RPG::Cache.icon("050-Skill07")  # 「스테이터스」메뉴의 아이콘
>  ICON_SAVE   = RPG::Cache.icon("038-Item07")   # 「세이브 」메뉴의 아이콘
>  ICON_EXIT   = RPG::Cache.icon("046-Skill03")  # 「  종료  」메뉴의 아이콘
>  ICON_DISABLE= RPG::Cache.icon("")             # 사용 금지 항목을 뒤따르는 아이콘
>  BACKGROUND_COLOR = Color.new(0xcc,0x99,0x33,0x3f)
>end
>###############################################################################
># 링 메뉴 도입 스크립트 Ver. 1.2
>#                 writen by 가즈키
># - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
># ▽도입
>#   0. 먼저 XRXL 2. 비트 맵/아이콘 묘사 를 넣어 두어 주세요.
>#   1. 이 스크립트를Main섹션 위에 만든 새로운 섹션에 카피하는
>#   2. Window_RingMenu의 상부에 있는 7개의 것 RPG::Cache.icon("") 의 "" 의 안에
>#       오른쪽의 설명에 써 있는 커멘드용의 아이콘명을 쓴다.
>#       (맨 밑의 사용 금지는 선택할 수 없는 메뉴에 거듭하는 아이콘입니다.
>#        이런 건이 좋을지도→ φ )
>#   3. 아이콘 설정의 바로 아래에 있는 SE_STARTUP = "" 것 "" 의 안에 메뉴를
>#       열었을 때에 울리고 싶은 것SE의 이름을 쓴다.
># ▽스크립트 접하는 사람에게
>#   우선 움직이는 것을 목표로 만든 것이므로(뜻 낮은 w ), 좌표의 조정등이 불완전합니다.
>#   보다 정확하게 엑터의 화면 좌표를 취득하는 처리를 추가하거나 엑터 일람의 위치를
>#   바꾸거나 문자 표시등 등을 조정하면 좋은 느낌으로 완성될 생각이 듭니다.
>###############################################################################
>
>#==============================================================================
># ■ Window_RingMenu
>#==============================================================================
>class Window_RingMenu < Window_Base
>  #--------------------------------------------------------------------------
>  # ○ 클래스 정수
>  #--------------------------------------------------------------------------
>  MODE_START = 1 # 스타트 업 애니메이션
>  MODE_WAIT  = 2 # 대기
>  MODE_MOVER = 3 # 시계회전 회전 애니메이션
>  MODE_MOVEL = 4 # 반 시계회전 회전 애니메이션
>  #--------------------------------------------------------------------------
>  # ○ 악 세사
>  #--------------------------------------------------------------------------
>  attr_accessor :index
>  attr_reader :commands
>  #--------------------------------------------------------------------------
>  # ● 오브젝트 초기화
>  #--------------------------------------------------------------------------
>  def initialize( center_x, center_y )
>    super(-16, -16, 640+32, 480+32)
>    self.contents = Bitmap.new(width-32, height-32)
>    self.opacity = 0
>    self.back_opacity = 0
>    s1 = $data_system.words.equip
>    s2 = $data_system.words.skill
>    s3 = $data_system.words.item
>    s4 = "스테이터스"
>    s5 = "세이브"
>    s6 = "게임 종료"
>    @commands = [ s1, s2, s3, s4, s5, s6 ]
>    @item_max = 6
>    @index = 0
>    @items = [ICON_EQUIP, ICON_SKILL, ICON_ITEM, ICON_STATUS, ICON_SAVE, ICON_EXIT ]
>    @disabled = [ false, false, false, false, false, false ]
>    @cx = center_x
>    @cy = center_y
>    setup_move_start
>    refresh
>
>  end
>  #--------------------------------------------------------------------------
>  # ● 프레임 갱신
>  #--------------------------------------------------------------------------
>  def update
>    super
>    refresh
>  end
>  #--------------------------------------------------------------------------
>  # ● 화면재 묘화
>  #--------------------------------------------------------------------------
>  def refresh
>    self.contents.clear
>    # 배경 묘화
>    if BACKGROUND_COLOR.alpha > 0
>      self.contents.fill_rect(0,0,640,480,BACKGROUND_COLOR)
>    end
>    # 아이콘을 묘화
>    case @mode
>    when MODE_START
>      refresh_start
>    when MODE_WAIT
>      refresh_wait
>    when MODE_MOVER
>      refresh_move(1)
>    when MODE_MOVEL
>      refresh_move(0)
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ○ 화면재 묘화(초기화시)
>  #--------------------------------------------------------------------------
>  def refresh_start
>    d1 = 2.0 * Math::PI / @item_max
>    d2 = 1.0 * Math::PI / STARTUP_FRAMES
>    r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
>    for i in 0...@item_max
>      j = i - @index
>      d = d1 * j + d2 * @steps
>      x = @cx + ( r * Math.sin( d ) ).to_i
>      y = @cy - ( r * Math.cos( d ) ).to_i
>      draw_item(x, y, i)
>    end
>    @steps -= 1
>    if @steps < 1
>      @mode = MODE_WAIT
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ○ 화면재 묘화(대기시)
>  #--------------------------------------------------------------------------
>  def refresh_wait
>    d = 2.0 * Math::PI / @item_max
>    for i in 0...@item_max
>      j = i - @index
>      x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
>      y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
>      draw_item(x, y, i)
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ○ 화면재 묘화(회전시)
>  #  mode : 0=반 시계회전 1=시계회전
>  #--------------------------------------------------------------------------
>  def refresh_move( mode )
>    d1 = 2.0 * Math::PI / @item_max
>    d2 = d1 / MOVING_FRAMES
>    d2 *= -1 if mode != 0
>    for i in 0...@item_max
>      j = i - @index
>      d = d1 * j + d2 * @steps
>      x = @cx + ( RING_R * Math.sin( d ) ).to_i
>      y = @cy - ( RING_R * Math.cos( d ) ).to_i
>      draw_item(x, y, i)
>    end
>    @steps -= 1
>    if @steps < 1
>      @mode = MODE_WAIT
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ● 항목의 묘화
>  #     x :
>  #     y :
>  #     i : 항목 번호
>  #--------------------------------------------------------------------------
>  def draw_item(x, y, i)
>    rect = Rect.new(0, 0, @items[i].width, @items[i].height)
>    x -= rect.width/2
>    y -= rect.height/2
>    if @index == i
>      self.contents.blt( x, y, @items[i], rect )
>      if @disabled[@index]
>        self.contents.blt( x, y, ICON_DISABLE, rect )
>      end
>    else
>      self.contents.blt( x, y, @items[i], rect, 128 )
>      if @disabled[@index]
>        self.contents.blt( x, y, ICON_DISABLE, rect, 128 )
>      end
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ● 항목을 무효로 하는
>  #     index : 항목 번호
>  #--------------------------------------------------------------------------
>  def disable_item(index)
>    @disabled[index] = true
>  end
>  #--------------------------------------------------------------------------
>  # ○ 초기화 애니메이션의 준비
>  #--------------------------------------------------------------------------
>  def setup_move_start
>    @mode = MODE_START
>    @steps = STARTUP_FRAMES
>    if  SE_STARTUP != nil and SE_STARTUP != ""
>      Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ○ 회전 애니메이션의 준비
>  #--------------------------------------------------------------------------
>  def setup_move_move(mode)
>    if mode == MODE_MOVER
>      @index -= 1
>      @index = @items.size - 1 if @index < 0
>    elsif mode == MODE_MOVEL
>      @index += 1
>      @index = 0 if @index >= @items.size
>    else
>      return
>    end
>    @mode = mode
>    @steps = MOVING_FRAMES
>  end
>  #--------------------------------------------------------------------------
>  # ○ 애니메이션중인지 어떤지
>  #--------------------------------------------------------------------------
>  def animation?
>    return @mode != MODE_WAIT
>  end
>end
>#==============================================================================
># ■ Window_MenuStatus
>#------------------------------------------------------------------------------
>#  메뉴 화면에서 파티 멤버의 스테이터스를 표시하는 윈도우입니다.
>#==============================================================================
>
>class Window_RingMenuStatus < Window_Selectable
>  attr_reader :max_index
>  #--------------------------------------------------------------------------
>  # ● 오브젝트 초기화
>  #--------------------------------------------------------------------------
>  def initialize
>    @max_index = $game_party.actors.size - 1
>    h = 32 * (@max_index + 1) + 32
>    h = 416 if h > 416
>    x = 0
>    x = 456 if $game_player.screen_x < 200 + Window_RingMenu::RING_R
>    super(x, 64, 184, h)
>    self.contents = Bitmap.new(width - 32, $game_party.actors.size * 32)
>    refresh
>    self.active = false
>    self.index = -1
>  end
>  #--------------------------------------------------------------------------
>  # ● 리프레쉬
>  #--------------------------------------------------------------------------
>  def refresh
>    self.contents.clear
>    @item_max = $game_party.actors.size
>    for i in 0...$game_party.actors.size
>      x = 32
>      y = 32 * i
>      actor = $game_party.actors[i]
>      self.contents.draw_facesquare(actor.character_name, actor.character_hue,
>                                    4, y + 4 )
>      draw_actor_name(actor, x, y)
>    end
>  end
>end
>#==============================================================================
># ■ Scene_Menu
>#------------------------------------------------------------------------------
>#  메뉴 화면의 처리를 실시하는 클래스입니다.
>#==============================================================================
>
>class Scene_Menu
>  #--------------------------------------------------------------------------
>  # ● 오브젝트 초기화
>  #     menu_index : 커멘드의 커서 초기 위치
>  #--------------------------------------------------------------------------
>  def initialize(menu_index = 0)
>    @menu_index = menu_index
>  end
>  #--------------------------------------------------------------------------
>  # ● 메인 처리
>  #--------------------------------------------------------------------------
>  def main
>    # 스프라이트 세트를 작성
>    @spriteset = Spriteset_Map.new
>    # 커멘드 윈도우를 작성
>    bmp = RPG::Cache.character($game_party.actors[0].character_name, 0)
>    px = $game_player.screen_x
>    py = $game_player.screen_y - bmp.rect.height / 4 / 2
>    @command_window = Window_RingMenu.new(px,py)
>    @command_window.index = @menu_index
>    # 파티 인원수가 0 사람의 경우
>    if $game_party.actors.size == 0
>      # 아이템 , 스킬 , 장비 , 스테이터스를 무효화
>      @command_window.disable_item(0)
>      @command_window.disable_item(1)
>      @command_window.disable_item(2)
>      @command_window.disable_item(3)
>    end
>    @command_window.z = 100
>    # 세이브 금지의 경우
>    if $game_system.save_disabled
>      # 세이브를 무효로 하는
>      @command_window.disable_item(4)
>    end
>    # 스테이터스 윈도우를 작성
>    @status_window = Window_RingMenuStatus.new
>    @status_window.z = 200
>    @status_window.visible = false
>    # 헬프 윈도우를 작성
>    @help_window = Window_Help.new
>    @help_window.set_text(@command_window.commands[@command_window.index],1)
>    # 트란지션 실행
>    Graphics.transition
>    # 메인 루프
>    loop do
>      # 게임 화면을 갱신
>      Graphics.update
>      # 입력 정보를 갱신
>      Input.update
>      # 프레임 갱신
>      update
>      # 화면이 바뀌면(자) 루프를 중단
>      if $scene != self
>        break
>      end
>    end
>    # 트란지션 준비
>    Graphics.freeze
>    # 스프라이트 세트를 해방
>    @spriteset.dispose
>    # 윈도우를 해방
>    @command_window.dispose
>    @status_window.dispose
>    @help_window.dispose
>  end
>  #--------------------------------------------------------------------------
>  # ● 프레임 갱신
>  #--------------------------------------------------------------------------
>  def update
>    # 윈도우를 갱신
>    @command_window.update
>    @status_window.update
>    @help_window.update
>    # 커멘드 윈도우가 액티브의 경우: update_command 를 부르는
>    if @command_window.active
>      update_command
>      return
>    end
>    # 스테이터스 윈도우가 액티브의 경우: update_status 를 부르는
>    if @status_window.active
>      update_status
>      return
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ● 프레임 갱신 (커멘드 윈도우가 액티브의 경우)
>  #--------------------------------------------------------------------------
>  def update_command
>    # B 버튼이 밀렸을 경우
>    if Input.trigger?(Input::B)
>      # 캔슬 SE 을 연주
>      $game_system.se_play($data_system.cancel_se)
>      # 맵 화면으로 전환하고
>      $scene = Scene_Map.new
>      return
>    end
>    # C 버튼이 밀렸을 경우
>    if Input.trigger?(Input::C)
>      # 파티 인원수가 0 사람으로 , 세이브 , 게임 종료 이외의 커멘드의 경우
>      if $game_party.actors.size == 0 and @command_window.index < 4
>        # 버저 SE 를 연주
>        $game_system.se_play($data_system.buzzer_se)
>        return
>      end
>      # 커멘드 윈도우의 커서 위치에서 분기
>      case @command_window.index
>      when 2  # 아이템
>        # 결정  SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 아이템 화면으로 전환하고
>        $scene = Scene_Item.new
>      when 1  # 스킬
>        # 결정 SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 스테이터스 윈도우를 액티브하게 하는
>        @command_window.active = false
>        @status_window.active = true
>        @status_window.visible = true
>        @status_window.index = 0
>      when 0  # 장비
>        # 결정 SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 스테이터스 윈도우를 액티브하게 하는
>        @command_window.active = false
>        @status_window.active = true
>        @status_window.visible = true
>        @status_window.index = 0
>      when 3  # 스테이터스
>        # 결정 SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 스테이터스 윈도우를 액티브하게 하는
>        @command_window.active = false
>        @status_window.active = true
>        @status_window.visible = true
>        @status_window.index = 0
>      when 4  # 세이브
>        # 세이브 금지의 경우
>        if $game_system.save_disabled
>          # 버저 SE 를 연주
>          $game_system.se_play($data_system.buzzer_se)
>          return
>        end
>        # 결정 SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 세이브 화면으로 전환하고
>        $scene = Scene_Save.new
>      when 5  # 게임 종료
>        # 결정 SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 게임 종료 화면으로 전환하고
>        $scene = Scene_End.new
>      end
>      return
>    end
>    # 애니메이션중이라면 커서의 처리를 실시하지 않는
>    return if @command_window.animation?
>    # ↑or← 버튼이 밀렸을 경우
>    if Input.press?(Input::DOWN) or  Input.press?(Input::RIGHT)
>      $game_system.se_play($data_system.cursor_se)
>      @command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
>      @help_window.set_text(@command_window.commands[@command_window.index],1)
>      return
>    end
>    # ↓or→ 버튼이 밀렸을 경우
>    if Input.press?(Input::UP) or  Input.press?(Input::LEFT)
>      $game_system.se_play($data_system.cursor_se)
>      @command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
>      @help_window.set_text(@command_window.commands[@command_window.index],1)
>      return
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ● 프레임 갱신 (스테이터스 윈도우가 액티브의 경우)
>  #--------------------------------------------------------------------------
>  def update_status
>    # B 버튼이 밀렸을 경우
>    if Input.trigger?(Input::B)
>      # 캔슬 SE 을 연주
>      $game_system.se_play($data_system.cancel_se)
>      # 커멘드 윈도우를 액티브하게 하는
>      @command_window.active = true
>      @status_window.active = false
>      @status_window.visible = false
>      @status_window.index = -1
>      return
>    end
>    # C 버튼이 밀렸을 경우
>    if Input.trigger?(Input::C)
>      # 커멘드 윈도우의 커서 위치에서 분기
>      case @command_window.index
>      when 1  # 스킬
>        # 이 엑터의 행동 제한이 2 이상의 경우
>        if $game_party.actors[@status_window.index].restriction >= 2
>          # 버저 SE 를 연주
>          $game_system.se_play($data_system.buzzer_se)
>          return
>        end
>        # 결정 SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 스킬 화면으로 전환하고
>        $scene = Scene_Skill.new(@status_window.index)
>      when 0  # 장비
>        # 결정 SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 장비 화면으로 전환하고
>        $scene = Scene_Equip.new(@status_window.index)
>      when 3  # 스테이터스
>        # 결정 SE 을 연주
>        $game_system.se_play($data_system.decision_se)
>        # 스테이터스 화면으로 전환하고
>        $scene = Scene_Status.new(@status_window.index)
>      end
>      return
>    end
>  end
>end
>#==============================================================================
># ◇ 외부 라이브러리
>#==============================================================================
>class Bitmap
># ▼▲▼ XRXL 1. 라인·도형 묘사 ▼▲▼
>  #--------------------------------------------------------------------------
>  # ● 라인 묘화 by 앵아 재흙
>  #--------------------------------------------------------------------------
>  def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
>    # 묘사 거리의 계산. 큰에 직각시의 길이.
>    distance = (start_x - end_x).abs + (start_y - end_y).abs
>    # 묘사 개시
>    if end_color == start_color
>      for i in 1..distance
>        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
>        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
>        if width == 1
>          self.set_pixel(x, y, start_color)
>        else
>          self.fill_rect(x, y, width, width, start_color)
>        end
>      end
>    else
>      for i in 1..distance
>        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
>        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
>        r = start_color.red   * (distance-i)/distance + end_color.red   * i/distance
>        g = start_color.green * (distance-i)/distance + end_color.green * i/distance
>        b = start_color.blue  * (distance-i)/distance + end_color.blue  * i/distance
>        a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
>        if width == 1
>          self.set_pixel(x, y, Color.new(r, g, b, a))
>        else
>          self.fill_rect(x, y, width, width, Color.new(r, g, b, a))
>        end
>      end
>    end
>  end
>  #--------------------------------------------------------------------------
>  # ● 다각형의 묘화(전부 칠해 없음) by 가즈키
>  #    peaks    : 정점 좌표의 배열 [[x1,y1],[x2,y2],[x3,y3], ... ]
>  #    color    : 선의 색
>  #    width    : 선의 폭
>  #--------------------------------------------------------------------------
>  def draw_polygon(peaks, color, width = 1)
>    # 변(=정점)의 개수분 만큼 옆을 그리는
>    for i in 0 ... (peaks.size - 1)
>      # 정점끼리를 선으로 묶는
>      draw_line( peaks[i][0], peaks[i][1], peaks[i+1][0], peaks[i+1][1], color, width )
>    end
>    # 마지막 정점과 최초의 정점을 묶는
>    draw_line( peaks[peaks.size - 1][0], peaks[peaks.size - 1][1], peaks[0][0], peaks[0][1], color, width )
>  end
># ▼▲▼ XRXL 2. 비트 맵/아이콘 묘사 ▼▲▼
>  #--------------------------------------------------------------------------
>  # ● 안&범위의 묘화 by 앵아 재흙
>  #     character_name : 묘사에 이용하는 캐릭터 그래픽
>  #     character_hue  : 묘사의 색조
>  #     x       : 묘화처 X 좌표
>  #     y       : 묘화처 Y 좌표
>  #--------------------------------------------------------------------------
>  def draw_facesquare(character_name, character_hue, x, y, size = 24)
>    bitmap = RPG::Cache.character(character_name, character_hue)
>    src_rect = Rect.new((bitmap.width/4 - size)/2, 0, size, size)
>    self.blt(x, y, bitmap, src_rect)
>    self.draw_polygon([[x,y],[x+size,y],[x+size,y+size],[x,y+size]], Color.new(255,255,255,128))
>  end
>end
>
>
>
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
8827 힐다의 학자금퀘스트 스크립트 관련 질문 5 심심치 2014.10.11 1833
8826 흠...오프닝에 관한 질문인데요. 다크아머 2005.05.28 472
8825 흠...오프닝에 관한 질문인데요. Survivor-c 2005.05.28 620
8824 흠.. 케릭터가 안움직여져요.... 일당백 2005.08.20 465
8823 흠.. 케릭터가 안움직여져요.... 카리스 2005.08.20 372
8822 흠.. 케릭터가 안움직여져요.... ☆무적기사★ 2005.08.21 526
8821 흠.. 맵배치에 관해서.. 1 『덩키동크』 2006.02.20 441
8820 흠.. 맵배치에 관해서.. 아두 2006.02.20 421
8819 흠.. 궁금한거 하나 있는데요.. 1 다크진™ 2005.08.06 494
8818 흠.. rpg2003에 대해서 인데요 꼭좀 알려주시면... 재티s 2005.11.06 976
8817 흠.. 2k만하다가 xp하려는데.. 1 잘생긴넘 2007.02.14 680
8816 흠,, 뭐가 문제인지좀,, 좌표의 이동에대해,, XLostTimesX 2006.01.10 433
8815 흠 그;;; 조건분기그런거 할때 쓰는 명령어좀~~ ☆무적기사★ 2005.08.05 497
8814 아마란스 2005.06.19 318
8813 ★RPG_Maker★ 2005.09.02 522
8812 흑흑 콩나물 2015.05.16 361
8811 흑인rpg왜없어짐? 2 자라토끼 2014.05.18 586
8810 흑백으로 만들기(RPG2003)(빠른답변부탁) 『덩키동크』 2006.05.25 1040
8809 흑백으로 만들기(RPG2003)(빠른답변부탁) 1 cyverjen 2006.05.25 1093
8808 흑룡님 사라진터전 최신판 없나요? 2 에에... 닉넴바뀨라네요.. 2014.06.22 414
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 442 Next
/ 442


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

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