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 형제들이여 !!! 나를 구제해다오!! Ress 2006.01.26 223
8826 형제들이여 !!! 나를 구제해다오!! KaSsia 2006.01.25 263
8825 rpg2003에서 music음향이 작업시에는 실행되는데 게임을 실행하면 않되네요 ★샤일☆ 2007.01.03 784
8824 RPG2003의 그림들의 사이즈... MiNi'M' 2006.02.21 821
8823 RPG만들기2003에 관하여...정말 굼금해요~!~부탁드림 ∑☆メ이누∴。』 2005.08.09 577
8822 게이지바 구동 방법좀 <<게이지 유>> file 랑이a 2006.07.03 429
8821 길드는 어떻게 만드나요? 루넨스 2009.06.15 974
8820 길드는 어떻게 만드나요? 제로스 2009.06.15 1232
8819 동영상 관련및.. 급해요 ㅠ RML 2006.07.12 1483
8818 마법 연계 다시 질문!!! 제발 대답부탁!!; file 나르카이제 2005.06.15 331
8817 몬스터가없으면 다른곳으로 자동이동가능? Novelist 2006.08.29 277
8816 몬스터가없으면 다른곳으로 자동이동가능? CredMotion 2006.08.29 341
8815 스크립트로요,, 이동하는걸 보드게임처럼 할순 없나요? XLostTimesX 2006.01.09 429
8814 아이템창 같은 단축창를 만들려고하는데..[rpg2003] ScolPion 2006.04.15 572
8813 아이템창 같은 단축창를 만들려고하는데..[rpg2003] 방콕족의생활 2006.04.15 786
8812 질문! file 『Q트_아키』 2005.05.22 494
8811 "스크립트 데이터 읽기 실패" 라고 뜨는데.. 김세츠나 2009.07.31 1062
8810 "클래스가 등록되지 않았습니다"라니 -0-;;[RPG2003] Chrishyua .E 2007.03.02 700
8809 "클래스가 등록되지 않았습니다"라니 -0-;;[RPG2003] =ROD= 2007.03.07 886
8808 "파일 dmd 은 열지 않습니다" 이리저디 옮겼는데.. 윈드 2006.08.18 208
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(김원배) | 사신지(김병국)