赞 | 1 |
VIP | 0 |
好人卡 | 8 |
积分 | 1 |
经验 | 50472 |
最后登录 | 2017-10-24 |
在线时间 | 1906 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 88
- 在线时间
- 1906 小时
- 注册时间
- 2012-10-5
- 帖子
- 1991
|
2楼
楼主 |
发表于 2012-10-15 02:43:54
|
只看该作者
我在添加交通工具时把game_map. Game_Vehicle改了.运行游戏显示Game_Vehicle 235行syntaxError.
原本:【★←红字的地方为改动部分】
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# 这个类用来操控地图,包含了地图滚动设置和通行度判定等信息。
# 这个类的实例被全局变量 $game_map 所引用。
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * 声明实例变量
#--------------------------------------------------------------------------
attr_reader :screen # 地图画面状态
attr_reader :interpreter # 地图事件直译器
attr_reader :display_x # 地图画面显示X坐标 * 256
attr_reader :display_y # 地图画面显示Y坐标 * 256
attr_reader :parallax_name # 远景图档名
attr_reader :passages # 通行度设定表
attr_reader :events # 事件
attr_reader :vehicles # 交通工具
attr_accessor :need_refresh # 更新内容信息需求标示
attr_accessor :map # 用于辨识地图的标示
#--------------------------------------------------------------------------
# * 对象初始化
#--------------------------------------------------------------------------
def initialize
@screen = Game_Screen.new
@interpreter = Game_Interpreter.new(0, true)
@map_id = 0
@display_x = 0
@display_y = 0
create_vehicles
end
#--------------------------------------------------------------------------
# * 设置
# map_id : 地图编号
#--------------------------------------------------------------------------
def setup(map_id)
@map_id = map_id
@map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
@display_x = 0
@display_y = 0
@passages = $data_system.passages
referesh_vehicles
setup_events
setup_scroll
setup_parallax
@need_refresh = false
end
#--------------------------------------------------------------------------
# * 创建交通工具
#--------------------------------------------------------------------------
【★←这里多填加了4个】
★【@vehicles[4] = Game_Vehicle.new(4)】 # 马
★【@vehicles[5] = Game_Vehicle.new(5)】 # 大船
★【@vehicles[6] = Game_Vehicle.new(6)】 # 毛毯
★【@vehicles[3] = Game_Vehicle.new(3)】 # 坦克
#--------------------------------------------------------------------------
def create_vehicles
@vehicles = []
@vehicles[0] = Game_Vehicle.new(0) # 舟
@vehicles[1] = Game_Vehicle.new(1) # 船
@vehicles[2] = Game_Vehicle.new(2) # 飞艇
end
#--------------------------------------------------------------------------
# * 更新交通工具内容信息
#--------------------------------------------------------------------------
def referesh_vehicles
for vehicle in @vehicles
vehicle.refresh
end
end
#--------------------------------------------------------------------------
★←这里也一样
* 登上马 *登上坦克 *登上大船 *登上毛毯
★【def horse】 ★【def tank 】 ★ 【def bigship 】 ★【def carpet】
【return @vehicles[4] 】 【return @vehicles[3] 】 【 return @vehicles[5]】 【return @vehicles[6]】
【 end】 【end】 【end】 【end】
#--------------------------------------------------------------------------
def boat * 登上舟
return @vehicles[0]
end
#--------------------------------------------------------------------------
# * 登上船
#--------------------------------------------------------------------------
def ship
return @vehicles[1]
end
#--------------------------------------------------------------------------
# * 登上空艇
#--------------------------------------------------------------------------
def airship
return @vehicles[2]
end
#--------------------------------------------------------------------------
# * 事件设置
#--------------------------------------------------------------------------
def setup_events
@events = {} # 地图事件
for i in @map.events.keys
@events = Game_Event.new(@map_id, @map.events)
end
@common_events = {} # 全局事件
for i in 1...$data_common_events.size
@common_events = Game_CommonEvent.new(i)
end
end
#--------------------------------------------------------------------------
# * 滚动设置
#--------------------------------------------------------------------------
def setup_scroll
@scroll_direction = 2
@scroll_rest = 0
@scroll_speed = 4
@margin_x = (width - 17) * 256 / 2 # 画面未显示的部分的宽度 /2
@margin_y = (height - 13) * 256 / 2 # 画面未显示的部分的高度 /2
end
#--------------------------------------------------------------------------
# * 远景设置
#--------------------------------------------------------------------------
def setup_parallax
@parallax_name = @map.parallax_name
@parallax_loop_x = @map.parallax_loop_x
@parallax_loop_y = @map.parallax_loop_y
@parallax_sx = @map.parallax_sx
@parallax_sy = @map.parallax_sy
@parallax_x = 0
@parallax_y = 0
end
#--------------------------------------------------------------------------
# * 设置显示位置
# x : 地图画面显示X坐标 (*256)
# y : 地图画面显示Y坐标 (*256)
#--------------------------------------------------------------------------
def set_display_pos(x, y)
@display_x = (x + @map.width * 256) % (@map.width * 256)
@display_y = (y + @map.height * 256) % (@map.height * 256)
@parallax_x = x
@parallax_y = y
end
#--------------------------------------------------------------------------
# * 计算远景图显示的X坐标
# bitmap : 远景图
#--------------------------------------------------------------------------
def calc_parallax_x(bitmap)
if bitmap == nil
return 0
elsif @parallax_loop_x
return @parallax_x / 16
elsif loop_horizontal?
return 0
else
w1 = bitmap.width - 544
w2 = @map.width * 32 - 544
if w1 <= 0 or w2 <= 0
return 0
else
return @parallax_x * w1 / w2 / 8
end
end
end
#--------------------------------------------------------------------------
# * 计算远景图显示的Y坐标
# bitmap : 远景图
#--------------------------------------------------------------------------
def calc_parallax_y(bitmap)
if bitmap == nil
return 0
elsif @parallax_loop_y
return @parallax_y / 16
elsif loop_vertical?
return 0
else
h1 = bitmap.height - 416
h2 = @map.height * 32 - 416
if h1 <= 0 or h2 <= 0
return 0
else
return @parallax_y * h1 / h2 / 8
end
end
end
#--------------------------------------------------------------------------
# * 获取地图编号信息
#--------------------------------------------------------------------------
def map_id
return @map_id
end
#--------------------------------------------------------------------------
# * 获取地图宽度信息
#--------------------------------------------------------------------------
def width
return @map.width
end
#--------------------------------------------------------------------------
# * 获取地图高度信息
#--------------------------------------------------------------------------
def height
return @map.height
end
#--------------------------------------------------------------------------
# * 横向滚动地图?
#--------------------------------------------------------------------------
def loop_horizontal?
return (@map.scroll_type == 2 or @map.scroll_type == 3)
end
#--------------------------------------------------------------------------
# * 纵向滚动地图?
#--------------------------------------------------------------------------
def loop_vertical?
return (@map.scroll_type == 1 or @map.scroll_type == 3)
end
#--------------------------------------------------------------------------
# * 获取地图是否禁用奔跑的信息
#--------------------------------------------------------------------------
def disable_dash?
return @map.disable_dashing
end
#--------------------------------------------------------------------------
# * 获取地雷遇敌队伍列表信息
#--------------------------------------------------------------------------
def encounter_list
return @map.encounter_list
end
#--------------------------------------------------------------------------
# * 获取地雷遇敌剩余步数信息
#--------------------------------------------------------------------------
def encounter_step
return @map.encounter_step
end
#--------------------------------------------------------------------------
# * 获取地图数据
#--------------------------------------------------------------------------
def data
return @map.data
end
#--------------------------------------------------------------------------
# * 计算X坐标并减去地图画面显示坐标
# x : X坐标
#--------------------------------------------------------------------------
def adjust_x(x)
if loop_horizontal? and x < @display_x - @margin_x
return x - @display_x + @map.width * 256
else
return x - @display_x
end
end
#--------------------------------------------------------------------------
# * 计算y坐标并减去地图画面显示坐标
# y : Y坐标
#--------------------------------------------------------------------------
def adjust_y(y)
if loop_vertical? and y < @display_y - @margin_y
return y - @display_y + @map.height * 256
else
return y - @display_y
end
end
#--------------------------------------------------------------------------
# * 计算循环调校后的X坐标
# x : X坐标
#--------------------------------------------------------------------------
def round_x(x)
if loop_horizontal?
return (x + width) % width
else
return x
end
end
#--------------------------------------------------------------------------
# * 计算循环调校后的Y坐标
# y : Y坐标
#--------------------------------------------------------------------------
def round_y(y)
if loop_vertical?
return (y + height) % height
else
return y
end
end
#--------------------------------------------------------------------------
# * 计算指定方向的一格的X坐标
# x : X坐标
# direction : 方向(下,左,右,上) (2,4,6,8)
#--------------------------------------------------------------------------
def x_with_direction(x, direction)
return round_x(x + (direction == 6 ? 1 : direction == 4 ? -1 : 0))
end
#--------------------------------------------------------------------------
# * 计算指定方向的一格的Y坐标
# y : Y坐标
# direction : 方向(下,左,右,上) (2,4,6,8)
#--------------------------------------------------------------------------
def y_with_direction(y, direction)
return round_y(y + (direction == 2 ? 1 : direction == 8 ? -1 : 0))
end
#--------------------------------------------------------------------------
# * 获取指定坐标所在的事件数组信息
# x : X坐标
# y : Y坐标
#--------------------------------------------------------------------------
def events_xy(x, y)
result = []
for event in $game_map.events.values
result.push(event) if event.pos?(x, y)
end
return result
end
#--------------------------------------------------------------------------
# * 自动切换BGM/BGS
#--------------------------------------------------------------------------
def autoplay
@map.bgm.play if @map.autoplay_bgm unless $game_player.in_vehicle?
@map.bgs.play if @map.autoplay_bgs
end
#--------------------------------------------------------------------------
# * 更新内容信息
#--------------------------------------------------------------------------
def refresh
if @map_id > 0
for event in @events.values
event.refresh
end
for common_event in @common_events.values
common_event.refresh
end
end
@need_refresh = false
end
#--------------------------------------------------------------------------
# * 向下滚动
# distance : 滚动距离
#--------------------------------------------------------------------------
def scroll_down(distance)
if loop_vertical?
@display_y += distance
@display_y %= @map.height * 256
@parallax_y += distance
else
last_y = @display_y
@display_y = [@display_y + distance, (height - 13) * 256].min
@parallax_y += @display_y - last_y
end
end
#--------------------------------------------------------------------------
# * 向左滚动
# distance : 滚动距离
#--------------------------------------------------------------------------
def scroll_left(distance)
if loop_horizontal?
@display_x += @map.width * 256 - distance
@display_x %= @map.width * 256
@parallax_x -= distance
else
last_x = @display_x
@display_x = [@display_x - distance, 0].max
@parallax_x += @display_x - last_x
end
end
#--------------------------------------------------------------------------
# * 向右滚动
# distance : 滚动距离
#--------------------------------------------------------------------------
def scroll_right(distance)
if loop_horizontal?
@display_x += distance
@display_x %= @map.width * 256
@parallax_x += distance
else
last_x = @display_x
@display_x = [@display_x + distance, (width - 17) * 256].min
@parallax_x += @display_x - last_x
end
end
#--------------------------------------------------------------------------
# * 向上滚动
# distance : 滚动距离
#--------------------------------------------------------------------------
def scroll_up(distance)
if loop_vertical?
@display_y += @map.height * 256 - distance
@display_y %= @map.height * 256
@parallax_y -= distance
else
last_y = @display_y
@display_y = [@display_y - distance, 0].max
@parallax_y += @display_y - last_y
end
end
#--------------------------------------------------------------------------
# * 判定坐标合法性
# x : X坐标
# y : Y坐标
#--------------------------------------------------------------------------
def valid?(x, y)
return (x >= 0 and x < width and y >= 0 and y < height)
end
#--------------------------------------------------------------------------
# * 判断通行度
# x : X坐标
# y : Y坐标
# flag : 用于查询的通行度标示
# (预设0x01,只有在驾驶交通工具的时候才改变)
#--------------------------------------------------------------------------
def passable?(x, y, flag = 0x01)
for event in events_xy(x, y) # 匹配坐标的事件
next if event.tile_id == 0 # 该事件图形为空
next if event.priority_type > 0 # 未被设为[在普通事件下方]
next if event.through # “事件可穿透”属性
pass = @passages[event.tile_id] # 获取通行度属性信息
next if pass & 0x10 == 0x10 # [☆] : 不影响通行度
return true if pass & flag == 0x00 # [○] : 可以通行
return false if pass & flag == flag # [×] : 不可以通行
end
for i in [2, 1, 0] # 为了按从上到下的地图层次顺序
tile_id = @map.data[x, y, i] # 获取地图组件编号信息
return false if tile_id == nil # 获取地图组件信息失败:不可通行
pass = @passages[tile_id] # 获取通行度属性信息
next if pass & 0x10 == 0x10 # [☆] : 不影响通行度
return true if pass & flag == 0x00 # [○] : 可以通行
return false if pass & flag == flag # [×] : 不可以通行
end
return false # 不可通行
end
#--------------------------------------------------------------------------
★←这里填加4种通行度
#坦克 #马
【def tank_passable?(x, y)】 【def horse_passable?(x, y)】
【return passable?(x, y, 0x10)】 【return passable?(x, y, 0x12)】
【end】 【end】
#大船 #毛毯
【def horse_passable?(x, y)】 【def carpet_passable?(x, y)】
【return passable?(x, y, 0x14)】 【return passable?(x, y, 0x16)】
【end】 【end】
#--------------------------------------------------------------------------
* 判断舟航行通行度
def boat_passable?(x, y)
return passable?(x, y, 0x02)
end
#--------------------------------------------------------------------------
# * 判断船航行通行度
# x : X坐标
# y : Y坐标
#--------------------------------------------------------------------------
def ship_passable?(x, y)
return passable?(x, y, 0x04)
end
#--------------------------------------------------------------------------
# * 判断飞艇登陆通行度
# x : X坐标
# y : Y坐标
#--------------------------------------------------------------------------
def airship_land_ok?(x, y)
return passable?(x, y, 0x08)
end
#--------------------------------------------------------------------------
# * 判断草木茂密处的通行度
# x : X坐标
# y : Y坐标
#--------------------------------------------------------------------------
def bush?(x, y)
return false unless valid?(x, y)
return @passages[@map.data[x, y, 1]] & 0x40 == 0x40
end
#--------------------------------------------------------------------------
# * 判断具有柜台属性的地图组件
# x : X坐标
# y : Y坐标
#--------------------------------------------------------------------------
def counter?(x, y)
return false unless valid?(x, y)
return @passages[@map.data[x, y, 0]] & 0x80 == 0x80
end
#--------------------------------------------------------------------------
# * 开始滚动地图视域
# direction : 滚动方向
# distance : 滚动距离
# speed : 滚动速度
#--------------------------------------------------------------------------
def start_scroll(direction, distance, speed)
@scroll_direction = direction
@scroll_rest = distance * 256
@scroll_speed = speed
end
#--------------------------------------------------------------------------
# * 判定地图视域是否正在滚动
#--------------------------------------------------------------------------
def scrolling?
return @scroll_rest > 0
end
#--------------------------------------------------------------------------
# * 更新帧
#--------------------------------------------------------------------------
def update
refresh if $game_map.need_refresh
update_scroll
update_events
update_vehicles
update_parallax
@screen.update
end
#--------------------------------------------------------------------------
# * 更新地图视域滚动信息
#--------------------------------------------------------------------------
def update_scroll
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
end
#--------------------------------------------------------------------------
# * 更新事件信息
#--------------------------------------------------------------------------
def update_events
for event in @events.values
event.update
end
for common_event in @common_events.values
common_event.update
end
end
#--------------------------------------------------------------------------
# * 更新交通工具信息
#--------------------------------------------------------------------------
def update_vehicles
for vehicle in @vehicles
vehicle.update
end
end
#--------------------------------------------------------------------------
# * 更新远景图信息
#--------------------------------------------------------------------------
def update_parallax
@parallax_x += @parallax_sx * 4 if @parallax_loop_x
@parallax_y += @parallax_sy * 4 if @parallax_loop_y
end
end
#--------------------------------------------------------------------------
原本:【★←红字的地方为改动部分】
#==============================================================================
# ** Game_Vehicle
#------------------------------------------------------------------------------
# 这个类用来操控交通工具,这个类作为 Game_Map 类的内部类使用。
# 如果当前地图上没有交通工具,则设置他们的地图坐标为(-1,-1)。
#==============================================================================
class Game_Vehicle < Game_Character
#--------------------------------------------------------------------------
# * 常数
#--------------------------------------------------------------------------
MAX_ALTITUDE = 32 # 飞艇所在的高度 【★←这里max_altitude=0】
#--------------------------------------------------------------------------
# * 声明实例变量
#--------------------------------------------------------------------------
attr_reader :type # 交通工具类型(0..2)
attr_reader :altitude # 飞行高度(只针对飞艇)
attr_reader :driving # 判断交通工具被控制的标示
#--------------------------------------------------------------------------
# * 对象初始化
# type : 交通工具类型(0:舟,1:船,2:飞艇)
#--------------------------------------------------------------------------
def initialize(type)
super()
@type = type
@altitude = 0
@driving = false
@direction = 4
@walk_anime = false
@step_anime = false
load_system_settings
end
#--------------------------------------------------------------------------
# * 加载系统交通工具参数设置
#--------------------------------------------------------------------------
【★←这里填加4种参数】
when 3 when 5
【sys_vehicle = $data_system.tank】 【sys_vehicle = $data_system.bigship】
when 4 when 6
【sys_vehicle = $data_system.horse】 【sys_vehicle = $data_system.carpet】
#--------------------------------------------------------------------------
def load_system_settings
case @type
when 0
sys_vehicle = $data_system.boat
when 1
sys_vehicle = $data_system.ship
when 2
sys_vehicle = $data_system.airship
else
sys_vehicle = nil
end
if sys_vehicle != nil
@character_name = sys_vehicle.character_name
@character_index = sys_vehicle.character_index
@bgm = sys_vehicle.bgm
@map_id = sys_vehicle.start_map_id
@x = sys_vehicle.start_x
@y = sys_vehicle.start_y
end
end
#--------------------------------------------------------------------------
# * 更新内容信息
#--------------------------------------------------------------------------
★←这里填加4种更新
when 3 when 5
【@priority_type = 1】 【@priority_type = 1】
【@move_speed = 7】 【@move_speed = 9】
when 4 when 6
【@priority_type = 1】 【@priority_type =1】
【@move_speed = 8】 【@move_speed = 10】
#--------------------------------------------------------------------------
【★←这里填加4种】
when 3 when 4
【@priority_type = 1】 【@priority_type = 1】
【@move_speed = 7】 【@move_speed = 8】
when 5 when 6
【@priority_type = 1】 【@priority_type = @driving ? 2 : 0】
【@move_speed = 9】 【@move_speed = 9】
#--------------------------------------------------------------------------
def refresh
if @driving
@map_id = $game_map.map_id
sync_with_player
elsif @map_id == $game_map.map_id
moveto(@x, @y)
end
case @type
when 0
@priority_type = 1
@move_speed = 4
when 1
@priority_type = 1
@move_speed = 5
when 2
@priority_type = @driving ? 2 : 0
@move_speed = 6
end
@walk_anime = @driving
@step_anime = @driving
end
#--------------------------------------------------------------------------
# * 变更位置
# map_id : 地图编号
# x : 地图X坐标
# y : 地图Y坐标
#--------------------------------------------------------------------------
def set_location(map_id, x, y)
@map_id = map_id
@x = x
@y = y
refresh
end
#--------------------------------------------------------------------------
# * 判定坐标是否匹配
# x : 地图X坐标
# y : 地图Y坐标
#--------------------------------------------------------------------------
def pos?(x, y)
return (@map_id == $game_map.map_id and super(x, y))
end
#--------------------------------------------------------------------------
# * 判定交通工具显示透明度
#--------------------------------------------------------------------------
def transparent
return (@map_id != $game_map.map_id or super)
end
#--------------------------------------------------------------------------
# * 登上交通工具
#--------------------------------------------------------------------------
【★←这里更新1种】
【def get_on】
【@driving = true】
【@walk_anime = true】
【@step_anime = true】
【 if @type == 6】 # 毛毯?
【@priority_type = 2 】 # 更改显示优先级为[在普通人物上方]
【end】
【@bgm.play】 # 播放交通工具专属BGM
【end】
#--------------------------------------------------------------------------
def get_on
@driving = true
@walk_anime = true
@step_anime = true
if @type == 2 # 空艇?
@priority_type = 2 # 更改显示优先级为[在普通人物上方]
end
@bgm.play # 播放交通工具专属BGM
end
#--------------------------------------------------------------------------
# * 登下交通工具
#--------------------------------------------------------------------------
def get_off
@driving = false
@walk_anime = false
@step_anime = false
@direction = 4
end
#--------------------------------------------------------------------------
# * 与玩家主角坐标同步移动
#--------------------------------------------------------------------------
def sync_with_player
@x = $game_player.x
@y = $game_player.y
@real_x = $game_player.real_x
@real_y = $game_player.real_y
@direction = $game_player.direction
update_bush_depth
end
#--------------------------------------------------------------------------
# * 获取行驶速度
#--------------------------------------------------------------------------
def speed
return @move_speed
end
#--------------------------------------------------------------------------
# * 获取屏幕Y坐标差量
#--------------------------------------------------------------------------
def screen_y
return super - altitude
end
#--------------------------------------------------------------------------
# * 通行度判定
#--------------------------------------------------------------------------
【★←这里填加1种】
【def movable?】
【return false if (@type == 6 and @altitude < MAX_ALTITUDE)】
【return (not moving?)】
【end】
#--------------------------------------------------------------------------
def movable?
return false if (@type == 2 and @altitude < MAX_ALTITUDE)
return (not moving?)
end
#--------------------------------------------------------------------------
# * 更新帧
#--------------------------------------------------------------------------
【★←这里填加更新帧】
【def update】
【super】
【if @type == 6】 # 毛毯?
【if @driving】
【if @altitude < MAX_ALTITUDE】
【@altitude += 1】 # 高度增加
【end】
【elsif @altitude > 0】
【@altitude -= 1】 # 高度降低
【if @altitude == 0】
【@priority_type = 0】 # 恢复显示优先级为[在普通人物下方]
【end】
【end】
#--------------------------------------------------------------------------
def update
super
if @type == 2 # 空艇?
if @driving
if @altitude < MAX_ALTITUDE
@altitude += 1 # 高度增加
end
elsif @altitude > 0
@altitude -= 1 # 高度降低
if @altitude == 0
@priority_type = 0 # 恢复显示优先级为[在普通人物下方]
end
end
end
end
end
#--------------------------------------------------------------------------
以上我说的够清楚了...在看不懂彻底悲具 |
|