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

Project1

 找回密码
 注册会员
搜索
查看: 1316|回复: 3

[已经解决] 如何在遊戲一開始就呼叫選單的"選擇人物"

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
发表于 2016-1-7 23:46:03 | 显示全部楼层 |阅读模式

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

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

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
 楼主| 发表于 2016-1-8 03:26:10 | 显示全部楼层
本帖最后由 燕征 于 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
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

发表于 2016-1-9 00:29:18 | 显示全部楼层
亲测有效。就算是背景换成图片也有效啊。不知道你说的问题是什么
是不是你插入的其他脚本冲突了


Project1.zip

864.54 KB, 下载次数: 70


回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
 楼主| 发表于 2016-1-9 01:10:41 | 显示全部楼层
後來我發現了問題是出在另一個叫做Scene_SelectActor 的腳本裡,頂部也寫了同樣的變數所以判定顯示順序靠後的Scene_SelectActor 。{:2_263:}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-29 19:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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