Project1
标题:
关于事件制作航海的船
[打印本页]
作者:
懒人
时间:
2008-5-24 04:42
标题:
关于事件制作航海的船
请教高手,如何用事件制作航海的船?(事件中可用脚本)
主站上的航海脚本冲突! [LINE]1,#dddddd[/LINE]
版务信息:本贴由楼主自主结贴~
作者:
八云紫
时间:
2008-5-24 04:47
看看这个:
http://rpg.blue/viewthread.php?tid=61462 [LINE]1,#dddddd[/LINE]
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
[LINE]1,#dddddd[/LINE]
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者:
懒人
时间:
2008-5-24 04:58
那么如何让它只能在海上航行而不是一切地形?
作者:
八云紫
时间:
2008-5-24 05:28
修改地形标志呀。
作者:
懒人
时间:
2008-5-25 00:11
以下引用
八云紫于2008-5-23 21:28:37
的发言:
修改地形标志呀。
研究了很久,由于技术太烂,失败!
比如海的地形标志为1,那么怎么判定只在海上才能移动?
作者:
八云紫
时间:
2008-5-25 00:13
那就使用 迅雷進 的脚本试试。
作者:
懒人
时间:
2008-5-25 04:33
用了迅雷進的脚本,发生脚本冲突!
最好是用纯事件制作(可用事件中的脚本)
作者:
八云紫
时间:
2008-5-25 04:34
那就看看这个:
http://rpg.blue/viewthread.php?tid=87708&ntime=2008%2D5%2D24+20%3A33%3A54
作者:
懒人
时间:
2008-5-25 04:53
问题是怎么判定,当地形标志为1时可通行,其余地形不可通行!
作者:
灯笼菜刀王
时间:
2008-5-25 04:55
放公共时间,并列执行。条件分歧,设一个变量来判断地形标志,当这个变量=1的时候,修改角色通行状态。
[LINE]1,#dddddd[/LINE]
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者:
八云紫
时间:
2008-5-25 05:21
再看看这个:
http://rpg.blue/web/htm/news476.htm
作者:
懒人
时间:
2008-5-25 05:37
楼上这个就是迅雷進给的那脚本,与其它地图类脚本发生冲突!
修改角色通行状态只看到了穿透ON(无视一切地形,飞空艇效果),无法判断地形标志通行
看来是没人会了!
算了!给回帖最多的八云辛苦分!
作者:
迅雷進
时间:
2009-6-12 08:00
跨地图航海辅佐脚本
=begin
--------------------------------------------------------------------------
跨地图航海辅佐脚本 v1.1
By 叶子
Date 4-8-2006
--------------------------------------------------------------------------
跨地图航海由一个脚本+一个事件完成
使用方法(请耐心阅读完全部说明!每一步都必不可少):
-插入本脚本到Main之上
-二选一:
一)插入航海脚本懒人插件到Main之上,或者
二)仔细观察插件脚本,找到:
#-----------插入船命令-----------
setup_ship
#--------------------------------
和
#---------插入船刷新命令---------
$game_player.shipping_update
#--------------------------------
插入到Game_Map中相同位置(出现冲突时采用此方法)
-小船事件设置方法:
小船为范例工程工程里湖中的矿道车,可以改成其它船的行走图
第二页出现条件设置为航行中标志开关打开(默认50号开关),第三页为独立开关A打开
-水中通行设置方法:
把所有水的图块的地形标志设置为1,把水中不可通行图块(例如水中礁石)的地形标志
设置为2或以上(反正要大于水的地形标志)
注意事项:
-不明白小船实现原理的话最好不要改小船事件(除了注释说可以随便改的地方之外)
-默认角色航行中的话,50号开关打开,这时可以利用并行公共事件判断角色遇敌等
-航行中标志开关只能用于判断,不要在其它事件中打开或关闭,否则可能出错误
=end
SHIPPING_SWITCH = 50 # 默认50号开关为是否航行中标志开关
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# 处理主角的类。事件启动的判定、以及地图的滚动等功能。
# 本类的实例请参考 $game_player。
#==============================================================================
class Game_Player < Game_Character
TERRAIN_TAG = 1 # 默认1号地形标志为水的地形标志
attr_accessor :x # x坐标
attr_accessor :y # y坐标
attr_accessor :shipping # 航海中标志
attr_accessor :ship # 船信息
#--------------------------------------------------------------------------
# ● 航海更新
#--------------------------------------------------------------------------
def shipping_update
return if !@shipping
@old_x = @x
@old_y = @y
# 着陆判断初始化
@land = false
# 移动中、事件执行中、强制移动路线中、
# 信息窗口一个也不显示的时候
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# 如果方向键被按下、主角就朝那个方向移动
case Input.dir4
when 2
ship_move_down
when 4
ship_move_left
when 6
ship_move_right
when 8
ship_move_up
end
end
# 着陆判断
if @land
end_shipping
end
end
#--------------------------------------------------------------------------
# ● 开始航海
#--------------------------------------------------------------------------
def start_shipping(ship)
$game_player.shipping = true
need_setup = false
# 处女航的话,刷新地图
if @ship.nil?
need_setup = true
end
# 把船事件添加入资料中
@ship = ship
# 移动角色
@x = @ship.x
@y = @ship.y
# 记录位置
@ship.ship_position = [$game_map.map_id, @ship.x, @ship.y]
if need_setup
$game_map.setup_ship
end
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ● 着陆
#--------------------------------------------------------------------------
def end_shipping
# 获取带头的角色
actor = $game_party.actors[0]
# 设置角色的文件名及对像
@character_name = actor.character_name
@character_hue = actor.character_hue
# 关闭标志
@shipping = false
$game_switches[SHIPPING_SWITCH] = false
# 关闭停止时动画
@step_anime = false
# 回复速度
@move_speed = 4
# 设置船位置
@ship.ship_position = [$game_map.map_id, @old_x, @old_y]
@ship.moveto(@ship.ship_position[1], @ship.ship_position[2])
# 刷新地图
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ● 向下移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def ship_move_down(turn_enabled = true)
# 面向下
if turn_enabled
turn_down
end
# 可以通行的场合
if ship_passable?(@x, @y, 2)
# 面向下
turn_down
# 更新坐标
@y += 1
# 增加步数
increase_steps
# 不能通行的情况下
else
# 接触事件的启动判定
check_event_trigger_touch(@x, @y+1)
end
end
#--------------------------------------------------------------------------
# ● 向左移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def ship_move_left(turn_enabled = true)
# 面向左
if turn_enabled
turn_left
end
# 可以通行的情况下
if ship_passable?(@x, @y, 4)
# 面向左
turn_left
# 更新坐标
@x -= 1
# 增加步数
increase_steps
# 不能通行的情况下
else
# 接触事件的启动判定
check_event_trigger_touch(@x-1, @y)
end
end
#--------------------------------------------------------------------------
# ● 向右移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def ship_move_right(turn_enabled = true)
# 面向右
if turn_enabled
turn_right
end
# 可以通行的场合
if ship_passable?(@x, @y, 6)
# 面向右
turn_right
# 更新坐标
@x += 1
# 增加部数
increase_steps
# 不能通行的情况下
else
# 接触事件的启动判定
check_event_trigger_touch(@x+1, @y)
end
end
#--------------------------------------------------------------------------
# ● 向上移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def ship_move_up(turn_enabled = true)
# 面向上
if turn_enabled
turn_up
end
# 可以通行的情况下
if ship_passable?(@x, @y, 8)
# 面向上
turn_up
# 更新坐标
@y -= 1
# 歩数増加
increase_steps
# 不能通行的情况下
else
# 接触事件的启动判定
check_event_trigger_touch(@x, @y-1)
end
end
#--------------------------------------------------------------------------
# ● 可以通行判定
# x : X 坐标
# y : Y 坐标
# d : 方向 (0,2,4,6,8) ※ 0 = 全方向不能通行的情况判定 (跳跃用)
#--------------------------------------------------------------------------
def ship_passable?(x, y, d)
# 求得新的坐标
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
# 坐标在地图以外的情况
unless $game_map.valid?(new_x, new_y)
# 不能通行
return false
end
# 穿透是 ON 的情况下
if @through
# 可以通行
return true
end
# 循环全部事件
for event in $game_map.events.values
# 事件坐标于移动目标坐标一致的情况下
if event.x == new_x and event.y == new_y
# 穿透为 ON
unless event.through
# 自己就是事件的情况下
if self != $game_player
# 不能通行
return false
end
# 自己是主角、对方的图形是角色的情况下
if event.character_name != ""
# 不能通行
return false
end
end
end
end
# 主角的坐标与移动目标坐标一致的情况下
if $game_player.x == new_x and $game_player.y == new_y
# 穿透为 ON
unless $game_player.through
# 自己的图形是角色的情况下
if @character_name != ""
# 不能通行
return false
end
end
end
# 地形标志判断通行
for i in [2, 1, 0]
tile_id = $game_map.data[new_x, new_y, i]
return false if tile_id == nil
end
if $game_map.terrain_tag(new_x, new_y) != TERRAIN_TAG
if passable?(new_x, new_y, 0)
@land = true
return true
end
return false
end
# 可以通行
return true
end
end
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
# 处理地图的类。包含卷动以及可以通行的判断功能。
# 本类的实例请参考 $game_map 。
#==============================================================================
class Game_Map
attr_accessor :events # 事件
def setup_ship
return if $game_player.ship.nil?
# 航行中或船停泊在此则创建船事件
if $game_player.shipping or $game_player.ship.ship_position[0] == @map_id
id = @events.values.size + 1
# 防止事件错误
while @events[id] != nil
id += 1
end
@events[id] = $game_player.ship
@events[id].id = id
@events[id].map_id = @map_id
@events[id].moveto($game_player.ship.ship_position[1],
$game_player.ship.ship_position[2])
# 不在航行中则关闭开关使船出现
if !$game_player.shipping
$game_switches[SHIPPING_SWITCH] = false
end
end
end
end
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
# 处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
# 在 Game_Map 类的内部使用。
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :id # 事件ID
attr_accessor :map_id # 地图ID
attr_accessor :ship_position # 记录船位置数组
#--------------------------------------------------------------------------
# ● 越过目标判定 (不能将相同位置作为启动条件)
#--------------------------------------------------------------------------
def over_trigger?
# 图形是角色、没有开启穿透的情况下
if @character_name != "" and not @through
# 启动判定是正面
return false
end
# 地图上的这个位置不能通行,并且不在航海中的情况下
if !$game_map.passable?(@x, @y, 0) and $game_player.shipping != true
# 启动判定是正面
return false
end
# 启动判定在同位置
return true
end
def id=(new_id)
@id = new_id
@event.id = new_id
end
end
#==============================================================================
# ■ Interpreter
#------------------------------------------------------------------------------
# 执行事件命令的解释器。本类在 Game_System 类
# 与 Game_Event 类的内部使用。
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# ● 开始航海
#--------------------------------------------------------------------------
def start_shipping
$game_player.start_shipping($game_map.events[@event_id])
end
end
复制代码
航海脚本懒人插件
=begin
--------------------------------------------------------------------------
航海脚本懒人插件
By 叶子
Date 4-7-2006
--------------------------------------------------------------------------
本脚本是跨地图航海辅佐脚本的插件
-使用方法二选一:
一)插入本插件到Main之上,或者
二)仔细观察插件脚本,找到:
#-----------插入船命令-----------
setup_ship
#--------------------------------
和
#---------插入船刷新命令---------
$game_player.shipping_update
#--------------------------------
插入到Game_Map中相同位置(出现冲突时采用此方法,删除本插件)
=end
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
# 处理地图的类。包含卷动以及可以通行的判断功能。
# 本类的实例请参考 $game_map 。
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 设置
# map_id : 地图 ID
#--------------------------------------------------------------------------
def setup(map_id)
# 地图 ID 记录到 @map_id
@map_id = map_id
# 地图文件装载后、设置到 @map
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
# 定义实例变量设置地图元件信息
tileset = $data_tilesets[@map.tileset_id]
@tileset_name = tileset.tileset_name
@autotile_names = tileset.autotile_names
@panorama_name = tileset.panorama_name
@panorama_hue = tileset.panorama_hue
@fog_name = tileset.fog_name
@fog_hue = tileset.fog_hue
@fog_opacity = tileset.fog_opacity
@fog_blend_type = tileset.fog_blend_type
@fog_zoom = tileset.fog_zoom
@fog_sx = tileset.fog_sx
@fog_sy = tileset.fog_sy
@battleback_name = tileset.battleback_name
@passages = tileset.passages
@priorities = tileset.priorities
@terrain_tags = tileset.terrain_tags
# 初始化显示坐标
@display_x = 0
@display_y = 0
# 清除刷新要求标志
@need_refresh = false
# 设置地图事件数据
@events = {}
for i in @map.events.keys
@events[i] = Game_Event.new(@map_id, @map.events[i])
end
# 设置公共事件数据
@common_events = {}
for i in 1...$data_common_events.size
@common_events[i] = Game_CommonEvent.new(i)
end
# 初始化雾的各种信息
@fog_ox = 0
@fog_oy = 0
@fog_tone = Tone.new(0, 0, 0, 0)
@fog_tone_target = Tone.new(0, 0, 0, 0)
@fog_tone_duration = 0
@fog_opacity_duration = 0
@fog_opacity_target = 0
# 初始化滚动信息
@scroll_direction = 2
@scroll_rest = 0
@scroll_speed = 4
#-----------插入船命令-----------
setup_ship
#--------------------------------
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
# 还原必要的地图
if $game_map.need_refresh
refresh
end
#---------插入船刷新命令---------
$game_player.shipping_update
#--------------------------------
# 滚动中的情况下
if @scroll_rest > 0
# 滚动速度变化为地图坐标系的距离
distance = 2 ** @scroll_speed
# 执行滚动
case @scroll_direction
when 2 # 下
scroll_down(distance)
when 4 # 左
scroll_left(distance)
when 6 # 右
scroll_right(distance)
when 8 # 上
scroll_up(distance)
end
# 滚动距离的减法运算
@scroll_rest -= distance
end
# 更新地图事件
for event in @events.values
event.update
end
# 更新公共事件
for common_event in @common_events.values
common_event.update
end
# 处理雾的滚动
@fog_ox -= @fog_sx / 8.0
@fog_oy -= @fog_sy / 8.0
# 处理雾的色调变更
if @fog_tone_duration >= 1
d = @fog_tone_duration
target = @fog_tone_target
@fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
@fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
@fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
@fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
@fog_tone_duration -= 1
end
# 处理雾的不透明度变更
if @fog_opacity_duration >= 1
d = @fog_opacity_duration
@fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
@fog_opacity_duration -= 1
end
end
end
复制代码
把这两个脚本插进 main 的上面。 [LINE]1,#dddddd[/LINE]
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1