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

Project1

 找回密码
 注册会员
搜索

设计好了10个战斗点 只能出9个战斗不知道原因

查看数: 1312 | 评论数: 1 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-4-3 14:37

正文摘要:

RUBY 代码复制#==============================================================================# ■ EFS#--------------------------------------------------------------------------- ...

回复

金芒芒 发表于 2017-4-3 14:40:06
  1. #==============================================================================
  2. # ■ Game_Character (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理角色的类。本类作为 Game_Player 类与 Game_Event
  5. # 类的超级类使用。
  6. #==============================================================================

  7. class Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :id                       # ID
  12.   attr_reader   :x                        # 地图 X 坐标 (理论坐标)
  13.   attr_reader   :y                        # 地图 Y 坐标 (理论坐标)
  14.   attr_reader   :real_x                   # 地图 X 坐标 (实际坐标 * 128)
  15.   attr_reader   :real_y                   # 地图 Y 坐标 (实际坐标 * 128)
  16.   attr_reader   :tile_id                  # 元件 ID  (0 为无效)
  17.   attr_accessor :character_name           # 角色 文件名
  18.   attr_reader   :character_hue            # 角色 色相
  19.   attr_accessor :opacity                  # 不透明度
  20.   attr_reader   :blend_type               # 合成方式
  21.   attr_reader   :direction                # 朝向
  22.   attr_reader   :pattern                  # 图案
  23.   attr_reader   :move_route_forcing       # 移动路线强制标志
  24.   attr_accessor :through                  # 穿透
  25.   attr_accessor :animation_id             # 动画 ID
  26.   attr_accessor :transparent              # 透明状态
  27.   attr_accessor :walk_anime               # 移动时动画
  28.   attr_accessor :step_anime               # 停止时动画
  29.   attr_accessor :anime_count
  30.   attr_accessor :pattern
  31.   attr_accessor :direction_fix
  32.   attr_accessor :attack_action
  33.   attr_accessor :anime_count
  34.   attr_accessor :atk_fr
  35.   attr_accessor :move_speed
  36.   #--------------------------------------------------------------------------
  37.   # ● 初始化对像
  38.   #--------------------------------------------------------------------------
  39.   def initialize
  40.     @id = 0
  41.     @x = 0
  42.     @y = 0
  43.     @real_x = 0
  44.     @real_y = 0
  45.     @tile_id = 0
  46.     @character_name = ""
  47.     @character_hue = 0
  48.     @opacity = 255
  49.     @blend_type = 0
  50.     @direction = 2
  51.     @pattern = 0
  52.     @move_route_forcing = false
  53.     @through = false
  54.     @animation_id = 0
  55.     @transparent = false
  56.     @original_direction = 2
  57.     @original_pattern = 0
  58.     @move_type = 0
  59.     @move_speed = 4
  60.     @move_frequency = 6
  61.     @move_route = nil
  62.     @move_route_index = 0
  63.     @original_move_route = nil
  64.     @original_move_route_index = 0
  65.     @walk_anime = true
  66.     @step_anime = false
  67.     @direction_fix = false
  68.     @always_on_top = false
  69.     @anime_count = 0
  70.     @stop_count = 0
  71.     @jump_count = 0
  72.     @jump_peak = 0
  73.     @wait_count = 0
  74.     @locked = false
  75.     @prelock_direction = 0
  76.     @attack_action = false
  77.     @counter = 0
  78.     @counter_for_animation = 0
  79.     @counter_for_die_animation = 0
  80.     @switchA = false
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 移动中判定
  84.   #--------------------------------------------------------------------------
  85.   def moving?
  86.     # 如果在移动中理论坐标与实际坐标不同
  87.     return (@real_x != @x * 128 or @real_y != @y * 128)
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 跳跃中判定
  91.   #--------------------------------------------------------------------------
  92.   def jumping?
  93.     # 如果跳跃中跳跃点数比 0 大
  94.     return @jump_count > 0
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 矫正姿势
  98.   #--------------------------------------------------------------------------
  99.   def straighten
  100.     # 移动时动画以及停止动画为 ON 的情况下
  101.     if @walk_anime or @step_anime
  102.       # 设置图形为 0
  103.       @pattern = 0
  104.     end
  105.     # 清除动画计数
  106.     @anime_count = 0
  107.     # 清除被锁定的向前朝向
  108.     @prelock_direction = 0
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 强制移动路线
  112.   #     move_route : 新的移动路线
  113.   #--------------------------------------------------------------------------
  114.   def force_move_route(move_route)
  115.     # 保存原来的移动路线
  116.     if @original_move_route == nil
  117.       @original_move_route = @move_route
  118.       @original_move_route_index = @move_route_index
  119.     end
  120.     # 更改移动路线
  121.     @move_route = move_route
  122.     @move_route_index = 0
  123.     # 设置强制移动路线标志
  124.     @move_route_forcing = true
  125.     # 清除被锁定的向前朝向
  126.     @prelock_direction = 0
  127.     # 清除等待计数
  128.     @wait_count = 0
  129.     # 自定义移动
  130.     move_type_custom
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 可以通行判定
  134.   #     x : X 坐标
  135.   #     y : Y 坐标
  136.   #     d : 方向 (0,2,4,6,8)  ※ 0 = 全方向不能通行的情况判定 (跳跃用)
  137.   #--------------------------------------------------------------------------
  138.   def passable?(x, y, d)
  139.     # 求得新的坐标
  140.     new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  141.     new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  142.     # 坐标在地图以外的情况
  143.     unless $game_map.valid?(new_x, new_y)
  144.       # 不能通行
  145.       return false
  146.     end
  147.     # 穿透是 ON 的情况下
  148.     if @through
  149.       # 可以通行
  150.       return true
  151.     end
  152.     # 移动者的元件无法来到指定方向的情况下
  153.     unless $game_map.passable?(x, y, d, self)
  154.       # 通行不可
  155.       return false
  156.     end
  157.     # 从指定方向不能进入到移动处的元件的情况下
  158.     unless $game_map.passable?(new_x, new_y, 10 - d)
  159.       # 不能通行
  160.       return false
  161.     end
  162.     # 循环全部事件
  163.     for event in $game_map.events.values
  164.       # 事件坐标于移动目标坐标一致的情况下
  165.       if event.x == new_x and event.y == new_y
  166.         # 穿透为 ON
  167.         unless event.through
  168.           # 自己就是事件的情况下
  169.           if self != $game_player
  170.             # 不能通行
  171.             return false
  172.           end
  173.           # 自己是主角、对方的图形是角色的情况下
  174.           if event.character_name != ""
  175.             # 不能通行
  176.             return false
  177.           end
  178.         end
  179.       end
  180.     end
  181.     # 主角的坐标与移动目标坐标一致的情况下
  182.     if $game_player.x == new_x and $game_player.y == new_y
  183.       # 穿透为 ON
  184.       unless $game_player.through
  185.         # 自己的图形是角色的情况下
  186.         if @character_name != ""
  187.           # 不能通行
  188.           return false
  189.         end
  190.       end
  191.     end
  192.     # 可以通行
  193.     return true
  194.   end
  195.   
  196.   #--------------------------------------------------------------------------
  197.   # ● 可以通行判定 (无视事件版)
  198.   #--------------------------------------------------------------------------
  199.   def passable_no_event?(x, y, d)
  200.     # 求得新的坐标
  201.     new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  202.     new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  203.     # 坐标在地图以外的情况
  204.     unless $game_map.valid?(new_x, new_y)
  205.       # 不能通行
  206.       return false
  207.     end
  208.     # 穿透是 ON 的情况下
  209.     if @through
  210.       # 可以通行
  211.       return true
  212.     end
  213.     # 移动者的元件无法来到指定方向的情况下
  214.     unless $game_map.passable?(x, y, d, self)
  215.       # 通行不可
  216.       return false
  217.     end
  218.     # 从指定方向不能进入到移动处的元件的情况下
  219.     unless $game_map.passable?(new_x, new_y, 10 - d)
  220.       # 不能通行
  221.       return false
  222.     end
  223.     # 循环全部事件
  224.     for event in $game_map.events.values
  225.       # 事件坐标于移动目标坐标一致的情况下
  226.       if event.x == new_x and event.y == new_y
  227.         # 穿透为 ON
  228.         unless event.through
  229.           # 自己就是事件的情况下
  230.           if self != $game_player
  231.             # 能通行
  232.             return  true
  233.           end
  234.           # 自己是主角、对方的图形是角色的情况下
  235.           if event.character_name != ""
  236.             # 能通行
  237.             return false
  238.           end
  239.         end
  240.       end
  241.     end
  242.     # 主角的坐标与移动目标坐标一致的情况下
  243.     if $game_player.x == new_x and $game_player.y == new_y
  244.       # 穿透为 ON
  245.       unless $game_player.through
  246.         # 自己的图形是角色的情况下
  247.         if @character_name != ""
  248.           # 不能通行
  249.           return false
  250.         end
  251.       end
  252.     end
  253.     # 可以通行
  254.     return true
  255.   end
  256.   
  257.   #--------------------------------------------------------------------------
  258.   # ● 锁定
  259.   #--------------------------------------------------------------------------
  260.   def lock
  261.     # 如果已经被锁定的情况下
  262.     if @locked
  263.       # 过程结束
  264.       return
  265.     end
  266.     # 保存锁定前的朝向
  267.     @prelock_direction = @direction
  268.     # 保存主角的朝向
  269.     turn_toward_player
  270.     # 设置锁定中标志
  271.     @locked = true
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● 锁定中判定
  275.   #--------------------------------------------------------------------------
  276.   def lock?
  277.     return @locked
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● 解除锁定
  281.   #--------------------------------------------------------------------------
  282.   def unlock
  283.     # 没有锁定的情况下
  284.     unless @locked
  285.       # 过程结束
  286.       return
  287.     end
  288.     # 清除锁定中标志
  289.     @locked = false
  290.     # 没有固定朝向的情况下
  291.     unless @direction_fix
  292.       # 如果保存了锁定前的方向
  293.       if @prelock_direction != 0
  294.         # 还原为锁定前的方向
  295.         @direction = @prelock_direction
  296.       end
  297.     end
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 移动到指定位置
  301.   #     x : X 坐标
  302.   #     y : Y 坐标
  303.   #--------------------------------------------------------------------------
  304.   def moveto(x, y)
  305.     @x = x % $game_map.width
  306.     @y = y % $game_map.height
  307.     @real_x = @x * 128
  308.     @real_y = @y * 128
  309.     @prelock_direction = 0
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 获取画面 X 坐标
  313.   #--------------------------------------------------------------------------
  314.   def screen_x
  315.     # 通过实际坐标和地图的显示位置来求得画面坐标
  316.     return (@real_x - $game_map.display_x + 3) / 4 + 16
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 获取画面 Y 坐标
  320.   #--------------------------------------------------------------------------
  321.   def screen_y
  322.     # 通过实际坐标和地图的显示位置来求得画面坐标
  323.     y = (@real_y - $game_map.display_y + 3) / 4 + 32
  324.     # 取跳跃计数小的 Y 坐标
  325.     if @jump_count >= @jump_peak
  326.       n = @jump_count - @jump_peak
  327.     else
  328.       n = @jump_peak - @jump_count
  329.     end
  330.     return y - (@jump_peak * @jump_peak - n * n) / 2
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 获取画面 Z 坐标
  334.   #     height : 角色的高度
  335.   #--------------------------------------------------------------------------
  336.   def screen_z(height = 0)
  337.     # 在最前显示的标志为 ON 的情况下
  338.     if @always_on_top
  339.       # 无条件设置为 999
  340.       return 999
  341.     end
  342.     # 通过实际坐标和地图的显示位置来求得画面坐标
  343.     z = (@real_y - $game_map.display_y + 3) / 4 + 32
  344.     # 元件的情况下
  345.     if @tile_id > 0
  346.       # 元件的优先不足 * 32
  347.       return z + $game_map.priorities[@tile_id] * 32
  348.     # 角色的场合
  349.     else
  350.       # 如果高度超过 32 就判定为满足 31
  351.       return z + ((height > 32) ? 31 : 0)
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 取得繁茂
  356.   #--------------------------------------------------------------------------
  357.   def bush_depth
  358.     # 是元件、并且在最前显示为 ON 的情况下
  359.     if @tile_id > 0 or @always_on_top
  360.       return 0
  361.     end
  362.     # 在跳跃以外的状态时繁茂处元件的属性为 12,除此之外为 0
  363.     if @jump_count == 0 and $game_map.bush?(@x, @y)
  364.       return 12
  365.     else
  366.       return 0
  367.     end
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ● 取得地形标记
  371.   #--------------------------------------------------------------------------
  372.   def terrain_tag
  373.     return $game_map.terrain_tag(@x, @y)
  374.   end
  375. end
复制代码
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-17 07:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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