赞 | 7 |
VIP | 866 |
好人卡 | 185 |
积分 | 32 |
经验 | 130059 |
最后登录 | 2024-10-29 |
在线时间 | 3618 小时 |
Lv3.寻梦者 双子人
- 梦石
- 0
- 星屑
- 3185
- 在线时间
- 3618 小时
- 注册时间
- 2009-4-4
- 帖子
- 4154
|
本帖最后由 hys111111 于 2012-4-21 19:52 编辑
- #=begin
- class Game_Character
- attr_accessor :move_speed
- end
- class Game_Map
- attr_accessor :oldroute
- attr_accessor :oldeventsnums
- attr_reader :map
- alias initialize_old initialize
- def initialize
- initialize_old
- @oldroute = []
- @oldeventsnums = 0
- end
- end
- class Game_Player < Game_Character
- alias update_old update
- def update
- last_moving = moving?
- unless moving? or $game_system.map_interpreter.running? or
- @move_route_forcing or $game_temp.message_window_showing
- case Input.dir4
- when 2
- if passable?(@x, @y, 2)
- $game_map.oldroute.push([@x,@y,2])
- if $game_map.oldroute.size == $game_party.actors.size
- $game_map.oldroute.shift
- end
- end
- move_down
- when 4
- if passable?(@x, @y, 4)
- $game_map.oldroute.push([@x,@y,4])
- if $game_map.oldroute.size == $game_party.actors.size
- $game_map.oldroute.shift
- end
- end
- move_left
- when 6
- if passable?(@x, @y, 6)
- $game_map.oldroute.push([@x,@y,6])
- if $game_map.oldroute.size == $game_party.actors.size
- $game_map.oldroute.shift
- end
- end
- move_right
- when 8
- if passable?(@x, @y, 8)
- $game_map.oldroute.push([@x,@y,8])
- if $game_map.oldroute.size == $game_party.actors.size
- $game_map.oldroute.shift
- end
- end
- move_up
- end
- end
- update_old
- end
- end
- #class Interpreter
- # def command_129
- # actor = $game_actors[@parameters[0]]
- # if actor != nil
- # if @parameters[1] == 0
- # if @parameters[2] == 1
- # $game_actors[@parameters[0]].setup(@parameters[0])
- # end
- # $game_party.add_actor(@parameters[0])
- # $scene.del_follow
- # $scene.follow_system
- # else
- # $game_party.remove_actor(@parameters[0])
- # $scene.del_follow
- # $scene.follow_system
- # end
- # end
- # return true
- #end
- #end
- class Game_Party
- def remove_actor(actor_id)
- # 删除觉得
- @actors.delete($game_actors[actor_id])
- # 还原主角
- $game_player.refresh
- $scene.del_follow
- $scene.follow_system
- end
- def add_actor(actor_id)
- # 获取角色
- actor = $game_actors[actor_id]
- # 同伴人数未满 4 人、本角色不在队伍中的情况下
- if @actors.size < 4 and not @actors.include?(actor)
- # 添加角色
- @actors.push(actor)
- # 还原主角
- $game_player.refresh
- end
- $scene.del_follow
- $scene.follow_system
- end
- end
- class Scene_Map
- alias main_old main
- def main
- @spriteset = Spriteset_Map.new
- if $game_variables[1000] == 0
- follow_system
- $game_variables[1000] = 1
- end
- main_old
- end
-
- alias update_old update
- def update
- follow_system_update
- update_old
- end
-
- alias transfer_player_old transfer_player
- def transfer_player
- $game_temp.player_transferring = false
- if $game_map.map_id != $game_temp.player_new_map_id
- del_follow
- $game_map.setup($game_temp.player_new_map_id)
- end
- $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
- follow_system
- transfer_player_old
- end
-
- def follow_system
- $game_map.oldeventsnums = $game_map.events.size
- if $game_party.actors.size>=2
- for i in 2..$game_party.actors.size
- # 为事件加上名字考虑做srpg用
- #name = "我军,"+i.to_s#預設值
- name = "actor"+i.to_s#修改
- character_name = $game_party.actors[i-1].character_name
- party_event($game_player.x,$game_player.y,name,character_name)
- $game_map.oldroute.push([$game_player.x,$game_player.y,$game_player.direction])
- end
- end
- end
- def del_follow
- $game_map.oldroute.clear
- for i in 1..($game_map.events.size-$game_map.oldeventsnums)
- $game_map.events.delete($game_map.oldeventsnums+i)
- end
- end
-
- def party_event(x,y,name,character_name)
- $game_map.events[$game_map.events.size+1] = Game_Event.new($game_map.map_id,produce_party_event(x,y,name,character_name))
- $game_map.map.events[$game_map.events.size] = produce_party_event(x,y,name,character_name)
- @spriteset.dispose
- @spriteset = Spriteset_Map.new
- end
-
- def produce_party_event(x,y,name,character_name)
- e = RPG::Event.new(x,y)
- e.id = $game_map.events.size
- e.name = name
- e.pages = [RPG::Event::Page.new]
- e.pages[0].graphic = RPG::Event::Page::Graphic.new
- e.pages[0].graphic.character_name = character_name
- e.pages[0].through = true
- return e
- end
-
- def follow_system_update
- num = $game_map.oldeventsnums
- n = $game_player.move_speed
- s=$game_map.oldroute.size-1
- partyid = []
- $game_party.actors.each{|actor|
- partyid.push(actor.id)
- }
- (0..partyid.size-2).each{|i|if s>=i then
- $game_map.events[num+i+1].move_speed = n
- if $game_map.events[num+i+1].x>$game_map.oldroute[s-i][0]
- $game_map.events[num+i+1].move_left
- elsif $game_map.events[num+i+1].x<$game_map.oldroute[s-i][0]
- $game_map.events[num+i+1].move_right
- elsif $game_map.events[num+i+1].y>$game_map.oldroute[s-i][1]
- $game_map.events[num+i+1].move_up
- elsif $game_map.events[num+i+1].y<$game_map.oldroute[s-i][1]
- $game_map.events[num+i+1].move_down
- end
- end}
- end
- end
- #=end
复制代码 脚本已改好……
改的过程:class Interpreter到这个class的end全部屏蔽,取而代之的就是class Game_Party和添加、删除角色的那个def。
Interpreter其实是事件的解释器(也就是事件执行的东西)。而直接$game_party什么什么的没有用过Interpreter。
而事件中执行的替换队员是通过解释器再调用Game_Party。
所以,“事件中常用的脚本”和直接执行是有微妙的区别的…… |
|