设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2352|回复: 7
打印 上一主题 下一主题

[讨论] 【RMXP】如何直接呼叫選單的角色選擇

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
跳转到指定楼层
1
发表于 2016-1-7 23:33:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 燕征 于 2016-1-8 01:20 编辑

如題。

角色選擇的問題我搜過很多帖子了,但回答大多是"條件分歧"的做法。
(為了表示我真的有去爬,但我只貼一個最具體我看到的做法)ex. [已经解决] 用rpg制作游戏做个角色选择
然後有很多前輩大大寫了美美的"選擇角色介面"的"腳本",例如我試圖想分解出來用結果卡殼的"人物選擇1.00版"

現在來詳述一下我的問題,
我希望在選擇"開始遊戲"後,進去就可以選擇角色,而選擇角色的畫面就是上面我貼的"人物選擇1.00版"那樣
看了下"人物選擇1.00版"的rxproj檔裡到底怎麼做,他是進遊戲後再按esc鈕再叫出系統選單(有物品、技能、狀態、存檔、結束遊戲...那個畫面)
透過Scene_Menu(他有重寫)再呼叫了自己寫的Scene_SelectActor達成。

也就是說,我想要一進遊戲就可以呼叫Scene_SelectActor來設定誰是主角。
設定好後我可能會遭遇的困難如下: 如何讓遊戲知道接下來都是玩家選擇的角色來進行劇情。

以上。

2016 01/08 01:16補充: 角色创建范例(纯事件+图片) 算是最接近我想法的一篇了,然而我還是更想知道能不能直接開啟腳本寫的"選擇人物"的那個區塊來做設定。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
2
 楼主| 发表于 2016-1-7 23:43:04 | 只看该作者
本帖最后由 燕征 于 2016-1-7 23:54 编辑

我又看了下我發的板區可發帖的內容定義,不太確定是否有違規,如果違規麻煩版主刪掉了,我另po一次到"XP提問區"
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
3
 楼主| 发表于 2016-1-8 03:23:15 | 只看该作者
本帖最后由 燕征 于 2016-1-8 04:47 编辑

突然靈光一閃,我想到了直接去 Scene_Title 這個腳本裡改掉 "開始遊戲"連接過去的$scene
這使我的問題解決了一半,後面又遭遇了連接的 class 好像不太對的問題 (我看畫面得知的結論)
改動和推測問題點如下:
  1.   # ● 命令 : 新的遊戲
  2.   def command_new_game
  3.     # 演奏確定 SE
  4.     # 中間都跟原來的一樣,我只改最後一行
  5.   ##$scene = Scene_Map.new
  6.   ##上面是原本的大大寫的,我後面有別的覅用到所以直接複製新的出來改名成下面那個: Scene_Map.new 改成 Scene_SelectActor_Start
  7.     $scene = Scene_SelectActor_Start.new
  8.   end
复制代码
然後遊戲就跑去執行....Scene_SelectActor而不是Scene_SelectActor_Start了,然後跳出是春跟我說在Scene_SelectActor_Start裡的210行有錯
但他明明執行的是Scene_SelectActor竟然能跟我說Scene_SelectActor_Start的210行有錯,不知道該怎麼跟腳本溝通了。

