Project1

标题: 弃坑产物 [打印本页]

作者: IamI    时间: 2008-6-28 21:21
标题: 弃坑产物
恩,本来打算参加短篇大赛的,不过将要完工最后一天,被小真狠狠批了一顿,所以,就放弃了= =留下了以下产物:
(仿风色幻想)大地图脚本

(仿风色幻想)选择项脚本

(那个……背景只是敷衍一下……另外,使用这个可能需要一些折中的技巧)
(仿风色幻想)对话脚本,只是在已有的基础上修改了一下,原脚本出自《走近科学》
还有一个线索Scene,做得很烂,就不要看了吧{/gg}
范例包(包括以上所有内容):
http://rpg.blue/UP_PIC/200801/仿风色幻想.rar

大地图脚本

  1. class PlaceIcon
  2.   attr_reader :x
  3.   attr_reader :y
  4.   WIDTH     = 24
  5.   HEIGHT    = 24
  6.   WIDTH_A   = 32
  7.   HEIGHT_A  = 32
  8.   def initialize(x,y,icon_name)
  9.     #x,y为中央坐标
  10.     @x = x
  11.     @y = y
  12.     @lx = x - WIDTH  / 2
  13.     @ly = y - HEIGHT / 2
  14.     @lx_a = x - WIDTH_A  / 2
  15.     @ly_a = y - HEIGHT_A / 2
  16.     @icon_name = icon_name
  17.     @icon_bitmap = RPG::Cache.icon(icon_name)
  18.   end
  19.   def mouse_in?
  20.     array = Mouse.pos
  21.     if @lx < array[0] and array[0] < @lx + WIDTH
  22.       if @ly < array[1]and array[1] < @ly + HEIGHT
  23.         return true
  24.       end
  25.     end
  26.     return false
  27.   end
  28.   def draw(sprite)
  29.     if mouse_in?
  30.       draw_l(sprite)
  31.     else
  32.       draw_s(sprite)
  33.     end
  34.   end
  35.   def draw_s(sprite)
  36.     sprite.bitmap.stretch_blt(Rect.new(@lx,@ly,WIDTH,HEIGHT),@icon_bitmap, @icon_bitmap.rect)
  37.   end
  38.   def draw_l(sprite)
  39.     sprite.bitmap.stretch_blt(Rect.new(@lx_a,@ly_a,WIDTH_A,HEIGHT_A),@icon_bitmap, @icon_bitmap.rect)
  40.   end
  41. end

  42. class Window_Place
  43.   attr_accessor :visible
  44.   def initialize(start_in)
  45.     @visible = false
  46.     @sprite = Sprite.new
  47.     @sprite.bitmap = Bitmap.new(280,173)
  48.     @sprite.x = 640 - 280
  49.     @sprite.y = 480 - 173
  50.     @back_bitmap = RPG::Cache.windowskin("WorldHelp")
  51.     @in_bitmap = RPG::Cache.tileset(start_in)
  52.     @name_now = ""
  53.     @sprite.z = 6001
  54.   end
  55.   def change_in(str,name)
  56.     @in_bitmap = RPG::Cache.tileset(str)
  57.     @name_now = name
  58.   end
  59.   
  60.   def update
  61.     @sprite.bitmap.clear
  62.     if @visible == false
  63.       return
  64.     end
  65.     @sprite.bitmap.blt(0,0,@back_bitmap,@back_bitmap.rect)
  66.     @sprite.bitmap.blt(15,15,@in_bitmap,@in_bitmap.rect)
  67.     @sprite.bitmap.font.color = Color.new(0,0,0,255)
  68.     @sprite.bitmap.font.size = 14
  69.     @sprite.bitmap.draw_text(15,15+128,256,15,@name_now,1)
  70.   end
  71.   def dispose
  72.     @sprite.dispose
  73.   end
  74. end
  75. #==============================================================================
  76. # ■ Scene_Map
  77. #------------------------------------------------------------------------------
  78. #  处理地图画面的类。
  79. #==============================================================================

  80. class Scene_Map_s
  81.   attr_accessor :spriteset
  82.   attr_accessor :message_window
  83.   def initialize(back)
  84.     @back_bitmap = RPG::Cache.picture(back)
  85.     @icons = []
  86.     @helps = []
  87.     @names = []
  88.     @numbs = []
  89.     @sprite = Sprite.new
  90.     @sprite.bitmap = Bitmap.new(640,480)
  91.     @sprite.z = 6000
  92.     #这里随便填一个存在的图片名(Tilesets)
  93.     ###########################################
  94.     @help_window = Window_Place.new("Awmp_006")
  95.     ###########################################
  96.     ###########################################
  97.   end
  98.   def add(x,y,icon_name,in_name,name,event_id)
  99.     iconb = PlaceIcon.new(x,y,icon_name)
  100.     @icons.concat([iconb])
  101.     @helps.concat([in_name])
  102.     @names.concat([name])
  103.     @numbs.concat([event_id])
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 主处理
  107.   #--------------------------------------------------------------------------
  108.   def main
  109.     # 生成活动块
  110.     @spriteset = Spriteset_Map.new
  111.     # 生成信息窗口
  112.     @message_window = Window_Message.new
  113.     # 执行过渡
  114.     Graphics.transition
  115.     # 主循环
  116.     loop do
  117.       # 刷新游戏画面
  118.       Graphics.update
  119.       # 刷新输入信息
  120.       Input.update
  121.       # 刷新画面
  122.       update
  123.       # 如果画面切换的话就中断循环
  124.       if $scene != self
  125.         break
  126.       end
  127.     end
  128.     # 准备过渡
  129.     Graphics.freeze
  130.     # 释放活动块
  131.     @spriteset.dispose
  132.     # 释放信息窗口
  133.     @message_window.dispose
  134.     @sprite.dispose
  135.     @help_window.dispose
  136.     # 标题画面切换中的情况下
  137.     if $scene.is_a?(Scene_Title)
  138.       # 淡入淡出画面
  139.       Graphics.transition
  140.       Graphics.freeze
  141.     end
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 刷新画面
  145.   #--------------------------------------------------------------------------
  146.   def update
  147.     # 循环
  148.     loop do
  149.       # 按照地图、实例、主角的顺序刷新
  150.       # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
  151.       #  的机会的重要因素)
  152.       $game_map.update
  153.       $game_system.map_interpreter.update
  154.       $game_player.update
  155.       # 系统 (计时器)、画面刷新
  156.       $game_system.update
  157.       $game_screen.update
  158.       # 如果主角在场所移动中就中断循环
  159.       unless $game_temp.player_transferring
  160.         break
  161.       end
  162.       # 执行场所移动
  163.       transfer_player
  164.       # 处理过渡中的情况下、中断循环
  165.       if $game_temp.transition_processing
  166.         break
  167.       end
  168.     end
  169.     # 刷新活动块
  170.     @spriteset.update
  171.     # 刷新信息窗口
  172.     @message_window.update
  173.     # 游戏结束的情况下
  174.     if $game_temp.gameover
  175.       # 切换的游戏结束画面
  176.       $scene = Scene_Gameover.new
  177.       return
  178.     end
  179.     # 返回标题画面的情况下
  180.     if $game_temp.to_title
  181.       # 切换到标题画面
  182.       $scene = Scene_Title.new
  183.       return
  184.     end
  185.     # 处理过渡中的情况下
  186.     if $game_temp.transition_processing
  187.       # 清除过渡处理中标志
  188.       $game_temp.transition_processing = false
  189.       # 执行过渡
  190.       if $game_temp.transition_name == ""
  191.         Graphics.transition(20)
  192.       else
  193.         Graphics.transition(40, "Graphics/Transitions/" +
  194.           $game_temp.transition_name)
  195.       end
  196.     end
  197.     # 显示信息窗口中的情况下
  198.     if $game_temp.message_window_showing
  199.       return
  200.     end
  201.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  202.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  203.       # 不是在事件执行中或者禁止遇敌中
  204.       unless $game_system.map_interpreter.running? or
  205.              $game_system.encounter_disabled
  206.         # 确定队伍
  207.         n = rand($game_map.encounter_list.size)
  208.         troop_id = $game_map.encounter_list[n]
  209.         # 队伍有效的话
  210.         if $data_troops[troop_id] != nil
  211.           # 设置调用战斗标志
  212.           $game_temp.battle_calling = true
  213.           $game_temp.battle_troop_id = troop_id
  214.           $game_temp.battle_can_escape = true
  215.           $game_temp.battle_can_lose = false
  216.           $game_temp.battle_proc = nil
  217.         end
  218.       end
  219.     end
  220.     # 按下 B 键的情况下
  221.     if Input.trigger?(Input::B)
  222.       # 不是在事件执行中或菜单禁止中
  223.       unless $game_system.map_interpreter.running? or
  224.              $game_system.menu_disabled
  225.         # 设置菜单调用标志以及 SE 演奏
  226.         $game_temp.menu_calling = true
  227.         $game_temp.menu_beep = true
  228.       end
  229.     end
  230.     # 调试模式为 ON 并且按下 F9 键的情况下
  231.     if $DEBUG and Input.press?(Input::F9)
  232.       # 设置调用调试标志
  233.       $game_temp.debug_calling = true
  234.     end
  235.     # 不在主角移动中的情况下
  236.     unless $game_player.moving?
  237.       # 执行各种画面的调用
  238.       if $game_temp.battle_calling
  239.         call_battle
  240.       elsif $game_temp.shop_calling
  241.         call_shop
  242.       elsif $game_temp.name_calling
  243.         call_name
  244.       elsif $game_temp.menu_calling
  245.         call_menu
  246.       elsif $game_temp.save_calling
  247.         call_save
  248.       elsif $game_temp.debug_calling
  249.         call_debug
  250.       end
  251.     end
  252.     ##############################################################
  253.     @sprite.bitmap.blt(0,0,@back_bitmap,@back_bitmap.rect)
  254.     if $game_system.map_interpreter.running?
  255.       return
  256.     end
  257.     one_is_ready = false
  258.     for i in [email protected] - 1
  259.       @icons[i].draw(@sprite)
  260.       if @icons[i].mouse_in?
  261.         @help_window.change_in(@helps[i],@names[i])
  262.         one_is_ready = true
  263.         if Mouse.key_down(Mouse::LBUTTON)
  264.           $game_temp.common_event_id = @numbs[i]
  265.           @help_window.visible = false
  266.           @help_window.update   
  267.           return
  268.         end
  269.       end
  270.     end
  271.     if one_is_ready == true
  272.       @help_window.visible = true
  273.     else
  274.       @help_window.visible = false
  275.     end
  276.     @help_window.update
  277.     ################################################################

  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● 调用战斗
  281.   #--------------------------------------------------------------------------
  282.   def call_battle
  283.     # 清除战斗调用标志
  284.     $game_temp.battle_calling = false
  285.     # 清除菜单调用标志
  286.     $game_temp.menu_calling = false
  287.     $game_temp.menu_beep = false
  288.     # 生成遇敌计数
  289.     $game_player.make_encounter_count
  290.     # 记忆地图 BGM 、停止 BGM
  291.     $game_temp.map_bgm = $game_system.playing_bgm
  292.     $game_system.bgm_stop
  293.     # 演奏战斗开始 SE
  294.     $game_system.se_play($data_system.battle_start_se)
  295.     # 演奏战斗 BGM
  296.     $game_system.bgm_play($game_system.battle_bgm)
  297.     # 矫正主角姿势
  298.     $game_player.straighten
  299.     # 切换到战斗画面
  300.     $scene = Scene_Battle.new
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 调用商店
  304.   #--------------------------------------------------------------------------
  305.   def call_shop
  306.     # 清除商店调用标志
  307.     $game_temp.shop_calling = false
  308.     # 矫正主角姿势
  309.     $game_player.straighten
  310.     # 切换到商店画面
  311.     $scene = Scene_Shop.new
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ● 调用名称输入
  315.   #--------------------------------------------------------------------------
  316.   def call_name
  317.     # 清除调用名称输入标志
  318.     $game_temp.name_calling = false
  319.     # 矫正主角姿势
  320.     $game_player.straighten
  321.     # 切换到名称输入画面
  322.     $scene = Scene_Name.new
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 调用菜单
  326.   #--------------------------------------------------------------------------
  327.   def call_menu
  328.     # 清除菜单调用标志
  329.     $game_temp.menu_calling = false
  330.     # 已经设置了菜单 SE 演奏标志的情况下
  331.     if $game_temp.menu_beep
  332.       # 演奏确定 SE
  333.       $game_system.se_play($data_system.decision_se)
  334.       # 清除菜单演奏 SE 标志
  335.       $game_temp.menu_beep = false
  336.     end
  337.     # 矫正主角姿势
  338.     $game_player.straighten
  339.     # 切换到菜单画面
  340.     $scene = Scene_Menu.new
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 调用存档
  344.   #--------------------------------------------------------------------------
  345.   def call_save
  346.     # 矫正主角姿势
  347.     $game_player.straighten
  348.     # 切换到存档画面
  349.     $scene = Scene_Save.new
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 调用调试
  353.   #--------------------------------------------------------------------------
  354.   def call_debug
  355.     # 清除调用调试标志
  356.     $game_temp.debug_calling = false
  357.     # 演奏确定 SE
  358.     $game_system.se_play($data_system.decision_se)
  359.     # 矫正主角姿势
  360.     $game_player.straighten
  361.     # 切换到调试画面
  362.     $scene = Scene_Debug.new
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 主角的场所移动
  366.   #--------------------------------------------------------------------------
  367.   def transfer_player
  368.     # 清除主角场所移动调试标志
  369.     $game_temp.player_transferring = false
  370.     # 移动目标与现在的地图有差异的情况下
  371.     if $game_map.map_id != $game_temp.player_new_map_id
  372.       # 设置新地图
  373.       $game_map.setup($game_temp.player_new_map_id)
  374.     end
  375.     # 设置主角位置
  376.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
  377.     # 设置主角朝向
  378.     case $game_temp.player_new_direction
  379.     when 2  # 下
  380.       $game_player.turn_down
  381.     when 4  # 左
  382.       $game_player.turn_left
  383.     when 6  # 右
  384.       $game_player.turn_right
  385.     when 8  # 上
  386.       $game_player.turn_up
  387.     end
  388.     # 矫正主角姿势
  389.     $game_player.straighten
  390.     # 刷新地图 (执行并行事件)
  391.     $game_map.update
  392.     # 在生成活动块
  393.     @spriteset.dispose
  394.     @spriteset = Spriteset_Map.new
  395.     # 处理过渡中的情况下
  396.     if $game_temp.transition_processing
  397.       # 清除过渡处理中标志
  398.       $game_temp.transition_processing = false
  399.       # 执行过渡
  400.       Graphics.transition(20)
  401.     end
  402.     # 执行地图设置的 BGM、BGS 的自动切换
  403.     $game_map.autoplay
  404.     # 设置画面
  405.     Graphics.frame_reset
  406.     # 刷新输入信息
  407.     Input.update
  408.   end
  409. end
