Project1

标题: 请教1号角色的移动速度随其敏捷值增加而增加的思路和写法 [打印本页]

作者: taeckle    时间: 2020-1-15 22:08
标题: 请教1号角色的移动速度随其敏捷值增加而增加的思路和写法
本帖最后由 taeckle 于 2020-1-15 22:10 编辑

目前为止我就在默认脚本class Game_Character里面找到了那个    "@move_speed = 4"

然后咱把这个问题从简到难又分出了这么几个小问题:

1. 1号角色敏捷值每加100点那个@move_speed加1点,@move_speed上限13

2.当1号角色有第666号状态时那个@move_speed为原来的1.5倍

3. 队伍中每个角色都有一个移动速度,整个队伍的移动速度等于所有队员移动速度之和除以队伍人数



还请诸位大神来指点一二,超级菜鸟我先谢过了!


作者: 七色史莱姆    时间: 2020-1-16 17:12
  1. class Game_Actor < Game_Battler
  2.   def get_move_speed
  3.     speed = 4 + self.agi / 100.0
  4.     speed *= 1.5 if self.state?(666)
  5.     return speed
  6.   end
  7. end

  8. class Game_Player
  9.   alias old_update update
  10.   def update
  11.     unless moving? or $game_system.map_interpreter.running? or
  12.       @move_route_forcing or $game_temp.message_window_showing  
  13.       if $game_party != nil and $game_party.actors.size > 0
  14.         @move_speed = 0
  15.         for actor in $game_party.actors
  16.           @move_speed += actor.get_move_speed
  17.         end
  18.         @move_speed /= $game_party.actors.size
  19.         @move_speed = 13 if @move_speed > 13
  20.       end
  21.     end
  22.     old_update
  23.   end
  24. end
复制代码


大概就是这么个意思,另外RMXP里速度默认是4,一般最大是6,我这只是按照你说的写的,代码里的参数还是要根据实际情况调。
作者: guoxiaomi    时间: 2020-1-16 17:27
XP默认脚本里@move_speed每 +1,移动速度 x2 。此外,如果@move_speed不是整数,行走的动作会很别扭。
作者: taeckle    时间: 2020-1-22 02:32
本帖最后由 taeckle 于 2020-1-22 02:33 编辑
七色史莱姆 发表于 2020-1-16 17:12
大概就是这么个意思,另外RMXP里速度默认是4,一般最大是6,我这只是按照你说的写的,代码里的参数还是要 ...


大神我看默认脚本都是在class Game_Character设置那个@move_speed,你这边为啥在Game_Actor和Game Player里设置啊?有什么区别吗?这是默认脚本移动速度设置:

class Game_Character
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :id                       # ID
  attr_reader   :x                        # 地图 X 坐标 (理论坐标)
  attr_reader   :y                        # 地图 Y 坐标 (理论坐标)
  attr_reader   :real_x                   # 地图 X 坐标 (实际坐标 * 128)
  attr_reader   :real_y                   # 地图 Y 坐标 (实际坐标 * 128)
  attr_reader   :tile_id                  # 元件 ID  (0 为无效)
  attr_reader   :character_name           # 角色 文件名
  attr_reader   :character_hue            # 角色 色相
  attr_reader   :opacity                  # 不透明度
  attr_reader   :blend_type               # 合成方式
  attr_reader   :direction                # 朝向
  attr_reader   :pattern                  # 图案
  attr_reader   :move_route_forcing       # 移动路线强制标志
  attr_reader   :through                  # 穿透
  attr_accessor :animation_id             # 动画 ID
  attr_accessor :transparent              # 透明状态
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    @id = 0
    @x = 0
    @y = 0
    @real_x = 0
    @real_y = 0
    @tile_id = 0
    @character_name = ""
    @character_hue = 0
    @opacity = 255
    @blend_type = 0
    @direction = 2
    @pattern = 0
    @move_route_forcing = false
    @through = false
    @animation_id = 0
    @transparent = false
    @original_direction = 2
    @original_pattern = 0
    @move_type = 0
    @move_speed = 4  (就是这里)
    @move_frequency = 6  (还有这个frequency也要设置吗?)
    @move_route = nil
    @move_route_index = 0
    @original_move_route = nil
    @original_move_route_index = 0
    @walk_anime = true
    @step_anime = false
    @direction_fix = false
    @always_on_top = false
    @anime_count = 0
    @stop_count = 0
    @jump_count = 0
    @jump_peak = 0
    @wait_count = 0
    @locked = false
    @prelock_direction = 0
  end
...
作者: 1103123301    时间: 2020-1-22 13:20
taeckle 发表于 2020-1-22 02:32
大神我看默认脚本都是在class Game_Character设置那个@move_speed,你这边为啥在Game_Actor和Game Player ...

class Game_Actor < Game_Battler是用来计算队伍里角色的速度。这样def get_move_speed里的
speed = 4 + self.agi / 100.0
    speed *= 1.5 if self.state?(666)
    return speed
就能得出角色的速度了。
p Game_Character.ancestors方法可知Game_Character啥也没继承,因此直接在Game_Character写上
  def get_move_speed
    speed = 4 + self.agi / 100.0
    speed *= 1.5 if self.state?(666)
    return speed
  end
是会出错的。就得不出角色的速度。
由于Game Player继承了Game_Character。因此@move_speed的值可以对Game_Character的@move_speed有影响。(我可能理解的还不够深透,但应该是这区别吧?)
作者: taeckle    时间: 2020-1-22 16:58
1103123301 发表于 2020-1-22 13:20
class Game_Actor < Game_Battler是用来计算队伍里角色的速度。这样def get_move_speed里的
speed = 4 +  ...

那请问大神这"Game_Player" "Game_Actor" "Game_Battler" "Game_Character" 都有啥区别啊?有点晕。。
作者: 1103123301    时间: 2020-1-23 12:22
taeckle 发表于 2020-1-22 16:58
那请问大神这"Game_Player" "Game_Actor" "Game_Battler" "Game_Character" 都有啥区别啊?有点晕。。 ...

Game_Character类你可以理解为地图上主角与NPC或画面移动的类,如主角与NPC的上下左右走哪些路可以走哪些路不可以走,移动速度多快等。Game_Battler类为战斗的基础类,如主角的HP或敌人的HP都要在Game_Battler类里计算得出,状态的附加与解除等,主角或敌人SP够不够,技能什么场合用等,计算技能威力等就不一一列举了。Game_Actor类为你已方角色处理能力值的类如主角的名字,装备的各项属性和自动状态都由Game_Actor处理。如锅盖,力量+10,你主角就力量+10。
Game_Player类为处理主角的类,如主角的加入与离开队伍人数,主角的最大等级,物品的所持数等。
(这些类也对事件页各个功能都不可缺一,如删了Game_Player,先不说会不会出错,但增减物品或增减金钱防具都不会有效果。如回复药+99,你背包也不会有一个回复药的)
作者: 轩辕合流    时间: 2020-2-17 17:58
以此内推,取用的速度,。如果要用灵巧,就把 dex 改成 agi   两项都要取用就 ($game_party.actors[0].dex + $game_party.actors[0].agi)/ 2 >= value

QQ截图20200217175512.png (21.91 KB, 下载次数: 7)

QQ截图20200217175512.png





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