Project1
标题:
这是啥?
[打印本页]
作者:
死圣
时间:
2009-1-24 05:04
标题:
这是啥?
请看最中间的东东
是不是要重新下一个VX
如果看不到图片,请看:
RGSS脚本页:"Game_Player",行号72:NoMethodError被触发。
undefined method'map'for#<Game_Map:9*13dc2f0>
[LINE]1,#dddddd[/LINE]
版务信息:本贴由楼主自主结贴~
作者:
轩辕民
时间:
2009-1-24 05:05
地址没有复制对 - -
脚本错误,没有定义啥啥啥的,如果没有改动脚本的话应该是VX的错误,新开工程复制脚本或者重新下载看看?
作者:
死圣
时间:
2009-1-24 05:10
我又做了一个,还是显示这个
作者:
轩辕民
时间:
2009-1-24 05:12
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# 处理主角的类。事件启动的判定、以及地图的滚动等功能。
# 本类的实例请参考 $game_player。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 常量
#--------------------------------------------------------------------------
CENTER_X = (544 / 2 - 16) * 8 # 画面中央 X 座标 * 8
CENTER_Y = (416 / 2 - 16) * 8 # 画面中央 Y 座标 * 8
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :vehicle_type # 目前乘坐交通工具类型
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super
@vehicle_type = -1
@vehicle_getting_on = false # 乘坐交通工具标志
@vehicle_getting_off = false # 离开交通工具标志
@transferring = false # 场所移动标志
@new_map_id = 0 # 目标地图 ID
@new_x = 0 # 目标 X 座标
@new_y = 0 # 目标 Y 座标
@new_direction = 0 # 移动後方向
@walking_bgm = nil # 记忆用行走时 BGM
end
#--------------------------------------------------------------------------
# ● 判断是否停止
#--------------------------------------------------------------------------
def stopping?
return false if @vehicle_getting_on
return false if @vehicle_getting_off
return super
end
#--------------------------------------------------------------------------
# ● 场所移动准备
# map_id : 地图 ID
# x : X 座标
# y : Y 座标
# direction : 移动後面向
#--------------------------------------------------------------------------
def reserve_transfer(map_id, x, y, direction)
@transferring = true
@new_map_id = map_id
@new_x = x
@new_y = y
@new_direction = direction
end
#--------------------------------------------------------------------------
# ● 判断是否准备场所移动
#--------------------------------------------------------------------------
def transfer?
return @transferring
end
#--------------------------------------------------------------------------
# ● 执行场所移动
#--------------------------------------------------------------------------
def perform_transfer
return unless @transferring
@transferring = false
set_direction(@new_direction)
if $game_map.map_id != @new_map_id
$game_map.setup(@new_map_id) # 移动到另一地图
end
moveto(@new_x, @new_y)
@walking_bgm = $game_map.map.bgm
end
#--------------------------------------------------------------------------
# ● 判断地图是否可以通行
# x:X 座标
# y:Y 座标
#--------------------------------------------------------------------------
def map_passable?(x, y)
case @vehicle_type
when 0 # 小型船
return $game_map.boat_passable?(x, y)
when 1 # 大型船
return $game_map.ship_passable?(x, y)
when 2 # 飞船
return true
else # 行走
return $game_map.passable?(x, y)
end
end
#--------------------------------------------------------------------------
# ● 判断行走通行度
# x:X 座标
# y:Y 座标
#--------------------------------------------------------------------------
def can_walk?(x, y)
last_vehicle_type = @vehicle_type # 移除交通工具类型
@vehicle_type = -1 # 暂时设置为行走
result = passable?(x, y) # 判断是否可以通行
@vehicle_type = last_vehicle_type # 回复交通工具类型
return result
end
#--------------------------------------------------------------------------
# ● 判断飞船降落通行度
# x:X 座标
# y:Y 座标
#--------------------------------------------------------------------------
def airship_land_ok?(x, y)
unless $game_map.airship_land_ok?(x, y)
return false # 指定地图图块无法降落
end
unless $game_map.events_xy(x, y).empty?
return false # 不可降落於事件之上
end
return true # 可以降落
end
#--------------------------------------------------------------------------
# ● 判断是否在交通工具上
#--------------------------------------------------------------------------
def in_vehicle?
return @vehicle_type >= 0
end
#--------------------------------------------------------------------------
# ● 判断是否在飞船之上
#--------------------------------------------------------------------------
def in_airship?
return @vehicle_type == 2
end
#--------------------------------------------------------------------------
# ● 判断是否奔跑中
#--------------------------------------------------------------------------
def dash?
return false if @move_route_forcing
return false if $game_map.disable_dash?
return false if in_vehicle?
return Input.press?(Input::A)
end
#--------------------------------------------------------------------------
# ● 判断是否是游戏测试通行状态
#--------------------------------------------------------------------------
def debug_through?
return false unless $TEST
return Input.press?(Input::CTRL)
end
#--------------------------------------------------------------------------
# ● 设置地图画面座标为画面中央
# x:X 座标
# y:Y 座标
#--------------------------------------------------------------------------
def center(x, y)
display_x = x * 256 - CENTER_X # 计算座标
unless $game_map.loop_horizontal? # 非横向回圈的场合
max_x = ($game_map.width - 17) * 256 # 计算最大值
display_x = [0, [display_x, max_x].min].max # 校正座标
end
display_y = y * 256 - CENTER_Y # 计算座标
unless $game_map.loop_vertical? # 非横向回圈的场合
max_y = ($game_map.height - 13) * 256 # 计算最大值
display_y = [0, [display_y, max_y].min].max # 校正座标
end
$game_map.set_display_pos(display_x, display_y) # 改变地图位置
end
#--------------------------------------------------------------------------
# ● 移动至指定位置
# x:X 座标
# y:Y 座标
#--------------------------------------------------------------------------
def moveto(x, y)
super
center(x, y) # 居中对齐
make_encounter_count # 初始化遇敌
if in_vehicle? # 在交通工具中的场合
vehicle = $game_map.vehicles[@vehicle_type] # 获取交通工具
vehicle.refresh # 刷新交通工具
end
end
#--------------------------------------------------------------------------
# ● 增加步数
#--------------------------------------------------------------------------
def increase_steps
super
return if @move_route_forcing
return if in_vehicle?
$game_party.increase_steps
$game_party.on_player_walk
end
#--------------------------------------------------------------------------
# ● 设置遇敌计数
#--------------------------------------------------------------------------
def encounter_count
return @encounter_count
end
#--------------------------------------------------------------------------
# ● 初始化遇敌计数
#--------------------------------------------------------------------------
def make_encounter_count
if $game_map.map_id != 0
n = $game_map.encounter_step
@encounter_count = rand(n) + rand(n) + 1 # 好比掷两个骰子
end
end
#--------------------------------------------------------------------------
# ● 判断是否在地图区域中
# area : 区域数据(RPG::Area)
#--------------------------------------------------------------------------
def in_area?(area)
return false if area == nil
return false if $game_map.map_id != area.map_id
return false if @x < area.rect.x
return false if @y < area.rect.y
return false if @x >= area.rect.x + area.rect.width
return false if @y >= area.rect.y + area.rect.height
return true
end
#--------------------------------------------------------------------------
# ● 生成遇敌队伍
#--------------------------------------------------------------------------
def make_encounter_troop_id
encounter_list = $game_map.encounter_list.clone
for area in $data_areas.values
encounter_list += area.encounter_list if in_area?(area)
end
if encounter_list.empty?
make_encounter_count
return 0
end
return encounter_list[rand(encounter_list.size)]
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if $game_party.members.size == 0
@character_name = ""
@character_index = 0
else
actor = $game_party.members[0] # 获取队伍第一人
@character_name = actor.character_name
@character_index = actor.character_index
end
end
#--------------------------------------------------------------------------
# ● 判断同位置事件是否被触发
# triggers : 触发数组
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers)
return false if $game_map.interpreter.running?
result = false
for event in $game_map.events_xy(@x, @y)
if triggers.include?(event.trigger) and event.priority_type != 1
event.start
result = true if event.starting
end
end
return result
end
#--------------------------------------------------------------------------
# ● 确认前方事件是否被触发
# triggers : 触发数组
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
return false if $game_map.interpreter.running?
result = false
front_x = $game_map.x_with_direction(@x, @direction)
front_y = $game_map.y_with_direction(@y, @direction)
for event in $game_map.events_xy(front_x, front_y)
if triggers.include?(event.trigger) and event.priority_type == 1
event.start
result = true
end
end
if result == false and $game_map.counter?(front_x, front_y)
front_x = $game_map.x_with_direction(front_x, @direction)
front_y = $game_map.y_with_direction(front_y, @direction)
for event in $game_map.events_xy(front_x, front_y)
if triggers.include?(event.trigger) and event.priority_type == 1
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# ● 判断接触事件是否被触发
# x:X 座标
# y:Y 座标
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
x -= $game_map.width if $game_map.loop_horizontal? and x == $game_map.width
y -= $game_map.height if $game_map.loop_vertical? and y == $game_map.height
return false if $game_map.interpreter.running?
result = false
for event in $game_map.events_xy(x, y)
if [1,2].include?(event.trigger) and event.priority_type == 1
event.start
result = true
end
end
return result
end
#--------------------------------------------------------------------------
# ● 方向键移动处理
#--------------------------------------------------------------------------
def move_by_input
return unless movable?
return if $game_map.interpreter.running?
case Input.dir4
when 2; move_down
when 4; move_left
when 6; move_right
when 8; move_up
end
end
#--------------------------------------------------------------------------
# ● 可以行动判定
#--------------------------------------------------------------------------
def movable?
return false if moving? # 正在移动
return false if @move_route_forcing # 强制移动路线
return false if @vehicle_getting_on # 正在乘上交通工具
return false if @vehicle_getting_off # 正在乘上交通工具
return false if $game_message.visible # 正在显示讯息
return false if in_airship? and not $game_map.airship.movable?
return true
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
last_real_x = @real_x
last_real_y = @real_y
last_moving = moving?
move_by_input
super
update_scroll(last_real_x, last_real_y)
update_vehicle
update_nonmoving(last_moving)
end
#--------------------------------------------------------------------------
# ● 更新滚动
#--------------------------------------------------------------------------
def update_scroll(last_real_x, last_real_y)
ax1 = $game_map.adjust_x(last_real_x)
ay1 = $game_map.adjust_y(last_real_y)
ax2 = $game_map.adjust_x(@real_x)
ay2 = $game_map.adjust_y(@real_y)
if ay2 > ay1 and ay2 > CENTER_Y
$game_map.scroll_down(ay2 - ay1)
end
if ax2 < ax1 and ax2 < CENTER_X
$game_map.scroll_left(ax1 - ax2)
end
if ax2 > ax1 and ax2 > CENTER_X
$game_map.scroll_right(ax2 - ax1)
end
if ay2 < ay1 and ay2 < CENTER_Y
$game_map.scroll_up(ay1 - ay2)
end
end
#--------------------------------------------------------------------------
# ● 更新交通工具
#--------------------------------------------------------------------------
def update_vehicle
return unless in_vehicle?
vehicle = $game_map.vehicles[@vehicle_type]
if @vehicle_getting_on # 正在乘上?
if not moving?
@direction = vehicle.direction # 更改方向
@move_speed = vehicle.speed # 更改移动速度
@vehicle_getting_on = false # 结束乘上操作
@transparent = true # 透明状态
end
elsif @vehicle_getting_off # 正在离开?
if not moving? and vehicle.altitude == 0
@vehicle_getting_off = false # 结束乘上操作
@vehicle_type = -1 # 清除交通工具类型
@transparent = false # 移除透明状态
end
else # 正在交通工具之上
vehicle.sync_with_player # 与角色同步移动
end
end
#--------------------------------------------------------------------------
# ● 非移动中更新
# last_moving : 之前是否正在移动
#--------------------------------------------------------------------------
def update_nonmoving(last_moving)
return if $game_map.interpreter.running?
return if moving?
return if check_touch_event if last_moving
if not $game_message.visible and Input.trigger?(Input::C)
return if get_on_off_vehicle
return if check_action_event
end
update_encounter if last_moving
end
#--------------------------------------------------------------------------
# ● 更新遇敌
#--------------------------------------------------------------------------
def update_encounter
return if $TEST and Input.press?(Input::CTRL) # 测试游戏中
return if in_vehicle? # 乘坐交通工具中
if $game_map.bush?(@x, @y) # 在草木繁茂处
@encounter_count -= 2 # 将遇敌计数减2
else # 否则
@encounter_count -= 1 # 将遇敌计数减1
end
end
#--------------------------------------------------------------------------
# ● 判断事件是否由接触触发(重叠)
#--------------------------------------------------------------------------
def check_touch_event
return false if in_airship?
return check_event_trigger_here([1,2])
end
#--------------------------------------------------------------------------
# ● 判断事件是否由确认键触发
#--------------------------------------------------------------------------
def check_action_event
return false if in_airship?
return true if check_event_trigger_here([0])
return check_event_trigger_there([0,1,2])
end
#--------------------------------------------------------------------------
# ● 上下交通工具
#--------------------------------------------------------------------------
def get_on_off_vehicle
return false unless movable?
if in_vehicle?
return get_off_vehicle
else
return get_on_vehicle
end
end
#--------------------------------------------------------------------------
# ● 乘上交通工具
# 以角色非在交通工具之上为前提
#--------------------------------------------------------------------------
def get_on_vehicle
front_x = $game_map.x_with_direction(@x, @direction)
front_y = $game_map.y_with_direction(@y, @direction)
if $game_map.airship.pos?(@x, @y) # 判断角色是否与飞船重叠
get_on_airship
return true
elsif $game_map.ship.pos?(front_x, front_y) # 判断前方是否有大型船
get_on_ship
return true
elsif $game_map.boat.pos?(front_x, front_y) # 判断前方是否有小型船
get_on_boat
return true
end
return false
end
#--------------------------------------------------------------------------
# ● 乘上小型船
#--------------------------------------------------------------------------
def get_on_boat
@vehicle_getting_on = true # 乘上交通工具标志
@vehicle_type = 0 # 设置交通工具类型
force_move_forward # 向前一步
@walking_bgm = RPG::BGM::last # 记忆行走 BGM
$game_map.boat.get_on # 上船处理
end
#--------------------------------------------------------------------------
# ● 乘上大型船
#--------------------------------------------------------------------------
def get_on_ship
@vehicle_getting_on = true # 乘上交通工具标志
@vehicle_type = 1 # 设置交通工具类型
force_move_forward # 向前一步
@walking_bgm = RPG::BGM::last # 记忆行走 BGM
$game_map.ship.get_on # 上船处理
end
#--------------------------------------------------------------------------
# ● 乘上飞船
#--------------------------------------------------------------------------
def get_on_airship
@vehicle_getting_on = true # 乘上交通工具标志
@vehicle_type = 2 # 设置交通工具类型
@through = true # 允许穿透
@walking_bgm = RPG::BGM::last # 记忆行走 BGM
$game_map.airship.get_on # 上船处理
end
#--------------------------------------------------------------------------
# ● 离开交通工具
# 以角色在交通工具之上为前提
#--------------------------------------------------------------------------
def get_off_vehicle
if in_airship? # 在飞船之上
return unless airship_land_ok?(@x, @y) # 判断是否能降落
else # 在大/小型船上
front_x = $game_map.x_with_direction(@x, @direction)
front_y = $game_map.y_with_direction(@y, @direction)
return unless can_walk?(front_x, front_y) # 判断是否能下船
end
$game_map.vehicles[@vehicle_type].get_off # 下船处理
if in_airship? # 飞船
@direction = 2 # 面向下
else # 大/小型船
force_move_forward # 向前一步
@transparent = false # 移除透明状态
end
@vehicle_getting_off = true # 开始下船处理
@move_speed = 4 # 回复移动速度
@through = false # 不允许穿透
@walking_bgm.play # 回复行走 BGM
make_encounter_count # 初始化遇敌
end
#--------------------------------------------------------------------------
# ● 强迫向前一步
#--------------------------------------------------------------------------
def force_move_forward
@through = true # 允许穿透
move_forward # 向前一步
@through = false # 不允许穿透
end
end
复制代码
复制上面的试试,LZ不会是搞笑艺人产品的受害者吧 - -
作者:
死圣
时间:
2009-1-24 05:16
首先,我不是。
其次,复制之后依然这样
作者:
越前リョーマ
时间:
2009-1-24 05:18
可能RP了……
作者:
死圣
时间:
2009-1-24 05:20
啥?啥?啥?
我好不容易又回6R做游戏了,上来就给我个这打击{/fn}
要不是我对脚本一窍不通,我,我,我——~
作者:
轩辕民
时间:
2009-1-24 05:23
{/fd}LZ不要太激动了,把工程发上来咱看看吧
作者:
死圣
时间:
2009-1-24 05:24
以下引用
轩辕民于2009-1-23 21:23:10
的发言:
LZ不要太激动了,把工程发上来咱看看吧
我只要一设置场所移动它就出错
作者:
越前リョーマ
时间:
2009-1-24 05:25
看了一下……
感觉和地图数据有关…… = =
作者:
死圣
时间:
2009-1-24 05:28
算了,我先去睡觉,没准睡醒就把问题解决啦{/cy}
886,你们先帮忙想想对策,我在这谢过了。
明天再把帖结了吧。
作者:
雪流星
时间:
2009-1-24 05:29
以下引用
死圣于2009-1-23 21:24:23
的发言:
我只要一设置场所移动它就出错
鉴定完毕
请看置顶帖 [LINE]1,#dddddd[/LINE]
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者:
妮贝雅
时间:
2009-1-24 06:47
换置顶的VX试试
作者:
轩辕民
时间:
2009-1-24 06:56
迷糊了……PB
作者:
雪流星
时间:
2009-1-24 07:30
直接
class Game_Map
attr_accessor :map
end
就可以解决了
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1