复制代码

追加定义
  1. class Scene_Map_s
  2.   def just_for
  3.     @icons = []
  4.     @helps = []
  5.     @names = []
  6.     @numbs = []
  7.     if $game_switches[26] == true
  8.       add(70,70,"001-weapon01","Awmp_039","common1",1)
  9.     end
  10.     if $game_switches[27] == true
  11.       add(200,300,"002-weapon02","Awmp_006","common2",2)
  12.     end   
  13.     if $game_switches[28] == true
  14.       add(40,40,"002-weapon02","Awmp_029","common3",3)
  15.     end  
  16.     if $game_switches[29] == true
  17.       add(600,400,"002-weapon02","Awmp_008","common4",4)
  18.     end  
  19.   end
  20.   alias old_update update
  21.   def update
  22.     just_for
  23.     old_update
  24.   end
  25. end
复制代码

因为仅仅是讨论下还有没有什么剩余价值,所以使用方法就略去了吧……


[LINE]1,#dddddd[/LINE]
http://rpg.blue/web/htm/news1214.htm
vip+2

              [本贴由 66RPG发布员 于 2008-12-19 23:13:45 进行了编辑]
作者: 越前リョーマ    时间: 2008-6-28 21:22
看上去十分有爱……
作者: RXVincent    时间: 2008-6-28 21:29
我试过了,真的很有爱
作者: IamI    时间: 2008-6-28 21:30
以下引用RXVincent于2008-6-28 13:29:25的发言:

我试过了,真的很有爱

真的要用起来会让你几乎要崩溃的……
作者: nuitjean    时间: 2010-7-1 16:59
我想問一下...裡面的鼠標若是遊戲中途要關掉有沒有辦法?
(譬如...設個開關控制使用鼠標或默認的)
因為在自製選項裡面就不會滾動了......
作者: IamI    时间: 2010-7-1 17:22
回复 nuitjean 的帖子

= =b您把我多年前的东西翻出来辛苦了……
这整个系统都是建立在鼠标的基础之上的,如果您不需要鼠标的话,这整个系统也没有意义。由于很多年前的东西了,自己也不是很清楚……Orz
作者: 赛露休斯    时间: 2010-7-6 21:29
那张地图看上去似乎是官方范例A Story里的吧




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1