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

Project1

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

垃圾的烛光

 关闭 [复制链接]

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

跳转到指定楼层
1
发表于 2008-6-12 04:22:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
烛光
不过有效果的只有角色
问题就在于事件的screen_x(y)坐标是不变的(至少通过screen_x(y)获得的不会变)
  1. $角色开灯的开光 = 1
  2. #==============================================================================
  3. # ■ Game_Player
  4. #------------------------------------------------------------------------------
  5. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  6. # 本类的实例请参考 $game_player。
  7. #==============================================================================

  8. class Game_Player < Game_Character
  9.   #--------------------------------------------------------------------------
  10.   # ● 常量
  11.   #--------------------------------------------------------------------------
  12.   CENTER_X = (544 / 2 - 16) * 8     # 画面中央 X 座标 * 8
  13.   CENTER_Y = (416 / 2 - 16) * 8     # 画面中央 Y 座标 * 8
  14.   #--------------------------------------------------------------------------
  15.   # ● 定义实例变量
  16.   #--------------------------------------------------------------------------
  17.   attr_reader   :vehicle_type       # 目前乘坐交通工具类型
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化对像
  20.   #--------------------------------------------------------------------------
  21.   def initialize
  22.     super
  23.     @vehicle_type = -1
  24.     @vehicle_getting_on = false     # 乘坐交通工具标志
  25.     @vehicle_getting_off = false    # 离开交通工具标志
  26.     @transferring = false           # 场所移动标志
  27.     @new_map_id = 0                 # 目标地图 ID
  28.     @new_x = 0                      # 目标 X 座标
  29.     @new_y = 0                      # 目标 Y 座标
  30.     @new_direction = 0              # 移动後方向
  31.     @walking_bgm = nil              # 记忆用行走时 BGM
  32. #   @light = Sprite.new             #烛光
  33. #   @light.bitmap = Cache.picture("light.png") #烛光
  34. #   @light.opacity = 0              #烛光
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 判断是否停止
  38.   #--------------------------------------------------------------------------
  39.   def stopping?
  40.     return false if @vehicle_getting_on
  41.     return false if @vehicle_getting_off
  42.     return super
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 场所移动准备
  46.   #     map_id    : 地图 ID
  47.   #     x         : X 座标
  48.   #     y         : Y 座标
  49.   #     direction : 移动後面向
  50.   #--------------------------------------------------------------------------
  51.   def reserve_transfer(map_id, x, y, direction)
  52.     @transferring = true
  53.     @new_map_id = map_id
  54.     @new_x = x
  55.     @new_y = y
  56.     @new_direction = direction
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 判断是否准备场所移动
  60.   #--------------------------------------------------------------------------
  61.   def transfer?
  62.     return @transferring
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 执行场所移动
  66.   #--------------------------------------------------------------------------
  67.   def perform_transfer
  68.     return unless @transferring
  69.     @transferring = false
  70.     set_direction(@new_direction)
  71.     if $game_map.map_id != @new_map_id
  72.       $game_map.setup(@new_map_id)     # 移动到另一地图
  73.     end
  74.     moveto(@new_x, @new_y)
  75.     @walking_bgm = $game_map.map.bgm
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 判断地图是否可以通行
  79.   #     x:X 座标
  80.   #     y:Y 座标
  81.   #--------------------------------------------------------------------------
  82.   def map_passable?(x, y)
  83.     case @vehicle_type
  84.     when 0  # 小型船
  85.       return $game_map.boat_passable?(x, y)
  86.     when 1  # 大型船
  87.       return $game_map.ship_passable?(x, y)
  88.     when 2  # 飞船
  89.       return true
  90.     else    # 行走
  91.       return $game_map.passable?(x, y)
  92.     end
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 判断行走通行度
  96.   #     x:X 座标
  97.   #     y:Y 座标
  98.   #--------------------------------------------------------------------------
  99.   def can_walk?(x, y)
  100.     last_vehicle_type = @vehicle_type   # 移除交通工具类型
  101.     @vehicle_type = -1                  # 暂时设置为行走
  102.     result = passable?(x, y)            # 判断是否可以通行
  103.     @vehicle_type = last_vehicle_type   # 回复交通工具类型
  104.     return result
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 判断飞船降落通行度
  108.   #     x:X 座标
  109.   #     y:Y 座标
  110.   #--------------------------------------------------------------------------
  111.   def airship_land_ok?(x, y)
  112.     unless $game_map.airship_land_ok?(x, y)
  113.       return false    # 指定地图图块无法降落
  114.     end
  115.     unless $game_map.events_xy(x, y).empty?
  116.       return false    # 不可降落于事件之上
  117.     end
  118.     return true       # 可以降落
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 判断是否在交通工具上
  122.   #--------------------------------------------------------------------------
  123.   def in_vehicle?
  124.     return @vehicle_type >= 0
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 判断是否在飞船之上
  128.   #--------------------------------------------------------------------------
  129.   def in_airship?
  130.     return @vehicle_type == 2
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 判断是否奔跑中
  134.   #--------------------------------------------------------------------------
  135.   def dash?
  136.     return false if @move_route_forcing
  137.     return false if $game_map.disable_dash?
  138.     return false if in_vehicle?
  139.     return Input.press?(Input::A)
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 判断是否是游戏测试通行状态
  143.   #--------------------------------------------------------------------------
  144.   def debug_through?
  145.     return false unless $TEST
  146.     return Input.press?(Input::CTRL)
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 设置地图画面座标为画面中央
  150.   #     x:X 座标
  151.   #     y:Y 座标
  152.   #--------------------------------------------------------------------------
  153.   def center(x, y)
  154.     display_x = x * 256 - CENTER_X                    # 计算座标
  155.     unless $game_map.loop_horizontal?                 # 非横向回圈的场合
  156.       max_x = ($game_map.width - 17) * 256            # 计算最大值
  157.       display_x = [0, [display_x, max_x].min].max     # 校正座标
  158.     end
  159.     display_y = y * 256 - CENTER_Y                    # 计算座标
  160.     unless $game_map.loop_vertical?                   # 非横向回圈的场合
  161.       max_y = ($game_map.height - 13) * 256           # 计算最大值
  162.       display_y = [0, [display_y, max_y].min].max     # 校正座标
  163.     end
  164.     $game_map.set_display_pos(display_x, display_y)   # 改变地图位置
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 移动至指定位置
  168.   #     x:X 座标
  169.   #     y:Y 座标
  170.   #--------------------------------------------------------------------------
  171.   def moveto(x, y)
  172.     super
  173.     center(x, y)                                      # 居中对齐
  174.     make_encounter_count                              # 初始化遇敌
  175.     if in_vehicle?                                    # 在交通工具中的场合
  176.       vehicle = $game_map.vehicles[@vehicle_type]     # 获取交通工具
  177.       vehicle.refresh                                 # 刷新交通工具
  178.     end
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 增加步数
  182.   #--------------------------------------------------------------------------
  183.   def increase_steps
  184.     super
  185.     return if @move_route_forcing
  186.     return if in_vehicle?
  187.     $game_party.increase_steps
  188.     $game_party.on_player_walk
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 设置遇敌计数
  192.   #--------------------------------------------------------------------------
  193.   def encounter_count
  194.     return @encounter_count
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 初始化遇敌计数
  198.   #--------------------------------------------------------------------------
  199.   def make_encounter_count
  200.     if $game_map.map_id != 0
  201.       n = $game_map.encounter_step
  202.       @encounter_count = rand(n) + rand(n) + 1  # 好比掷两个骰子
  203.     end
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 判断是否在地图区域中
  207.   #     area : 区域数据(RPG::Area)
  208.   #--------------------------------------------------------------------------
  209.   def in_area?(area)
  210.     return false if area == nil
  211.     return false if $game_map.map_id != area.map_id
  212.     return false if @x < area.rect.x
  213.     return false if @y < area.rect.y
  214.     return false if @x >= area.rect.x + area.rect.width
  215.     return false if @y >= area.rect.y + area.rect.height
  216.     return true
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 生成遇敌队伍
  220.   #--------------------------------------------------------------------------
  221.   def make_encounter_troop_id
  222.     encounter_list = $game_map.encounter_list.clone
  223.     for area in $data_areas.values
  224.       encounter_list += area.encounter_list if in_area?(area)
  225.     end
  226.     if encounter_list.empty?
  227.       make_encounter_count
  228.       return 0
  229.     end
  230.     return encounter_list[rand(encounter_list.size)]
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 刷新
  234.   #--------------------------------------------------------------------------
  235.   def refresh
  236.     if $game_party.members.size == 0
  237.       @character_name = ""
  238.       @character_index = 0
  239.     else
  240.       actor = $game_party.members[0]   # 获取队伍第一人
  241.       @character_name = actor.character_name
  242.       @character_index = actor.character_index
  243.     end
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ● 判断同位置事件是否被触发
  247.   #     triggers : 触发数组
  248.   #--------------------------------------------------------------------------
  249.   def check_event_trigger_here(triggers)
  250.     return false if $game_map.interpreter.running?
  251.     result = false
  252.     for event in $game_map.events_xy(@x, @y)
  253.       if triggers.include?(event.trigger) and event.priority_type != 1
  254.         event.start
  255.         result = true if event.starting
  256.       end
  257.     end
  258.     return result
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 确认前方事件是否被触发
  262.   #     triggers : 触发数组
  263.   #--------------------------------------------------------------------------
  264.   def check_event_trigger_there(triggers)
  265.     return false if $game_map.interpreter.running?
  266.     result = false
  267.     front_x = $game_map.x_with_direction(@x, @direction)
  268.     front_y = $game_map.y_with_direction(@y, @direction)
  269.     for event in $game_map.events_xy(front_x, front_y)
  270.       if triggers.include?(event.trigger) and event.priority_type == 1
  271.         event.start
  272.         result = true
  273.       end
  274.     end
  275.     if result == false and $game_map.counter?(front_x, front_y)
  276.       front_x = $game_map.x_with_direction(front_x, @direction)
  277.       front_y = $game_map.y_with_direction(front_y, @direction)
  278.       for event in $game_map.events_xy(front_x, front_y)
  279.         if triggers.include?(event.trigger) and event.priority_type == 1
  280.           event.start
  281.           result = true
  282.         end
  283.       end
  284.     end
  285.     return result
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ● 判断接触事件是否被触发
  289.   #     x:X 座标
  290.   #     y:Y 座标
  291.   #--------------------------------------------------------------------------
  292.     def check_event_trigger_touch(x, y)
  293.     x -=  $game_map.width if $game_map.loop_horizontal? and x == $game_map.width
  294.     y -=  $game_map.height if $game_map.loop_vertical? and y == $game_map.height
  295.     return false if $game_map.interpreter.running?
  296.     result = false
  297.     for event in $game_map.events_xy(x, y)
  298.       if [1,2].include?(event.trigger) and event.priority_type == 1
  299.         event.start
  300.         result = true
  301.       end
  302.     end
  303.     return result
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 方向键移动处理
  307.   #--------------------------------------------------------------------------
  308.   def move_by_input
  309.     return unless movable?
  310.     return if $game_map.interpreter.running?
  311.     case Input.dir4
  312.     when 2;  move_down
  313.     when 4;  move_left
  314.     when 6;  move_right
  315.     when 8;  move_up
  316.     end
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 可以行动判定
  320.   #--------------------------------------------------------------------------
  321.   def movable?
  322.     return false if moving?                     # 正在移动
  323.     return false if @move_route_forcing         # 强制移动路线
  324.     return false if @vehicle_getting_on         # 正在乘上交通工具
  325.     return false if @vehicle_getting_off        # 正在乘上交通工具
  326.     return false if $game_message.visible       # 正在显示讯息
  327.     return false if in_airship? and not $game_map.airship.movable?
  328.     return true
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 更新画面
  332.   #--------------------------------------------------------------------------
  333.   def update
  334.     last_real_x = @real_x
  335.     last_real_y = @real_y
  336.     last_moving = moving?
  337.     move_by_input
  338.     super
  339.     update_scroll(last_real_x, last_real_y)
  340.     update_vehicle
  341.     update_nonmoving(last_moving)
  342.     if $game_switches[$角色开灯的开光]
  343. #      @light.opacity = 255 if @light.opacity == 0
  344.       if ((@oldx != screen_x) or (@oldy != screen_y)) or $evmove
  345.         $evmove = false
  346.         @oldx = screen_x#@x* 32
  347.         @oldy = screen_y#@y* 32
  348.    #     if (@oldx - (2*32) <= 0) or (@oldy - (2*32) <= 0)
  349.     #      $scene.light(@oldx,@oldy,160,160)
  350.       #    @light.x = @oldx - (2*32)
  351.       #    @light.y = 0#@oldy
  352.     #    else
  353.           $scene.light(@oldx-(2*32),@oldy-(3*32),160,160)
  354.       #    @light.x = @oldx-(2*32)
  355.       #    @light.y = @oldy-(2*32)
  356.         #p @light.y
  357.      #   end
  358.       end
  359.     else
  360.       $scene.light if @oldx!=0
  361.       @oldx = 0 if @oldx!=0
  362.       @oldy = 0 if @oldy!=0
  363.       #@light.opacity = 0 if @light.opacity == 255
  364.       
  365.     end
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● 更新滚动
  369.   #--------------------------------------------------------------------------
  370.   def update_scroll(last_real_x, last_real_y)
  371.     ax1 = $game_map.adjust_x(last_real_x)
  372.     ay1 = $game_map.adjust_y(last_real_y)
  373.     ax2 = $game_map.adjust_x(@real_x)
  374.     ay2 = $game_map.adjust_y(@real_y)
  375.     if ay2 > ay1 and ay2 > CENTER_Y
  376.       $game_map.scroll_down(ay2 - ay1)
  377.     end
  378.     if ax2 < ax1 and ax2 < CENTER_X
  379.       $game_map.scroll_left(ax1 - ax2)
  380.     end
  381.     if ax2 > ax1 and ax2 > CENTER_X
  382.       $game_map.scroll_right(ax2 - ax1)
  383.     end
  384.     if ay2 < ay1 and ay2 < CENTER_Y
  385.       $game_map.scroll_up(ay1 - ay2)
  386.     end
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 更新交通工具
  390.   #--------------------------------------------------------------------------
  391.   def update_vehicle
  392.     return unless in_vehicle?
  393.     vehicle = $game_map.vehicles[@vehicle_type]
  394.     if @vehicle_getting_on                    # 正在乘上?
  395.       if not moving?
  396.         @direction = vehicle.direction        # 更改方向
  397.         @move_speed = vehicle.speed           # 更改移动速度
  398.         @vehicle_getting_on = false           # 结束乘上操作
  399.         @transparent = true                   # 透明状态
  400.       end
  401.     elsif @vehicle_getting_off                # 正在离开?
  402.       if not moving? and vehicle.altitude == 0
  403.         @vehicle_getting_off = false          # 结束乘上操作
  404.         @vehicle_type = -1                    # 清除交通工具类型
  405.         @transparent = false                  # 移除透明状态
  406.       end
  407.     else                                      # 正在交通工具之上
  408.       vehicle.sync_with_player                # 与角色同步移动
  409.     end
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ● 非移动中更新
  413.   #     last_moving : 之前是否正在移动
  414.   #--------------------------------------------------------------------------
  415.   def update_nonmoving(last_moving)
  416.     return if $game_map.interpreter.running?
  417.     return if moving?
  418.     return if check_touch_event if last_moving
  419.     if not $game_message.visible and Input.trigger?(Input::C)
  420.       return if get_on_off_vehicle
  421.       return if check_action_event
  422.     end
  423.     update_encounter if last_moving
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 更新遇敌
  427.   #--------------------------------------------------------------------------
  428.   def update_encounter
  429.     return if $TEST and Input.press?(Input::CTRL)   # 测试游戏中
  430.     return if in_vehicle?                           # 乘坐交通工具中
  431.     if $game_map.bush?(@x, @y)                      # 在草木繁茂处
  432.       @encounter_count -= 2                         # 将遇敌计数减2
  433.     else                                            # 否则
  434.       @encounter_count -= 1                         # 将遇敌计数减1
  435.     end
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 判断事件是否由接触触发(重叠)
  439.   #--------------------------------------------------------------------------
  440.   def check_touch_event
  441.     return false if in_airship?
  442.     return check_event_trigger_here([1,2])
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ● 判断事件是否由确认键触发
  446.   #--------------------------------------------------------------------------
  447.   def check_action_event
  448.     return false if in_airship?
  449.     return true if check_event_trigger_here([0])
  450.     return check_event_trigger_there([0,1,2])
  451.   end
  452.   #--------------------------------------------------------------------------
  453.   # ● 上下交通工具
  454.   #--------------------------------------------------------------------------
  455.   def get_on_off_vehicle
  456.     return false unless movable?
  457.     if in_vehicle?
  458.       return get_off_vehicle
  459.     else
  460.       return get_on_vehicle
  461.     end
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● 乘上交通工具
  465.   #    以角色非在交通工具之上为前提
  466.   #--------------------------------------------------------------------------
  467.   def get_on_vehicle
  468.     front_x = $game_map.x_with_direction(@x, @direction)
  469.     front_y = $game_map.y_with_direction(@y, @direction)
  470.     if $game_map.airship.pos?(@x, @y)       # 判断角色是否与飞船重叠
  471.       get_on_airship
  472.       return true
  473.     elsif $game_map.ship.pos?(front_x, front_y)   # 判断前方是否有大型船
  474.       get_on_ship
  475.       return true
  476.     elsif $game_map.boat.pos?(front_x, front_y)   # 判断前方是否有小型船
  477.       get_on_boat
  478.       return true
  479.     end
  480.     return false
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● 乘上小型船
  484.   #--------------------------------------------------------------------------
  485.   def get_on_boat
  486.     @vehicle_getting_on = true        # 乘上交通工具标志
  487.     @vehicle_type = 0                 # 设置交通工具类型
  488.     force_move_forward                # 向前一步
  489.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  490.     $game_map.boat.get_on             # 上船处理
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ● 乘上大型船
  494.   #--------------------------------------------------------------------------
  495.   def get_on_ship
  496.     @vehicle_getting_on = true        # 乘上交通工具标志
  497.     @vehicle_type = 1                 # 设置交通工具类型
  498.     force_move_forward                # 向前一步
  499.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  500.     $game_map.ship.get_on             # 上船处理
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ● 乘上飞船
  504.   #--------------------------------------------------------------------------
  505.   def get_on_airship
  506.     @vehicle_getting_on = true        # 乘上交通工具标志
  507.     @vehicle_type = 2                 # 设置交通工具类型
  508.     @through = true                   # 允许穿透
  509.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  510.     $game_map.airship.get_on          # 上船处理
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● 离开交通工具
  514.   #    以角色在交通工具之上为前提
  515.   #--------------------------------------------------------------------------
  516.   def get_off_vehicle
  517.     if in_airship?                                # 在飞船之上
  518.       return unless airship_land_ok?(@x, @y)      # 判断是否能降落
  519.     else                                          # 在大/小型船上
  520.       front_x = $game_map.x_with_direction(@x, @direction)
  521.       front_y = $game_map.y_with_direction(@y, @direction)
  522.       return unless can_walk?(front_x, front_y)   # 判断是否能下船
  523.     end
  524.     $game_map.vehicles[@vehicle_type].get_off     # 下船处理
  525.     if in_airship?                                # 飞船
  526.       @direction = 2                              # 面向下
  527.     else                                          # 大/小型船
  528.       force_move_forward                          # 向前一步
  529.       @transparent = false                        # 移除透明状态
  530.     end
  531.     @vehicle_getting_off = true                   # 开始下船处理
  532.     @move_speed = 4                               # 回复移动速度
  533.     @through = false                              # 不允许穿透
  534.     @walking_bgm.play                             # 回复行走 BGM
  535.     make_encounter_count                          # 初始化遇敌
  536.   end
  537.   #--------------------------------------------------------------------------
  538.   # ● 强迫向前一步
  539.   #--------------------------------------------------------------------------
  540.   def force_move_forward
  541.     @through = true         # 允许穿透
  542.     move_forward            # 向前一步
  543.     @through = false        # 不允许穿透
  544.   end
  545. end

  546. #==============================================================================
  547. # ■ Scene_Map
  548. #------------------------------------------------------------------------------
  549. #  处理地图画面的类。
  550. #==============================================================================

  551. class Scene_Map < Scene_Base
  552.   #--------------------------------------------------------------------------
  553.   # ● 开始处理
  554.   #--------------------------------------------------------------------------
  555.   def start
  556.     super
  557.     $game_map.refresh
  558.     @spriteset = Spriteset_Map.new
  559.     @message_window = Window_Message.new
  560.     @black = Sprite.new
  561.     #~@rect = {}
  562.   end
  563.   ######
  564.   #视野判定
  565.   ######
  566.   def in_view?(ev)
  567.     add_x = $game_player.x
  568.     add_y = $game_player.y
  569.     begin_x = $game_map.display_x - add_x
  570.     begin_y = $game_map.display_y - add_y
  571.     end_x = $game_map.display_x + 4352 + add_x
  572.     end_y = $game_map.display_y + 3328 + add_y
  573.     limit_x = $game_map.width * 256 - 256 + add_x
  574.     limit_y = $game_map.height * 256 - 256 + add_y
  575.     char_x = ev.real_x
  576.     char_y = ev.real_y
  577.     if end_x <= limit_x
  578.       return false if char_x < begin_x or char_x > end_x
  579.     end
  580.     if end_y <= limit_y
  581.       return false if char_y < begin_y or char_y > end_y
  582.     end
  583.     if end_x > limit_x and end_y > limit_y
  584.       return false if char_x < begin_x and char_x > end_x - limit_x
  585.       return false if char_y < begin_y and char_y > end_y - limit_y
  586.     end
  587.     return true
  588.   end
  589.   
  590.   #--------------------------------------------------------------------------
  591.   # ● 执行渐变
  592.   #--------------------------------------------------------------------------
  593.   def perform_transition
  594.     if Graphics.brightness == 0       # 战斗後或载入後等
  595.       fadein(30)
  596.     else                              # 从菜单中回来等
  597.       Graphics.transition(15)
  598.     end
  599.   end
  600.   
  601.   def light(x=0,y=0,h=0,w=0)
  602.     if ($game_switches[$角色开灯的开光] == false)# and (@black.bitmap != nil)
  603.       if @black.bitmap != nil
  604.         @black.bitmap.dispose
  605.         @black.bitmap = nil
  606.       end
  607.       
  608.       return
  609.     end
  610.     #if @black.bitmap == nil
  611.       @black.bitmap=Bitmap.new(544,416)
  612.       @black.bitmap.fill_rect(Rect.new(0,0,544,416), Color.new(0,0,0))
  613.     #end
  614.     @black.bitmap.clear_rect(Rect.new(x,y,h,w))
  615. #    for i in @rect
  616. #      @black.bitmap.clear_rect(Rect.new(i.x,i.y,i.height,i.width))
  617. #    end
  618.   end
  619. #~   def light1(x=0,y=0,h=0,w=0,id)
  620. #~     @rect[id] = (Rect.new(x,y,h,w))
  621. #~     for i in @rect
  622. #~       @black.bitmap.clear_rect(Rect.new(i.x,i.y,i.height,i.width))
  623. #~     end
  624. #~   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 结束处理
  627.   #--------------------------------------------------------------------------
  628.   def terminate
  629.     super
  630.     if $scene.is_a?(Scene_Battle)     # 切换至战斗场景的场合
  631.       @spriteset.dispose_characters   # 隐藏角色来生成战斗背景
  632.     end
  633.     snapshot_for_background
  634.     @spriteset.dispose
  635.     @message_window.dispose
  636.     if $scene.is_a?(Scene_Battle)     # 切换至战斗场景的场合
  637.       perform_battle_transition       # 执行战斗渐变
  638.     end
  639.   end
  640.   #--------------------------------------------------------------------------
  641.   # ● 基本更新处理
  642.   #--------------------------------------------------------------------------
  643.   def update_basic
  644.     Graphics.update                   # 更新游戏画面
  645.     Input.update                      # 更新输入信息
  646.     $game_map.update                  # 更新地图
  647.     @spriteset.update                 # 更新活动块组
  648.   end
  649.   #--------------------------------------------------------------------------
  650.   # ● 更新画面
  651.   #--------------------------------------------------------------------------
  652.   def update
  653.     super
  654.     $game_map.interpreter.update      # 更新解释器
  655.     $game_map.update                  # 更新地图
  656.     $game_player.update               # 更新主角
  657.     $game_system.update               # 更新计时器
  658.     @spriteset.update                 # 更新活动块组
  659.     @message_window.update            # 更新信息窗口
  660.     unless $game_message.visible      # 信息窗口显示中除外
  661.       update_transfer_player
  662.       update_encounter
  663.       update_call_menu
  664.       update_call_debug
  665.       update_scene_change
  666.     end
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ● 淡入画面
  670.   #     duration : 时间
  671.   #    如果直接使用 Graphics.fadeout 的话会出现一些状况,如天候效果和远景
  672.   #    滚动都会被强迫停止,所以用动态的 fade-in 效果会好些。
  673.   #--------------------------------------------------------------------------
  674.   def fadein(duration)
  675.     Graphics.transition(0)
  676.     for i in 0..duration-1
  677.       Graphics.brightness = 255 * i / duration
  678.       update_basic
  679.     end
  680.     Graphics.brightness = 255
  681.   end
  682.   #--------------------------------------------------------------------------
  683.   # ● 淡出画面
  684.   #     duration : 时间
  685.   #    与上面的 fadein 一样,不是直接调用 Graphics.fadein。
  686.   #--------------------------------------------------------------------------
  687.   def fadeout(duration)
  688.     Graphics.transition(0)
  689.     for i in 0..duration-1
  690.       Graphics.brightness = 255 - 255 * i / duration
  691.       update_basic
  692.     end
  693.     Graphics.brightness = 0
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● 场所移动处理
  697.   #--------------------------------------------------------------------------
  698.   def update_transfer_player
  699.     return unless $game_player.transfer?
  700.     fade = (Graphics.brightness > 0)
  701.     fadeout(30) if fade
  702.     @spriteset.dispose              # 释放活动块组
  703.     $game_player.perform_transfer   # 执行场所移动
  704.     $game_map.autoplay              # 自动更改 BGM 和 BGS
  705.     $game_map.update
  706.     Graphics.wait(15)
  707.     @spriteset = Spriteset_Map.new  # 重新生成活动块组
  708.     fadein(30) if fade
  709.     Input.update
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ● 遇敌处理
  713.   #--------------------------------------------------------------------------
  714.   def update_encounter
  715.     return if $game_player.encounter_count > 0        # 检查步数
  716.     return if $game_map.interpreter.running?          # 判断是否有事件正在执行
  717.     return if $game_system.encounter_disabled         # 判断是否禁止遇敌
  718.     troop_id = $game_player.make_encounter_troop_id   # 判断敌人队伍
  719.     return if $data_troops[troop_id] == nil           # 判断队伍是否无效
  720.     $game_troop.setup(troop_id)
  721.     $game_troop.can_escape = true
  722.     $game_temp.battle_proc = nil
  723.     $game_temp.next_scene = "battle"
  724.     preemptive_or_surprise
  725.   end
  726.   #--------------------------------------------------------------------------
  727.   # ● 判断先下手或被偷袭
  728.   #--------------------------------------------------------------------------
  729.   def preemptive_or_surprise
  730.     actors_agi = $game_party.average_agi
  731.     enemies_agi = $game_troop.average_agi
  732.     if actors_agi >= enemies_agi
  733.       percent_preemptive = 5
  734.       percent_surprise = 3
  735.     else
  736.       percent_preemptive = 3
  737.       percent_surprise = 5
  738.     end
  739.     if rand(100) < percent_preemptive
  740.       $game_troop.preemptive = true
  741.     elsif rand(100) < percent_surprise
  742.       $game_troop.surprise = true
  743.     end
  744.   end
  745.   #--------------------------------------------------------------------------
  746.   # ● 判断是否呼叫菜单(按下B键)
  747.   #--------------------------------------------------------------------------
  748.   def update_call_menu
  749.     if Input.trigger?(Input::B)
  750.       return if $game_map.interpreter.running?        # 判断是否有事件正在执行
  751.       return if $game_system.menu_disabled            # 判断是否禁止菜单呼叫
  752.       $game_temp.menu_beep = true                     # 设置音效标志
  753.       $game_temp.next_scene = "menu"
  754.     end
  755.   end
  756.   #--------------------------------------------------------------------------
  757.   # ● 判断是否呼叫DEBUG场景(按下F9键)
  758.   #--------------------------------------------------------------------------
  759.   def update_call_debug
  760.     if $TEST and Input.press?(Input::F9)    # 游戏测试并按下F9
  761.       $game_temp.next_scene = "debug"
  762.     end
  763.   end
  764.   #--------------------------------------------------------------------------
  765.   # ● 执行场景交替
  766.   #--------------------------------------------------------------------------
  767.   def update_scene_change
  768.     return if $game_player.moving?    # 判断主角是否移动中
  769.     case $game_temp.next_scene
  770.     when "battle"
  771.       call_battle
  772.     when "shop"
  773.       call_shop
  774.     when "name"
  775.       call_name
  776.     when "menu"
  777.       call_menu
  778.     when "save"
  779.       call_save
  780.     when "debug"
  781.       call_debug
  782.     when "gameover"
  783.       call_gameover
  784.     when "title"
  785.       call_title
  786.     else
  787.       $game_temp.next_scene = nil
  788.     end
  789.   end
  790.   #--------------------------------------------------------------------------
  791.   # ● 切换至战斗画面
  792.   #--------------------------------------------------------------------------
  793.   def call_battle
  794.     @spriteset.update
  795.     Graphics.update
  796.     $game_player.make_encounter_count
  797.     $game_player.straighten
  798.     $game_temp.map_bgm = RPG::BGM.last
  799.     $game_temp.map_bgs = RPG::BGS.last
  800.     RPG::BGM.stop
  801.     RPG::BGS.stop
  802.     Sound.play_battle_start
  803.     $game_system.battle_bgm.play
  804.     $game_temp.next_scene = nil
  805.     $scene = Scene_Battle.new
  806.   end
  807.   #--------------------------------------------------------------------------
  808.   # ● 切换至商店画面
  809.   #--------------------------------------------------------------------------
  810.   def call_shop
  811.     $game_temp.next_scene = nil
  812.     $scene = Scene_Shop.new
  813.   end
  814.   #--------------------------------------------------------------------------
  815.   # ● 切换至名称输入画面
  816.   #--------------------------------------------------------------------------
  817.   def call_name
  818.     $game_temp.next_scene = nil
  819.     $scene = Scene_Name.new
  820.   end
  821.   #--------------------------------------------------------------------------
  822.   # ● 切换至菜单画面
  823.   #--------------------------------------------------------------------------
  824.   def call_menu
  825.     if $game_temp.menu_beep
  826.       Sound.play_decision
  827.       $game_temp.menu_beep = false
  828.     end
  829.     $game_temp.next_scene = nil
  830.     $scene = Scene_Menu.new
  831.   end
  832.   #--------------------------------------------------------------------------
  833.   # ● 切换至存档画面
  834.   #--------------------------------------------------------------------------
  835.   def call_save
  836.     $game_temp.next_scene = nil
  837.     $scene = Scene_File.new(true, false, true)
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ● 切换至DEBUG画面
  841.   #--------------------------------------------------------------------------
  842.   def call_debug
  843.     Sound.play_decision
  844.     $game_temp.next_scene = nil
  845.     $scene = Scene_Debug.new
  846.   end
  847.   #--------------------------------------------------------------------------
  848.   # ● 切换至游戏结束画面
  849.   #--------------------------------------------------------------------------
  850.   def call_gameover
  851.     $game_temp.next_scene = nil
  852.     $scene = Scene_Gameover.new
  853.   end
  854.   #--------------------------------------------------------------------------
  855.   # ● 切换至标题画面
  856.   #--------------------------------------------------------------------------
  857.   def call_title
  858.     $game_temp.next_scene = nil
  859.     $scene = Scene_Title.new
  860.     fadeout(60)
  861.   end
  862.   #--------------------------------------------------------------------------
  863.   # ● 执行战斗渐变
  864.   #--------------------------------------------------------------------------
  865.   def perform_battle_transition
  866.     Graphics.transition(80, "Graphics/System/BattleStart", 80)
  867.     Graphics.freeze
  868.   end
  869. end
复制代码
哎呀,蛋疼什么的最有爱了

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

4
发表于 2008-6-12 07:47:18 | 只看该作者
我也做了一個
screen_x(y)返回的座標沒問題

http://rpg.blue/viewthread.php?tid=89801
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

風来の調

梦石
0
星屑
50
在线时间
2 小时
注册时间
2008-5-23
帖子
1546
3
发表于 2008-6-12 06:00:24 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

attack·死亡契约

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-6-8
帖子
116
2
发表于 2008-6-12 05:38:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 16:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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