接著貼 Scene_SelectActor_Start 的腳本
  1. #==============================================================================

  2. #----------人物選擇 1.00版----------#
  3. #─版權屬於Agoの軌道物語和RM咖啡館(先行者)所有─
  4. #Agoの軌道物語:https://sites.google.com/site/agonoguidaowuyu
  5. #RM咖啡館:https://sites.google.com/site/hoctorrmfactory

  6. #--------------------------------------------------------------------------
  7. # 可用來作為遊戲一開始的角色選擇和劇情分歧時的角色選擇,
  8. # 爲了不讓FPS下滑,所以幾乎都是在Scene場景類描繪,
  9. # 其實效果滿陽春的,自己可以操作看看。
  10. #--------------------------------------------------------------------------

  11. #Agoの軌道物語:https://sites.google.com/site/agonoguidaowuyu
  12. #RM咖啡館:https://sites.google.com/site/hoctorrmfactory
  13. #─版權屬於Agoの軌道物語和RM咖啡館(先行者)所有─
  14. #----------人物選擇 1.00版----------#

  15. #==============================================================================
  16.   #--------------------------------------------------------------------------
  17.   # ● 人物選擇自定義區
  18.   #--------------------------------------------------------------------------
  19.   # 設定參與選擇的角色ID,最多為四人
  20.   ## 參考: 資料庫 >> 角色
  21.   ACTORS = [1,2]
  22.   # 顯示選擇角色的圖像,0為行走圖、1為戰鬥圖、2為自定義
  23.   PICTRUE = 1
  24.   
  25.   # 角色說明,格式為ACTORS_HELP[角色ID] = "字串"
  26.   ACTORS_HELP = [] # 初始化角色說明
  27.   ACTORS_HELP[1] = "男"
  28.   ACTORS_HELP[2] = "女"
  29.   # 設定說明字串的大小
  30.   ACTORS_HELP_FONT_SIZE = 18
  31.   
  32.   # 顯示背景,0為地圖、1為自定義
  33.   BACK = 0
  34.   # 若使用自訂義時設定圖片路徑
  35.   #BACK_PICTRUE = RPG::Cache.picture("人物選擇[背景]")
  36. #==============================================================================

  37. class Scene_SelectActor_Start
  38.   #--------------------------------------------------------------------------
  39.   # ● 初始化目標
  40.   #     menu_index : 命令游標的初期位置
  41.   #--------------------------------------------------------------------------
  42.   def initialize(select_actor_index = 0)
  43.     @select_actor_index = select_actor_index
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 主處理
  47.   #--------------------------------------------------------------------------
  48.   def main
  49.     @actors_index = 0 # 初始化選項
  50.     @pictrues = [] # 初始化圖像
  51.     @actors_pic = [] # 初始化立繪
  52.     @actors_help = [] # 初始化角色名稱
  53.     # 描繪角色說明的外框
  54.     @help = Sprite.new
  55.     @help.bitmap = Bitmap.new(640,480)
  56.     @help.y = 412
  57.     @help.z = 9998
  58.     for i in 0...164
  59.       @help.bitmap.fill_rect(i*2,0,2,1,Color.new(255,255,255,5*i))
  60.       @help.bitmap.fill_rect(652-i*2,0,2,1,Color.new(255,255,255,5*i))
  61.       @help.bitmap.fill_rect(i*2,39,2,1,Color.new(255,255,255,5*i))
  62.       @help.bitmap.fill_rect(652-i*2,39,2,1,Color.new(255,255,255,5*i))
  63.       @help.bitmap.fill_rect(i*2,1,2,37,Color.new(0,0,0,5*i))
  64.       @help.bitmap.fill_rect(652-i*2,1,2,37,Color.new(0,0,0,5*i))
  65.     end
  66.     # 判定BACK的數值做背景的描繪
  67.     if BACK == 0
  68.       @back = Spriteset_Map.new
  69.     elsif BACK == 1
  70.       @back = RPG::Sprite.new
  71.       @back.bitmap = BACK_PICTRUE
  72.     end
  73.     # 初始化說明視窗
  74.     @help_window = Window_Help.new
  75.     @help_window.x = 0
  76.     @help_window.y = 400
  77.     @help_window.width = 640
  78.     @help_window.z = 9999
  79.     @help_window.opacity = 0
  80.     @help_window.back_opacity = 0
  81.     @help_window.contents.font.size = ACTORS_HELP_FONT_SIZE
  82.     # 讀取使用者所設定的角色
  83.     for i in 0...ACTORS.size
  84.       # 處理角色名字顯示
  85.       actor = $game_actors[ACTORS[i]]
  86.       @actors_help[i] = RPG::Sprite.new
  87.       @actors_help[i].bitmap = Bitmap.new(640,480)
  88.       @actors_help[i].x =  i * 160
  89.       for c in 0...180
  90.         @actors_help[i].bitmap.fill_rect(i, c*1,160 ,3 ,Color.new(0,0,0,255-c*1.5))
  91.         @actors_help[i].bitmap.fill_rect(i, 300+c*1,160 ,3 ,Color.new(0,0,0,c*2))
  92.       end
  93.       @actors_help[i].z = 999
  94.       @actors_help[i].bitmap.draw_text(0, 10,120, 32, actor.name, 2)  
  95.       # 偵測角色的圖像為何
  96.       case PICTRUE
  97.       # 設定的角色圖像為行走圖時
  98.       when 0
  99.         # 處理角色行走圖的內容
  100.         @pictrues[i] = RPG::Sprite.new
  101.         @pictrues[i].bitmap = Bitmap.new(640,480)
  102.         bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
  103.         @pictrues[i].bitmap.blt(75+i*160,230,bitmap,Rect.new(0,0,bitmap.width/4,bitmap.height/4),255)
  104.         for b in 0...240
  105.           @pictrues[i].bitmap.fill_rect(9+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  106.           @pictrues[i].bitmap.fill_rect(9+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  107.           @pictrues[i].bitmap.fill_rect(170+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  108.           @pictrues[i].bitmap.fill_rect(170+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  109.         end
  110.       # 設定的角色圖像為戰鬥圖時
  111.       when 1
  112.         # 處理角色戰鬥圖的內容
  113.         @pictrues[i] = RPG::Sprite.new
  114.         @pictrues[i].bitmap = Bitmap.new(640,480)
  115.         bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
  116.         @pictrues[i].bitmap.blt(30+i*175,160,bitmap,Rect.new(0,0,bitmap.width,bitmap.height),255)
  117.         for b in 0...240
  118.           @pictrues[i].bitmap.fill_rect(9+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  119.           @pictrues[i].bitmap.fill_rect(9+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  120.           @pictrues[i].bitmap.fill_rect(170+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  121.           @pictrues[i].bitmap.fill_rect(170+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  122.         end
  123.       # 設定的角色圖像為自定義時
  124.       when 2
  125.         # 處理角色自定義圖形的內容
  126.         @pictrues[i] = RPG::Sprite.new
  127.         @pictrues[i].bitmap = Bitmap.new(640,480)
  128.         @pictrues[i].opacity = 100
  129.         bitmap = RPG::Cache.picture(actor.name.to_s+"I")
  130.         @pictrues[i].bitmap.blt(i*160,30,bitmap,Rect.new(0,0,bitmap.width,bitmap.height),255)
  131.         for b in 0...240
  132.           @pictrues[i].bitmap.fill_rect(i*160,b*1,1,2,Color.new(255,255,255,b*5))
  133.           @pictrues[i].bitmap.fill_rect(i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  134.           @pictrues[i].bitmap.fill_rect(160+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  135.           @pictrues[i].bitmap.fill_rect(160+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  136.         end
  137.         # 處理角色人數若未超過 3 時的立繪
  138.         @actors_pic[i] = RPG::Sprite.new
  139.         @actors_pic[i].bitmap = Bitmap.new(640,480)
  140.         bitmap = RPG::Cache.picture(actor.name.to_s)
  141.         @actors_pic[i].bitmap.blt(i*160,30,bitmap,Rect.new(0,0,bitmap.width,bitmap.height),255)
  142.         @actors_pic[i].x = 1200
  143.         @actors_pic[i].y = 250
  144.         @actors_pic[i].ox = @actors_pic[i].bitmap.width / 2
  145.         @actors_pic[i].oy = @actors_pic[i].bitmap.height / 2
  146.       end
  147.     end
  148.     # 執行過渡
  149.     Graphics.transition
  150.     # 主循環
  151.     loop do
  152.       # 更新遊戲畫面
  153.       Graphics.update
  154.       # 更新輸入訊息
  155.       Input.update
  156.       # 更新畫面
  157.       update
  158.       # 如果切換畫面就中斷循環
  159.       if $scene != self
  160.         break
  161.       end
  162.     end
  163.     # 準備過渡
  164.     Graphics.freeze
  165.     # 釋放角色相關圖形
  166.     for i in 0...ACTORS.size
  167.       @actors_help[i].dispose
  168.       @actors_help[i].bitmap.dispose
  169.       @pictrues[i].dispose
  170.       @pictrues[i].bitmap.dispose
  171.       if PICTRUE == 2
  172.         @actors_pic[i].dispose
  173.         @actors_pic[i].bitmap.dispose
  174.       end
  175.     end
  176.     # 釋放背景
  177.     @back.dispose
  178.     # 釋放說明視窗
  179.     @help_window.dispose
  180.     # 釋放描繪說明視窗圖形
  181.     @help.dispose
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 更新畫面
  185.   #--------------------------------------------------------------------------
  186.   def update
  187.     # 更新選項
  188.     command_index   
  189.     # 更新說明視窗
  190.     @help_window_update
  191.     actor_id = ACTORS[@actors_index]
  192.     text = ACTORS_HELP[actor_id].to_s
  193.     @help_window.set_text(text,1) if text != nil
  194.     # 如果按上的情況
  195.     if Input.trigger?(Input::C)
  196.       # 播放確定音效
  197.       $game_system.se_play($data_system.decision_se)
  198.       # 讀取角色
  199.       for i in 0...$game_party.actors.size
  200.         id = $game_party.actors[i].id
  201.         actors_id = [] if actors_id == nil
  202.         actors_id.push(id)
  203.       end
  204.       # 刪除角色
  205.       actors_id.each do |i|
  206.         $game_party.remove_actor(i)
  207.       end
  208.       # 加入選擇的角色
  209.       id = ACTORS[@actors_index]
  210.       $game_party.add_actor(id)
  211.       $scene = Scene_Map.new
  212.     end
  213.     # 判定是否使用自訂角色圖
  214.     if PICTRUE == 2
  215.       # 如果角色人數小於 3 時
  216.       if ACTORS.size < 3
  217.         # 讀取選項
  218.         case @actors_index
  219.         when 0
  220.           @actors_pic[0].x -= 20 if @actors_pic[0].x != 600
  221.           @actors_pic[0].x = 600 if @actors_pic[0].x < 600
  222.           @actors_pic[0].opacity += 30
  223.           @actors_pic[1].x += 20 if @actors_pic[1].x != 1200
  224.           @actors_pic[1].x = 1200 if @actors_pic[1].x > 1200
  225.           @actors_pic[1].opacity -= 30
  226.         when 1
  227.           @actors_pic[1].x -= 20 if @actors_pic[1].x != 450
  228.           @actors_pic[1].x = 450 if @actors_pic[1].x < 450
  229.           @actors_pic[1].opacity += 30
  230.           @actors_pic[0].x += 20 if @actors_pic[0].x != 1200
  231.           @actors_pic[0].x = 1200 if @actors_pic[0].x > 1200
  232.           @actors_pic[0].opacity -= 30
  233.         end
  234.       end
  235.     end
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ● 更新選項
  239.   #--------------------------------------------------------------------------
  240.   def command_index
  241.     # 如果按取消時
  242.     if Input.trigger?(Input::B)
  243.       # 演奏取消 SE
  244.       $game_system.se_play($data_system.cancel_se)
  245.       # 切換到地圖畫面
  246.       $scene = Scene_Map.new
  247.       return
  248.     end
  249.     case ACTORS.size
  250.     when 1
  251.       @actors_index = 0
  252.     when 2
  253.     # 如果按←時
  254.       if Input.trigger?(Input::LEFT)
  255.         @actors_index -= 1
  256.         if @actors_index < 0
  257.           @actors_index = 1
  258.         end
  259.         $game_system.se_play($data_system.cursor_se)
  260.       end
  261.       # 如果按→時
  262.       if Input.trigger?(Input::RIGHT)
  263.         @actors_index += 1
  264.         if @actors_index > 1
  265.           @actors_index = 0
  266.         end
  267.         $game_system.se_play($data_system.cursor_se)
  268.       end
  269.     when 3
  270.     # 如果按←時
  271.       if Input.trigger?(Input::LEFT)
  272.         @actors_index -= 1
  273.         if @actors_index < 0
  274.           @actors_index = 2
  275.         end
  276.         $game_system.se_play($data_system.cursor_se)
  277.       end
  278.       # 如果按→時
  279.       if Input.trigger?(Input::RIGHT)
  280.         @actors_index += 1
  281.         if @actors_index > 2
  282.           @actors_index = 0
  283.         end
  284.         $game_system.se_play($data_system.cursor_se)
  285.       end
  286.     when 4
  287.     # 如果按←時
  288.       if Input.trigger?(Input::LEFT)
  289.         @actors_index -= 1
  290.         if @actors_index < 0
  291.           @actors_index = 3
  292.         end
  293.         $game_system.se_play($data_system.cursor_se)
  294.       end
  295.       # 如果按→時
  296.       if Input.trigger?(Input::RIGHT)
  297.         @actors_index += 1
  298.         if @actors_index > 3
  299.           @actors_index = 0
  300.         end
  301.         $game_system.se_play($data_system.cursor_se)
  302.       end
  303.     end
  304.     case @actors_index
  305.     when 0
  306.       @pictrues[0].opacity = 255
  307.       @pictrues[1].opacity = 100
  308.       if ACTORS.size == 3
  309.         @pictrues[2].opacity = 100
  310.       elsif ACTORS.size == 4
  311.         @pictrues[2].opacity = 100
  312.         @pictrues[3].opacity = 100
  313.       end
  314.     when 1
  315.       @pictrues[0].opacity = 100
  316.       @pictrues[1].opacity = 255
  317.       if ACTORS.size == 3
  318.         @pictrues[2].opacity = 100
  319.       elsif ACTORS.size == 4
  320.         @pictrues[2].opacity = 100
  321.         @pictrues[3].opacity = 100
  322.       end
  323.     when 2
  324.       @pictrues[0].opacity = 100
  325.       @pictrues[1].opacity = 100
  326.       @pictrues[2].opacity = 255
  327.       if ACTORS.size == 4
  328.         @pictrues[3].opacity = 100
  329.       end
  330.     when 3
  331.       @pictrues[0].opacity = 100
  332.       @pictrues[1].opacity = 100
  333.       @pictrues[2].opacity = 100
  334.       @pictrues[3].opacity = 255
  335.     end
  336.   end
  337. end
  338.   #--------------------------------------------------------------------------
  339.   # ● 處理要選擇的人數大於 4 時
  340.   #--------------------------------------------------------------------------
  341.   if ACTORS.size > 4
  342.     print "不好意思,本腳本設定的人數大於4,請刪除人數為5以下"
  343.     exit
  344.   end
复制代码
我之所以一眼認出遊戲執行錯是因為它顯示了 Scene_SelectActor 寫的"角色說明",一串文字跟一個字的差別太明顯了....
並且我又改了 37行 的 BACK 讓39行會顯示圖片,結果執行出來還是沒有背景我就確定了這件事

請問我有哪個環節沒有注意到嗎?
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2016-1-8 07:44:23 | 只看该作者
本帖最后由 taroxd 于 2016-1-8 07:46 编辑

请问你可不可以把使用的全部脚本都贴出来?

你贴出来的部分里完全没有出现 Scene_SelectActor 这个类,我无法判断你为什么会进入这个场景

你试试删掉 Scene_SelectActor 的相关脚本,看看什么时候会报缺少这个类的错误?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
5
 楼主| 发表于 2016-1-8 11:10:11 | 只看该作者
本帖最后由 燕征 于 2016-1-8 12:08 编辑

我想了想有個推測,Scene_SelectActor_Start在腳本編輯器的放置順序上在Scene_SelectActor上一個
他是不是執行最後(Scene_SelectActor)"#人物選擇自定義區"看見的ACTORS,ACTORS_HELP呢?
顯示的是Scene_SelectActor的腳本上的ACTORS,ACTORS_HELP
把Scene_SelectActor"#人物選擇自定義區"的東西註解掉後測試,我推測的方向應該沒有錯(然而我還是不知道為什麼要這樣把,難道我得去改Scene_SelectActor裡變數名稱?)

不過我也明白了它確實有去執行Scene_SelectActor_Start
然後他就繼續卡在Scene_SelectActor_Start的210行那邊,也就是"# 刪除角色"那一塊
210的 do |i| 做什麼我不知道也推測不出來(裡面很多迴圈和判斷條件我其實都膩推不出條件的用意,不知道我要如何和腳本創作者的邏輯搭上才好...)
這個區塊經註解就不會再出現問題訊息視窗,可以順利進行下去,但相應出來的問題就是畫面上會出現選擇的角色
可是我的畫面裡還不需要出現那個角色(我要去播動畫來著)

這裡是Scene_SelectActor的腳本,跟Scene_SelectActor_Start不同之處除了上面的"人物選擇自定義區"裡的東西
就只有class name不一樣(一個是Scene_SelectActor_Start,另一個是Scene_SelectActor)
  1. #==============================================================================

  2. #----------人物選擇 1.00版----------#
  3. #─版權屬於Agoの軌道物語和RM咖啡館(先行者)所有─
  4. #Agoの軌道物語:https://sites.google.com/site/agonoguidaowuyu
  5. #RM咖啡館:https://sites.google.com/site/hoctorrmfactory

  6. #--------------------------------------------------------------------------
  7. # 可用來作為遊戲一開始的角色選擇和劇情分歧時的角色選擇,
  8. # 爲了不讓FPS下滑,所以幾乎都是在Scene場景類描繪,
  9. # 其實效果滿陽春的,自己可以操作看看。
  10. #--------------------------------------------------------------------------

  11. #Agoの軌道物語:https://sites.google.com/site/agonoguidaowuyu
  12. #RM咖啡館:https://sites.google.com/site/hoctorrmfactory
  13. #─版權屬於Agoの軌道物語和RM咖啡館(先行者)所有─
  14. #----------人物選擇 1.00版----------#

  15. #==============================================================================
  16.   #--------------------------------------------------------------------------
  17.   # ● 人物選擇自定義區
  18.   #--------------------------------------------------------------------------
  19.   # 設定參與選擇的角色ID,最多為四人
  20.   #ACTORS = [4,5,7,8]
  21.   ACTORS = [1,2] ###################### 要改阿以後
  22.   # 顯示選擇角色的圖像,0為行走圖、1為戰鬥圖、2為自定義
  23.   PICTRUE = 2

  24.   # 角色說明,格式為ACTORS_HELP[角色ID] = "字串"
  25.   ACTORS_HELP = [] # 初始化角色說明
  26.   ACTORS_HELP[1] = "強大的劍士,擁有平均的力量及速度,屬於平均進攻型"
  27.   ACTORS_HELP[2] = "速度不弱的槍兵,擁有平均的力量及速度,屬於速度進攻型"
  28.   #ACTORS_HELP[4] = "速度極高的盜賊,擁有強力的速度,屬於速度輔助型"
  29.   #ACTORS_HELP[5] = "敏捷極高的獵人,擁有強大的靈巧,屬於速度遠攻型"
  30.   #ACTORS_HELP[7] = "法力極高的祭師,擁有強大恢復的能力,屬於魔法輔助型"
  31.   #ACTORS_HELP[8] = "智力極高的魔導士,擁有強大魔法的能力,屬於魔法進攻型"
  32.   # 設定說明字串的大小
  33.   ACTORS_HELP_FONT_SIZE = 18
  34.   
  35.   # 顯示背景,0為地圖、1為自定義
  36.   BACK = 0
  37.   # BACK = 1
  38.   # 若使用自訂義時設定圖片路徑
  39.   #BACK_PICTRUE = RPG::Cache.picture("人物選擇[背景]")
  40. #==============================================================================

  41. class Scene_SelectActor
  42.   #--------------------------------------------------------------------------
  43.   # ● 初始化目標
  44.   #     menu_index : 命令游標的初期位置
  45.   #--------------------------------------------------------------------------
  46.   def initialize(select_actor_index = 0)
  47.     @select_actor_index = select_actor_index
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 主處理
  51.   #--------------------------------------------------------------------------
  52.   def main
  53.     @actors_index = 0 # 初始化選項
  54.     @pictrues = [] # 初始化圖像
  55.     @actors_pic = [] # 初始化立繪
  56.     @actors_help = [] # 初始化角色名稱
  57.     # 描繪角色說明的外框
  58.     @help = Sprite.new
  59.     @help.bitmap = Bitmap.new(640,480)
  60.     @help.y = 412
  61.     @help.z = 9998
  62.     for i in 0...164
  63.       @help.bitmap.fill_rect(i*2,0,2,1,Color.new(255,255,255,5*i))
  64.       @help.bitmap.fill_rect(652-i*2,0,2,1,Color.new(255,255,255,5*i))
  65.       @help.bitmap.fill_rect(i*2,39,2,1,Color.new(255,255,255,5*i))
  66.       @help.bitmap.fill_rect(652-i*2,39,2,1,Color.new(255,255,255,5*i))
  67.       @help.bitmap.fill_rect(i*2,1,2,37,Color.new(0,0,0,5*i))
  68.       @help.bitmap.fill_rect(652-i*2,1,2,37,Color.new(0,0,0,5*i))
  69.     end
  70.     # 判定BACK的數值做背景的描繪
  71.     if BACK == 0
  72.       @back = Spriteset_Map.new
  73.     elsif BACK == 1
  74.       @back = RPG::Sprite.new
  75.       @back.bitmap = BACK_PICTRUE
  76.     end
  77.     # 初始化說明視窗
  78.     @help_window = Window_Help.new
  79.     @help_window.x = 0
  80.     @help_window.y = 400
  81.     @help_window.width = 640
  82.     @help_window.z = 9999
  83.     @help_window.opacity = 0
  84.     @help_window.back_opacity = 0
  85.     @help_window.contents.font.size = ACTORS_HELP_FONT_SIZE
  86.     # 讀取使用者所設定的角色
  87.     for i in 0...ACTORS.size
  88.       # 處理角色名字顯示
  89.       actor = $game_actors[ACTORS[i]]
  90.       @actors_help[i] = RPG::Sprite.new
  91.       @actors_help[i].bitmap = Bitmap.new(640,480)
  92.       @actors_help[i].x =  i * 160
  93.       for c in 0...180
  94.         @actors_help[i].bitmap.fill_rect(i, c*1,160 ,3 ,Color.new(0,0,0,255-c*1.5))
  95.         @actors_help[i].bitmap.fill_rect(i, 300+c*1,160 ,3 ,Color.new(0,0,0,c*2))
  96.       end
  97.       @actors_help[i].z = 999
  98.       @actors_help[i].bitmap.draw_text(0, 10,120, 32, actor.name, 2)  
  99.       # 偵測角色的圖像為何
  100.       case PICTRUE
  101.       # 設定的角色圖像為行走圖時
  102.       when 0
  103.         # 處理角色行走圖的內容
  104.         @pictrues[i] = RPG::Sprite.new
  105.         @pictrues[i].bitmap = Bitmap.new(640,480)
  106.         bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
  107.         @pictrues[i].bitmap.blt(75+i*160,230,bitmap,Rect.new(0,0,bitmap.width/4,bitmap.height/4),255)
  108.         for b in 0...240
  109.           @pictrues[i].bitmap.fill_rect(9+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  110.           @pictrues[i].bitmap.fill_rect(9+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  111.           @pictrues[i].bitmap.fill_rect(170+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  112.           @pictrues[i].bitmap.fill_rect(170+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  113.         end
  114.       # 設定的角色圖像為戰鬥圖時
  115.       when 1
  116.         # 處理角色戰鬥圖的內容
  117.         @pictrues[i] = RPG::Sprite.new
  118.         @pictrues[i].bitmap = Bitmap.new(640,480)
  119.         bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
  120.         @pictrues[i].bitmap.blt(30+i*175,160,bitmap,Rect.new(0,0,bitmap.width,bitmap.height),255)
  121.         for b in 0...240
  122.           @pictrues[i].bitmap.fill_rect(9+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  123.           @pictrues[i].bitmap.fill_rect(9+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  124.           @pictrues[i].bitmap.fill_rect(170+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  125.           @pictrues[i].bitmap.fill_rect(170+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  126.         end
  127.       # 設定的角色圖像為自定義時
  128.       when 2
  129.         # 處理角色自定義圖形的內容
  130.         @pictrues[i] = RPG::Sprite.new
  131.         @pictrues[i].bitmap = Bitmap.new(640,480)
  132.         @pictrues[i].opacity = 100
  133.         bitmap = RPG::Cache.picture(actor.name.to_s+"I")
  134.         @pictrues[i].bitmap.blt(i*160,30,bitmap,Rect.new(0,0,bitmap.width,bitmap.height),255)
  135.         for b in 0...240
  136.           @pictrues[i].bitmap.fill_rect(i*160,b*1,1,2,Color.new(255,255,255,b*5))
  137.           @pictrues[i].bitmap.fill_rect(i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  138.           @pictrues[i].bitmap.fill_rect(160+i*160,b*1,1,2,Color.new(255,255,255,b*5))
  139.           @pictrues[i].bitmap.fill_rect(160+i*160,480-b*1,1,2,Color.new(255,255,255,b*5))
  140.         end
  141.         # 處理角色人數若未超過 3 時的立繪
  142.         @actors_pic[i] = RPG::Sprite.new
  143.         @actors_pic[i].bitmap = Bitmap.new(640,480)
  144.         bitmap = RPG::Cache.picture(actor.name.to_s)
  145.         @actors_pic[i].bitmap.blt(i*160,30,bitmap,Rect.new(0,0,bitmap.width,bitmap.height),255)
  146.         @actors_pic[i].x = 1200
  147.         @actors_pic[i].y = 250
  148.         @actors_pic[i].ox = @actors_pic[i].bitmap.width / 2
  149.         @actors_pic[i].oy = @actors_pic[i].bitmap.height / 2
  150.       end
  151.     end
  152.     # 執行過渡
  153.     Graphics.transition
  154.     # 主循環
  155.     loop do
  156.       # 更新遊戲畫面
  157.       Graphics.update
  158.       # 更新輸入訊息
  159.       Input.update
  160.       # 更新畫面
  161.       update
  162.       # 如果切換畫面就中斷循環
  163.       if $scene != self
  164.         break
  165.       end
  166.     end
  167.     # 準備過渡
  168.     Graphics.freeze
  169.     # 釋放角色相關圖形
  170.     for i in 0...ACTORS.size
  171.       @actors_help[i].dispose
  172.       @actors_help[i].bitmap.dispose
  173.       @pictrues[i].dispose
  174.       @pictrues[i].bitmap.dispose
  175.       if PICTRUE == 2
  176.         @actors_pic[i].dispose
  177.         @actors_pic[i].bitmap.dispose
  178.       end
  179.     end
  180.     # 釋放背景
  181.     @back.dispose
  182.     # 釋放說明視窗
  183.     @help_window.dispose
  184.     # 釋放描繪說明視窗圖形
  185.     @help.dispose
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 更新畫面
  189.   #--------------------------------------------------------------------------
  190.   def update
  191.     # 更新選項
  192.     command_index   
  193.     # 更新說明視窗
  194.     @help_window_update
  195.     actor_id = ACTORS[@actors_index]
  196.     text = ACTORS_HELP[actor_id].to_s
  197.     @help_window.set_text(text,1) if text != nil
  198.     # 如果按上的情況
  199.     if Input.trigger?(Input::C)
  200.       # 播放確定音效
  201.       $game_system.se_play($data_system.decision_se)
  202.       # 讀取角色
  203.       for i in 0...$game_party.actors.size
  204.         id = $game_party.actors[i].id
  205.         actors_id = [] if actors_id == nil
  206.         actors_id.push(id)
  207.       end
  208.       # 刪除角色
  209.       actors_id.each do |i|
  210.         $game_party.remove_actor(i)
  211.       end
  212.       # 加入選擇的角色
  213.       id = ACTORS[@actors_index]
  214.       $game_party.add_actor(id)
  215.       $scene = Scene_Map.new
  216.     end
  217.     # 判定是否使用自訂角色圖
  218.     if PICTRUE == 2
  219.       # 如果角色人數小於 3 時
  220.       if ACTORS.size < 3
  221.         # 讀取選項
  222.         case @actors_index
  223.         when 0
  224.           @actors_pic[0].x -= 20 if @actors_pic[0].x != 600
  225.           @actors_pic[0].x = 600 if @actors_pic[0].x < 600
  226.           @actors_pic[0].opacity += 30
  227.           @actors_pic[1].x += 20 if @actors_pic[1].x != 1200
  228.           @actors_pic[1].x = 1200 if @actors_pic[1].x > 1200
  229.           @actors_pic[1].opacity -= 30
  230.         when 1
  231.           @actors_pic[1].x -= 20 if @actors_pic[1].x != 450
  232.           @actors_pic[1].x = 450 if @actors_pic[1].x < 450
  233.           @actors_pic[1].opacity += 30
  234.           @actors_pic[0].x += 20 if @actors_pic[0].x != 1200
  235.           @actors_pic[0].x = 1200 if @actors_pic[0].x > 1200
  236.           @actors_pic[0].opacity -= 30
  237.         end
  238.       end
  239.     end
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 更新選項
  243.   #--------------------------------------------------------------------------
  244.   def command_index
  245.     # 如果按取消時
  246.     if Input.trigger?(Input::B)
  247.       # 演奏取消 SE
  248.       $game_system.se_play($data_system.cancel_se)
  249.       # 切換到地圖畫面
  250.       $scene = Scene_Map.new
  251.       return
  252.     end
  253.     case ACTORS.size
  254.     when 1
  255.       @actors_index = 0
  256.     when 2
  257.     # 如果按←時
  258.       if Input.trigger?(Input::LEFT)
  259.         @actors_index -= 1
  260.         if @actors_index < 0
  261.           @actors_index = 1
  262.         end
  263.         $game_system.se_play($data_system.cursor_se)
  264.       end
  265.       # 如果按→時
  266.       if Input.trigger?(Input::RIGHT)
  267.         @actors_index += 1
  268.         if @actors_index > 1
  269.           @actors_index = 0
  270.         end
  271.         $game_system.se_play($data_system.cursor_se)
  272.       end
  273.     when 3
  274.     # 如果按←時
  275.       if Input.trigger?(Input::LEFT)
  276.         @actors_index -= 1
  277.         if @actors_index < 0
  278.           @actors_index = 2
  279.         end
  280.         $game_system.se_play($data_system.cursor_se)
  281.       end
  282.       # 如果按→時
  283.       if Input.trigger?(Input::RIGHT)
  284.         @actors_index += 1
  285.         if @actors_index > 2
  286.           @actors_index = 0
  287.         end
  288.         $game_system.se_play($data_system.cursor_se)
  289.       end
  290.     when 4
  291.     # 如果按←時
  292.       if Input.trigger?(Input::LEFT)
  293.         @actors_index -= 1
  294.         if @actors_index < 0
  295.           @actors_index = 3
  296.         end
  297.         $game_system.se_play($data_system.cursor_se)
  298.       end
  299.       # 如果按→時
  300.       if Input.trigger?(Input::RIGHT)
  301.         @actors_index += 1
  302.         if @actors_index > 3
  303.           @actors_index = 0
  304.         end
  305.         $game_system.se_play($data_system.cursor_se)
  306.       end
  307.     end
  308.     case @actors_index
  309.     when 0
  310.       @pictrues[0].opacity = 255
  311.       @pictrues[1].opacity = 100
  312.       if ACTORS.size == 3
  313.         @pictrues[2].opacity = 100
  314.       elsif ACTORS.size == 4
  315.         @pictrues[2].opacity = 100
  316.         @pictrues[3].opacity = 100
  317.       end
  318.     when 1
  319.       @pictrues[0].opacity = 100
  320.       @pictrues[1].opacity = 255
  321.       if ACTORS.size == 3
  322.         @pictrues[2].opacity = 100
  323.       elsif ACTORS.size == 4
  324.         @pictrues[2].opacity = 100
  325.         @pictrues[3].opacity = 100
  326.       end
  327.     when 2
  328.       @pictrues[0].opacity = 100
  329.       @pictrues[1].opacity = 100
  330.       @pictrues[2].opacity = 255
  331.       if ACTORS.size == 4
  332.         @pictrues[3].opacity = 100
  333.       end
  334.     when 3
  335.       @pictrues[0].opacity = 100
  336.       @pictrues[1].opacity = 100
  337.       @pictrues[2].opacity = 100
  338.       @pictrues[3].opacity = 255
  339.     end
  340.   end
  341. end
  342.   #--------------------------------------------------------------------------
  343.   # ● 處理要選擇的人數大於 4 時
  344.   #--------------------------------------------------------------------------
  345.   if ACTORS.size > 4
  346.     print "不好意思,本腳本設定的人數大於4,請刪除人數為5以下"
  347.     exit
  348.   end
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

6
发表于 2016-1-8 19:16:18 | 只看该作者
燕征 发表于 2016-1-8 11:10
我想了想有個推測,Scene_SelectActor_Start在腳本編輯器的放置順序上在Scene_SelectActor上一個
他是不是 ...

啊,是的。这里的常量定义在顶层,两段脚本同时使用会发生冲突。

如果没有需要的话,就删掉 Scene_SelectActor 那个脚本吧
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
7
 楼主| 发表于 2016-1-9 01:32:12 | 只看该作者
如果我還會用到的話,是否將變數名稱改掉就可以了呢?

另外,想請問
  1. actors_id.each do |i|
复制代码
是什麼意思?
do是代表 do while迴圈? 那|i|又是什麼呢? (這個我不知道該怎麼下關鍵字來找答案)

点评

另外,改掉常数的名称就可以了。注意一下,大写字母开头的是常数不是变数  发表于 2016-1-9 07:57
对数组 actors_id 调用 each 方法,并将后面的 block(从 do |i| 一直到 end) 作为函数的参数。你可以查询文档中的 Array#each 方法。  发表于 2016-1-9 07:57
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
8
 楼主| 发表于 2016-1-9 21:29:27 | 只看该作者
燕征 发表于 2016-1-9 01:32
如果我還會用到的話,是否將變數名稱改掉就可以了呢?

另外,想請問是什麼意思?

好的,謝謝大大
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 17:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表