Project1

标题: 移动i速度扩张(简单且雷人慎入) [打印本页]

作者: IamI    时间: 2009-9-12 09:20
标题: 移动i速度扩张(简单且雷人慎入)
前几天研究Game_Character的速度机制,发现狂雷巨闪……居然用的是2的速度次方,事实上,Game_Character能写下任何的速度。
这个脚本支持设置从1-100的速度
  1. MAX_SPEED = 100
  2. class Game_Character
  3.   alias old_initialize_speed_a initialize
  4.   def initialize
  5.     old_initialize_speed_a
  6.     @super_speed = -1
  7.   end
  8.   def update_move
  9.     distance = @super_speed <= -1 ? 2 ** @move_speed : @super_speed
  10.     distance *= 2 if dash?
  11.     @real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
  12.     @real_x = [@real_x + distance, @x * 256].min if @x * 256 > @real_x
  13.     @real_y = [@real_y - distance, @y * 256].max if @y * 256 < @real_y
  14.     @real_y = [@real_y + distance, @y * 256].min if @y * 256 > @real_y
  15.     update_bush_depth unless moving?
  16.     if @walk_anime
  17.       @anime_count += 1.5
  18.     elsif @step_anime
  19.       @anime_count += 1
  20.     end
  21.   end
  22.   attr_accessor :move_speed
  23.   attr_reader :super_speed
  24.   def super_speed= (value)
  25.     @super_speed = value
  26.     @super_speed = MAX_SPEED if @super_speed > MAX_SPEED
  27.   end
  28. end
  29. class Game_Event
  30.   alias old_setup_speed_a setup
  31.   def setup(*args)
  32.     old_setup_speed_a(*args)
  33.     self.super_speed = @event.speed.to_i
  34.   end
  35. end

  36. class Game_Interpreter
  37.   def set_speed(ev_id,speed,bool = true)
  38.     ev = $game_map.events[ev_id]
  39.     ev = $game_player if ev_id == 0
  40.     raise EventIDError.new("异常的事件ID:" + ev_id.to_s) if ev == nil
  41.     if bool
  42.       ev.super_speed = speed
  43.     else
  44.       ev.move_speed = speed
  45.       ev.super_speed = -1
  46.     end
  47.   end
  48.   def get_speed(ev_id)
  49.     ev = $game_map.events[ev_id]
  50.     ev = $game_player if ev_id == 0
  51.     raise EventIDError.new("异常的事件ID:" + ev_id.to_s) if ev == nil
  52.     return ev.super_speed == -1 ? 2 ** ev.move_speed : ev.super_speed
  53.   end
  54. end

  55. class RPG::Event
  56.   def speed
  57.     splits = @name.split(/,speed =/)
  58.     return if splits[0] == @name
  59.     val = splits[splits.size - 1]
  60.     val.strip!
  61.   end
  62.   def name
  63.     return @name.split(/,/)[0]
  64.   end
  65. end

  66. class EventIDError < Exception
  67.   def initialize(me)
  68.     super(me)
  69.   end
  70. end
复制代码
MAX_SPEED设置最高移动速度。
在事件名字后面加入",speed = XXX"(空格不能省略,不含双引号)即可设置该事件的移动速度
事件脚本set_speed(ev_id,speed)
设置id为ev_id的速度为speed。
原有速度对应关系为2的次方倍(速度5对应32,依此类推)

还有一些乱七八糟的功能就不解释了……反正应该用不到> <
范例: 速度扩张.rar (235.86 KB, 下载次数: 2659)
作者: 塑望    时间: 2009-9-12 17:05

若是赛跑之类的GAME的话变化是很微妙的

作者: 霜冻之狼    时间: 2009-9-12 17:48
做小游戏的法宝啊.....

俺能拿走么
作者: 越前リョーマ    时间: 2009-9-12 19:00
我觉得还是直接设置倍数比较好……特别是可以几点几之类的。
作者: 奶油Da蛋糕    时间: 2009-10-7 19:30
本帖最后由 奶油Da蛋糕 于 2009-10-7 19:32 编辑

可以输入浮点数么?
MAX_SPEED = π (这个字符是“兀”pai,宋体的“兀”pai就变成这样了。π=3.141592……)
作者: hhs467492722    时间: 2010-8-24 21:06
哇塞:victory:,这么好用的脚本,好东西啊,谢谢你!




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