2005.06.27 19:18

원형메뉴 스크립트;

조회 수 197 추천 수 1 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

>최신형으로 부탁좀;;
#==============================================================================
# ■ Window_RingMenu
#==============================================================================
class Window_RingMenu < Window_Base
  #--------------------------------------------------------------------------
  # ○ クラス定?
  #--------------------------------------------------------------------------
  STARTUP_FRAMES = 20 # 初期アニメ?ションのフレ?ム?
  MOVING_FRAMES = 5   # リングを回した時のフレ?ム?
  RING_R = 64         # リングの半?
  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("") # 使用禁止項目に付くアイコン
  SE_STARTUP = "056-Right02" # メニュ?を開いたときに鳴らすSE
  MODE_START = 1 # スタ?トアップアニメ?ション
  MODE_WAIT  = 2 # 待機
  MODE_MOVER = 3 # 時計回り回?アニメ?ション
  MODE_MOVEL = 4 # 反時計回り回?アニメ?ション
  #--------------------------------------------------------------------------
  # ○ アクセサ
  #--------------------------------------------------------------------------
  attr_accessor :index
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize( center_x, center_y )
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width-32, height-32)
    self.opacity = 0
    self.back_opacity = 0
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "ステ?タス"
    s5 = "セ?ブ"
    s6 = "ゲ?ム終了"
    @commands = [ s1, s2, s3, s4, s5, s6 ]
    @item_max = 6
    @index = 0
    @items = [ ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_SAVE, ICON_EXIT ]
    @disabled = [ false, false, false, false, false, false ]
    @cx = center_x - 16
    @cy = center_y - 16
    setup_move_start
    refresh
  end
  #--------------------------------------------------------------------------
  # ● フレ?ム更新
  #--------------------------------------------------------------------------
  def update
    super
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ?面再描?
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    # アイコンを描?
    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
    # アクティブなコマンド名表示
    rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)
    self.contents.draw_text(rect, @commands[@index],1)
  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 <a href=mailto:0...@item_max>0...@item_max</a>
      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 <a href=mailto:0...@item_max>0...@item_max</a>
      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 <a href=mailto:0...@item_max>0...@item_max</a>
      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)
    #p "x=" + x.to_s + " y=" + y.to_s + " i=" + @items[i].to_s
    rect = Rect.new(0, 0, @items[i].width, @items[i].height)
    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
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(204, 64, 232, 352)
    self.contents = Bitmap.new(width - 32, height - 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 = 80
      y = 80 * i
      actor = $game_party.actors[i]
      draw_actor_graphic(actor, x - 40, y + 80)
      draw_actor_name(actor, x, y + 24)
    end
  end
  #--------------------------------------------------------------------------
  # ● カ?ソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    else
      self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
    end
  end
end
#==============================================================================
# #■ Scene_RingMenu
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  メニュ??面の?理を行うクラスです。
#==============================================================================

#class Scene_RingMenu
class Scene_Menu
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     menu_index : コマンドのカ?ソル初期位置
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # ● メイン?理
  #--------------------------------------------------------------------------
  def main
    # スプライトセットを作成
    @spriteset = Spriteset_Map.new
    # コマンドウィンドウを作成
    px = $game_player.screen_x - 15
    py = $game_player.screen_y - 24
    @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.x = 160
    @status_window.y = 0
    @status_window.z = 200
    @status_window.visible = false
    # トランジション?行
    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
  end
  #--------------------------------------------------------------------------
  # ● フレ?ム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @command_window.update
    @status_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 0  # アイテム
        # 決定  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 2  # ?備
        # 決定 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::UP) or  Input.press?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      @command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
      return
    end
    # ↓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_MOVER)
      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 2  # ?備
        # 決定 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
?

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(김원배) | 사신지(김병국)