Project1

标题: 怎样使人物只有两个方向(超级玛丽一样的,只能面向左右 [打印本页]

作者: jkgf2010    时间: 2012-6-29 20:41
标题: 怎样使人物只有两个方向(超级玛丽一样的,只能面向左右
本帖最后由 jkgf2010 于 2012-6-30 08:37 编辑

.......RT,求解dsu_plus_rewardpost_czw
作者: luzhi9    时间: 2012-6-29 20:47
本帖最后由 luzhi9 于 2012-6-29 20:52 编辑

把行走图的上下用左右的覆盖掉,如果连上下移动都不要的话,就在数据库,图块,通行方向的上下去掉
作者: jkgf2010    时间: 2012-6-29 23:03
但是啊,请你想想
你把跳改成向左
然后面向右跳起来
怎么办
作者: 八宝粥先生    时间: 2012-6-30 08:32
jkgf2010 发表于 2012-6-29 23:03
但是啊,请你想想
你把跳改成向左
然后面向右跳起来

(覆盖Game_Player)你试试行么?
  1. #==============================================================================
  2. # ** Game_Player
  3. #------------------------------------------------------------------------------
  4. #  这个类用来操控地图,它所定义的内容包括决定事件执行的条件和地图视域滚动功能。
  5. #  这个类的实例被全局变量 $game_map 所引用。
  6. #==============================================================================

  7. class Game_Player < Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # * 常数
  10.   #--------------------------------------------------------------------------
  11.   CENTER_X = (544 / 2 - 16) * 8     # 屏幕中心X坐标 * 8
  12.   CENTER_Y = (416 / 2 - 16) * 8     # 屏幕中心Y坐标 * 8
  13.   #--------------------------------------------------------------------------
  14.   # * 声明实例变量
  15.   #--------------------------------------------------------------------------
  16.   attr_reader   :vehicle_type       # 目前正在乘坐的交通工具类型
  17.   #--------------------------------------------------------------------------
  18.   # * 对象初始化
  19.   #--------------------------------------------------------------------------
  20.   def initialize
  21.     super
  22.     @vehicle_type = -1
  23.     @vehicle_getting_on = false     # 判定登上交通工具的标帜
  24.     @vehicle_getting_off = false    # 判定登下交通工具的标帜
  25.     @transferring = false           # 场所移动标帜
  26.     @new_map_id = 0                 # 目标地图编号
  27.     @new_x = 0                      # 目标地图X坐标
  28.     @new_y = 0                      # 目标地图Y坐标
  29.     @new_direction = 0              # 场所移动后的最终朝向
  30.     @walking_bgm = nil              # 记忆场景BGM
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # * 判定交通工具是否正在停止运动
  34.   #--------------------------------------------------------------------------
  35.   def stopping?
  36.     return false if @vehicle_getting_on
  37.     return false if @vehicle_getting_off
  38.     return super
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # * 场所移动设置预定
  42.   #     map_id    : 地图编号
  43.   #     x         : 地图X坐标
  44.   #     y         : 地图Y坐标
  45.   #     direction : 场所移动后的最终朝向
  46.   #--------------------------------------------------------------------------
  47.   def reserve_transfer(map_id, x, y, direction)
  48.     @transferring = true
  49.     @new_map_id = map_id
  50.     @new_x = x
  51.     @new_y = y
  52.     @new_direction = direction
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # * 判定场所移动是否被预定设置
  56.   #--------------------------------------------------------------------------
  57.   def transfer?
  58.     return @transferring
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # * 执行场所移动指令
  62.   #--------------------------------------------------------------------------
  63.   def perform_transfer
  64.     return unless @transferring
  65.     @transferring = false
  66.     set_direction(@new_direction)
  67.     if $game_map.map_id != @new_map_id
  68.       $game_map.setup(@new_map_id)     # 移动到其他地图
  69.     end
  70.     moveto(@new_x, @new_y)
  71.     @walking_bgm = $game_map.map.bgm
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # * 判定地图是否可以通行(总判定)
  75.   #     x : 地图X坐标
  76.   #     y : 地图Y坐标
  77.   #--------------------------------------------------------------------------
  78.   def map_passable?(x, y)
  79.     case @vehicle_type
  80.     when 0  # 舟
  81.       return $game_map.boat_passable?(x, y)
  82.     when 1  # 船
  83.       return $game_map.ship_passable?(x, y)
  84.     when 2  # 飞艇
  85.       return true
  86.     else    # 行走
  87.       return $game_map.passable?(x, y)
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # * 判定地图是否可行走
  92.   #     x : 地图X坐标
  93.   #     y : 地图Y坐标
  94.   #--------------------------------------------------------------------------
  95.   def can_walk?(x, y)
  96.     last_vehicle_type = @vehicle_type   # 移除交通工具类型
  97.     @vehicle_type = -1                  # 暂时设置为步行状态
  98.     result = passable?(x, y)            # 判定通行度
  99.     @vehicle_type = last_vehicle_type   # 还原交通工具类型
  100.     return result
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # * 判定飞艇是否可着陆
  104.   #     x : 地图X坐标
  105.   #     y : 地图Y坐标
  106.   #--------------------------------------------------------------------------
  107.   def airship_land_ok?(x, y)
  108.     unless $game_map.airship_land_ok?(x, y)
  109.       return false    # 地图通行度设定为不允许空艇着陆
  110.     end
  111.     unless $game_map.events_xy(x, y).empty?
  112.       return false    # 有事件块的地方无法着陆
  113.     end
  114.     return true       # 可以着陆
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # * 判定是否正在驾驶某种交通工具
  118.   #--------------------------------------------------------------------------
  119.   def in_vehicle?
  120.     return @vehicle_type >= 0
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # * 判定是否正在驾驶空艇
  124.   #--------------------------------------------------------------------------
  125.   def in_airship?
  126.     return @vehicle_type == 2
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # * 跑步状态判定
  130.   #--------------------------------------------------------------------------
  131.   def dash?
  132.     return false if @move_route_forcing
  133.     return false if $game_map.disable_dash?
  134.     return false if in_vehicle?
  135.     return Input.press?(Input::A)
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # * 判定是否处于DEBUG状态下无视通行度的状态
  139.   #--------------------------------------------------------------------------
  140.   def debug_through?
  141.     return false unless $TEST
  142.     return Input.press?(Input::CTRL)
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # * 将地图显示位置设置于荧幕正中央
  146.   #     x : X坐标
  147.   #     y : Y坐标
  148.   #--------------------------------------------------------------------------
  149.   def center(x, y)
  150.     display_x = x * 256 - CENTER_X                    # 计算坐标
  151.     unless $game_map.loop_horizontal?                 # 不横向循环?
  152.       max_x = ($game_map.width - 17) * 256            # 计算最大值
  153.       display_x = [0, [display_x, max_x].min].max     # 坐标调校
  154.     end
  155.     display_y = y * 256 - CENTER_Y                    # 计算坐标
  156.     unless $game_map.loop_vertical?                   # 不纵向循环?
  157.       max_y = ($game_map.height - 13) * 256           # 计算最大值
  158.       display_y = [0, [display_y, max_y].min].max     # 坐标调校
  159.     end
  160.     $game_map.set_display_pos(display_x, display_y)   # 调整地图显示位置
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # * 移动至指定位置
  164.   #     x : 地图X坐标
  165.   #     y : 地图Y坐标
  166.   #--------------------------------------------------------------------------
  167.   def moveto(x, y)
  168.     super
  169.     center(x, y)                                      # 居中
  170.     make_encounter_count                              # 初始化地雷遇敌模式
  171.     if in_vehicle?                                    # 乘坐交通工具?
  172.       vehicle = $game_map.vehicles[@vehicle_type]     # 获取交通工具资讯
  173.       vehicle.refresh                                 # 更新内容资讯
  174.     end
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # * 增加步数统计值
  178.   #--------------------------------------------------------------------------
  179.   def increase_steps
  180.     super
  181.     return if @move_route_forcing
  182.     return if in_vehicle?
  183.     $game_party.increase_steps
  184.     $game_party.on_player_walk
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # * 获取地雷遇敌统计资讯
  188.   #--------------------------------------------------------------------------
  189.   def encounter_count
  190.     return @encounter_count
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # * 统计地雷遇敌资讯
  194.   #--------------------------------------------------------------------------
  195.   def make_encounter_count
  196.     if $game_map.map_id != 0
  197.       n = $game_map.encounter_step
  198.       @encounter_count = rand(n) + rand(n) + 1  # 譬如掷两个骰子
  199.     end
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # * 判定主角是否在雷区(遇敌区域)内
  203.   #     area : 遇敌区域数据(RPG::Area)
  204.   #--------------------------------------------------------------------------
  205.   def in_area?(area)
  206.     return false if area == nil
  207.     return false if $game_map.map_id != area.map_id
  208.     return false if @x < area.rect.x
  209.     return false if @y < area.rect.y
  210.     return false if @x >= area.rect.x + area.rect.width
  211.     return false if @y >= area.rect.y + area.rect.height
  212.     return true
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # * 创建地雷遇敌队伍编号
  216.   #--------------------------------------------------------------------------
  217.   def make_encounter_troop_id
  218.     encounter_list = $game_map.encounter_list.clone
  219.     for area in $data_areas.values
  220.       encounter_list += area.encounter_list if in_area?(area)
  221.     end
  222.     if encounter_list.empty?
  223.       make_encounter_count
  224.       return 0
  225.     end
  226.     return encounter_list[rand(encounter_list.size)]
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # * 更新内容资讯
  230.   #--------------------------------------------------------------------------
  231.   def refresh
  232.     if $game_party.members.size == 0
  233.       @character_name = ""
  234.       @character_index = 0
  235.     else
  236.       actor = $game_party.members[0]   # 获取领队主角资讯
  237.       @character_name = actor.character_name
  238.       @character_index = actor.character_index
  239.     end
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # * 判定与主角处于相同位置的事件块是否被触发
  243.   #     triggers : 触发阵列
  244.   #--------------------------------------------------------------------------
  245.   def check_event_trigger_here(triggers)
  246.     return false if $game_map.interpreter.running?
  247.     result = false
  248.     for event in $game_map.events_xy(@x, @y)
  249.       if triggers.include?(event.trigger) and event.priority_type != 1
  250.         event.start
  251.         result = true if event.starting
  252.       end
  253.     end
  254.     return result
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # * 判定正面的事件块是否被触发
  258.   #     triggers : 触发阵列
  259.   #--------------------------------------------------------------------------
  260.   def check_event_trigger_there(triggers)
  261.     return false if $game_map.interpreter.running?
  262.     result = false
  263.     front_x = $game_map.x_with_direction(@x, @direction)
  264.     front_y = $game_map.y_with_direction(@y, @direction)
  265.     for event in $game_map.events_xy(front_x, front_y)
  266.       if triggers.include?(event.trigger) and event.priority_type == 1
  267.         event.start
  268.         result = true
  269.       end
  270.     end
  271.     if result == false and $game_map.counter?(front_x, front_y)
  272.       front_x = $game_map.x_with_direction(front_x, @direction)
  273.       front_y = $game_map.y_with_direction(front_y, @direction)
  274.       for event in $game_map.events_xy(front_x, front_y)
  275.         if triggers.include?(event.trigger) and event.priority_type == 1
  276.           event.start
  277.           result = true
  278.         end
  279.       end
  280.     end
  281.     return result
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # * 判定一触即发的事件块是否被触发
  285.   #     x : 地图X坐标
  286.   #     y : 地图Y坐标
  287.   #--------------------------------------------------------------------------
  288.   def check_event_trigger_touch(x, y)
  289.     return false if $game_map.interpreter.running?
  290.     result = false
  291.     for event in $game_map.events_xy(x, y)
  292.       if [1,2].include?(event.trigger) and event.priority_type == 1
  293.         event.start
  294.         result = true
  295.       end
  296.     end
  297.     return result
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # * 通过方向键输入资讯来处理主角移动
  301.   #--------------------------------------------------------------------------
  302.   def move_by_input
  303.     return unless movable?
  304.     return if $game_map.interpreter.running?
  305.     case Input.dir4
  306.     when 4;  move_left
  307.     when 6;  move_right
  308.     end
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # * 判定通行度
  312.   #--------------------------------------------------------------------------
  313.   def movable?
  314.     return false if moving?                     # 移动中?
  315.     return false if @move_route_forcing         # 受移动轨迹指令控制?
  316.     return false if @vehicle_getting_on         # 正在登上交通工具?
  317.     return false if @vehicle_getting_off        # 正在登下交通工具?
  318.     return false if $game_message.visible       # 正在显示文本讯息?
  319.     return false if in_airship? and not $game_map.airship.movable?
  320.     return true
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # * 更新帧
  324.   #--------------------------------------------------------------------------
  325.   def update
  326.     last_real_x = @real_x
  327.     last_real_y = @real_y
  328.     last_moving = moving?
  329.     move_by_input
  330.     super
  331.     update_scroll(last_real_x, last_real_y)
  332.     update_vehicle
  333.     update_nonmoving(last_moving)
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # * 更新视域移动内容资讯
  337.   #--------------------------------------------------------------------------
  338.   def update_scroll(last_real_x, last_real_y)
  339.     ax1 = $game_map.adjust_x(last_real_x)
  340.     ay1 = $game_map.adjust_y(last_real_y)
  341.     ax2 = $game_map.adjust_x(@real_x)
  342.     ay2 = $game_map.adjust_y(@real_y)
  343.     if ay2 > ay1 and ay2 > CENTER_Y
  344.       $game_map.scroll_down(ay2 - ay1)
  345.     end
  346.     if ax2 < ax1 and ax2 < CENTER_X
  347.       $game_map.scroll_left(ax1 - ax2)
  348.     end
  349.     if ax2 > ax1 and ax2 > CENTER_X
  350.       $game_map.scroll_right(ax2 - ax1)
  351.     end
  352.     if ay2 < ay1 and ay2 < CENTER_Y
  353.       $game_map.scroll_up(ay1 - ay2)
  354.     end
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # * 更新交通工具资讯
  358.   #--------------------------------------------------------------------------
  359.   def update_vehicle
  360.     return unless in_vehicle?
  361.     vehicle = $game_map.vehicles[@vehicle_type]
  362.     if @vehicle_getting_on                    # 正在登上交通工具?
  363.       if not moving?
  364.         @direction = vehicle.direction        # 调整方向
  365.         @move_speed = vehicle.speed           # 调整移动速度
  366.         @vehicle_getting_on = false           # 完成登上交通工具的操作
  367.         @transparent = true                   # 主角步行图透明化处理
  368.       end
  369.     elsif @vehicle_getting_off                # 正在登下交通工具?
  370.       if not moving? and vehicle.altitude == 0
  371.         @vehicle_getting_off = false          # 完成登上交通工具的操作
  372.         @vehicle_type = -1                    # 当前所乘交通工具值清零
  373.         @transparent = false                  # 取消主角步行图透明化处理
  374.       end
  375.     else                                      # 正在驾驶交通工具?
  376.       vehicle.sync_with_player                # 与主角同时同方向移动
  377.     end
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # * 未移动时的处理
  381.   #     last_moving : 事先移动了么?
  382.   #--------------------------------------------------------------------------
  383.   def update_nonmoving(last_moving)
  384.     return if $game_map.interpreter.running?
  385.     return if moving?
  386.     return if check_touch_event if last_moving
  387.     if not $game_message.visible and Input.trigger?(Input::C)
  388.       return if get_on_off_vehicle
  389.       return if check_action_event
  390.     end
  391.     update_encounter if last_moving
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # * 更新地雷遇敌倒数步数资讯
  395.   #--------------------------------------------------------------------------
  396.   def update_encounter
  397.     return if $TEST and Input.press?(Input::CTRL)   # 测试游戏中按下Ctrl键?
  398.     return if in_vehicle?                           # 正在驾驶交通工具?
  399.     if $game_map.bush?(@x, @y)                      # 在草木茂密处?
  400.       @encounter_count -= 2                         # 倒数步数-2
  401.     else                                            # 不在草木茂密处?
  402.       @encounter_count -= 1                         # 倒数步数-1
  403.     end
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # * 判定一触即发的事件块 (重叠判定)
  407.   #--------------------------------------------------------------------------
  408.   def check_touch_event
  409.     return false if in_airship?
  410.     return check_event_trigger_here([1,2])
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # * 判定按下[确定]键触发的事件块
  414.   #--------------------------------------------------------------------------
  415.   def check_action_event
  416.     return false if in_airship?
  417.     return true if check_event_trigger_here([0])
  418.     return check_event_trigger_there([0,1,2])
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # * 登上/登下交通工具
  422.   #--------------------------------------------------------------------------
  423.   def get_on_off_vehicle
  424.     return false unless movable?
  425.     if in_vehicle?
  426.       return get_off_vehicle
  427.     else
  428.       return get_on_vehicle
  429.     end
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # * 登上交通工具
  433.   #    假使条件:当前主角未在驾驶交通工具
  434.   #--------------------------------------------------------------------------
  435.   def get_on_vehicle
  436.     front_x = $game_map.x_with_direction(@x, @direction)
  437.     front_y = $game_map.y_with_direction(@y, @direction)
  438.     if $game_map.airship.pos?(@x, @y)       # 与飞艇坐标重叠?
  439.       get_on_airship
  440.       return true
  441.     elsif $game_map.ship.pos?(front_x, front_y)   # 主角前面有舟?
  442.       get_on_ship
  443.       return true
  444.     elsif $game_map.boat.pos?(front_x, front_y)   # 主角前面有船?
  445.       get_on_boat
  446.       return true
  447.     end
  448.     return false
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # * 登上舟
  452.   #--------------------------------------------------------------------------
  453.   def get_on_boat
  454.     @vehicle_getting_on = true        # 正在登上交通工具的标帜
  455.     @vehicle_type = 0                 # 设置交通工具种类
  456.     force_move_forward                # 主角前进一步
  457.     @walking_bgm = RPG::BGM::last     # 记忆场景BGM
  458.     $game_map.boat.get_on             # 处理登上交通工具的进程
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # * 登上船
  462.   #--------------------------------------------------------------------------
  463.   def get_on_ship
  464.     @vehicle_getting_on = true        # 正在登上交通工具的标帜
  465.     @vehicle_type = 1                 # 设置交通工具种类
  466.     force_move_forward                # 主角前进一步
  467.     @walking_bgm = RPG::BGM::last     # 记忆场景BGM
  468.     $game_map.ship.get_on             # 处理登上交通工具的进程
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # * 登上飞艇
  472.   #--------------------------------------------------------------------------
  473.   def get_on_airship
  474.     @vehicle_getting_on = true        # 开始登上飞艇的操作标帜
  475.     @vehicle_type = 2                 # 设置交通工具种类
  476.     @through = true                   # 启用通行度开放状态
  477.     @walking_bgm = RPG::BGM::last     # 记忆场景BGM
  478.     $game_map.airship.get_on          # 处理登上交通工具的进程
  479.   end
  480.   #--------------------------------------------------------------------------
  481.   # * 登下交通工具
  482.   #    假使条件:当前主角正在驾驶交通工具
  483.   #--------------------------------------------------------------------------
  484.   def get_off_vehicle
  485.     if in_airship?                                # 飞艇?
  486.       return unless airship_land_ok?(@x, @y)      # 不能着陆?
  487.     else                                          # 舟/船?
  488.       front_x = $game_map.x_with_direction(@x, @direction)
  489.       front_y = $game_map.y_with_direction(@y, @direction)
  490.       return unless can_walk?(front_x, front_y)   # 不能登陆?
  491.     end
  492.     $game_map.vehicles[@vehicle_type].get_off     # 处理登下交通工具的进程
  493.     if in_airship?                                # 飞艇?
  494.       @direction = 2                              # 方向朝下
  495.     else                                          # 舟/船?
  496.       force_move_forward                          # 前进一步
  497.       @transparent = false                        # 取消主角步行图透明化处理
  498.     end
  499.     @vehicle_getting_off = true                 # 开始登下交通工具的操作标帜
  500.     @move_speed = 4                             # 还原主角移动速度
  501.     @through = false                            # 禁用通行度开放状态
  502.     @walking_bgm.play                           # 还原场景BGM
  503.     make_encounter_count                        # 初始化地雷遇敌资讯
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # * 强制前进一步
  507.   #--------------------------------------------------------------------------
  508.   def force_move_forward
  509.     @through = true         # 启用通行度开放状态
  510.     move_forward            # 前进一步
  511.     @through = false        # 禁用通行度开放状态
  512.   end
  513. end
复制代码

作者: jkgf2010    时间: 2012-6-30 08:39
唉,初一同
但是脚本深深的无力感
作者: jkgf2010    时间: 2012-6-30 08:45
试了,好似没用哎


‘‘──jkgf2010于2012-6-30 08:45补充以下内容:

有点想用方向固定了
’’
作者: jkgf2010    时间: 2012-6-30 09:23
除了少五行好像真的没有用
作者: jkgf2010    时间: 2012-6-30 11:12
就是让VX像超级玛丽一样
不会面向上面或下面
而且现在我最纠结的就是无法同时让几个事件点发动
还有下落的时候不能左右动




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