设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3569|回复: 7
打印 上一主题 下一主题

[已经过期] 4V求一个真八方向和八方向待机脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2010-8-10
帖子
46
跳转到指定楼层
1
 楼主| 发表于 2013-3-9 01:55:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 aa479094467 于 2013-3-9 01:56 编辑

求这样的脚本也是为了大家,希望能有高手帮忙做下,造福一下用VA的作者。
八方行走和行走待机动画的规格如下 8X8的:


这个是行走图




这个是待机图

点评

LBQ
自行屏贴格式  发表于 2013-3-11 06:33

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2008-1-22
帖子
208
2
发表于 2013-3-9 23:15:47 | 只看该作者
主站上不是有VA的八方向脚本吗?待机动画的话可以用事件解决,没必要非得搞这种8X8吧。
blog:http://blog.sina.com.cn/xyjntdsm
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
19 小时
注册时间
2013-2-13
帖子
16
3
发表于 2013-3-10 15:23:00 | 只看该作者

点评

你真的看清楚帖子内容了吗? 八方行走和行走待机动画的规格如1L 8X8的 你给的这个我早用过了,不仅帧数少,而且停止时方向只能上下左右  发表于 2013-3-10 15:28
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
19 小时
注册时间
2013-2-13
帖子
16
4
发表于 2013-3-10 15:29:34 | 只看该作者
我自己做的
RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url=http://www.66rpg.com/]http://www.66rpg.com/[/url],使用和转载请保留此信息
  3. #==============================================================================
  4. ###########################################################################################################################
  5. ###########################################################################################################################
  6. # 脚本功能:八方向走。
  7.  
  8. # 更新日期:2013年1月12日
  9.  
  10. # 更新内容:增加斜方向触发,增加斜方向面向角色(1步之内)
  11.  
  12. # 使用方法:将本脚本插入到main之前。如果你使用了雅土版的八方向走脚本,请确保这个脚本的顺序位置,在雅土八方向走脚本的后面。
  13.  
  14. # 预先处理:请输入每一步的帧数和总共可用的方向数
  15.  
  16. $c3_每一步的帧数 = 5
  17. $c3_总共可用的方向数 = 8 #——建议不要修改这个。如果要伪8方向的,就用伪的好了。
  18.  
  19. # 图片处理与功能说明:
  20.  
  21. # 1、每一步的帧数:
  22. #     众所周知,RMXP的移动行走图是一个方向共有4帧,很多人都觉得这个帧数有点少。
  23. # 使用这个脚本之后,只要将 $c3_每一步的帧数 这个变量设置一个需要的帧数即可修改
  24. # 单方向移动帧数为相应输入值。修改后,需要用photoshop将所有用到的素材的横排
  25. # 调整为相应帧数,比如输入了8则要将每一行设置8个图像(即每一个行走图有8列)。
  26.  
  27. # 2、可用方向调整(可用数量:4、8):
  28. #     当为4方向时没有任何变化,还是一个图4行,上左右下4个方向。
  29. #     如果想使用8方向走,将需要八方向行走的行走图在延伸扩大的画布中按照左下、右下、左上、右上继续排布图像。
  30. # 即,行走图图片从上到下的面向排列顺序为:下,左,右,上,左下,右下,左上,右上。
  31. #     至于不需要8方向走的普通的NPC(character),使用photoshop将画布向下扩大一倍即可使用。
  32. #     需要注意的是,如果需要斜方向飞鸟,请不要忘记自制素材。
  33.  
  34. # 特别提示:   
  35. #      使用本脚本前请先考虑清楚是否要做这种效果。因为使用本脚本后需要用photoshop处理character行走图素材
  36. # 虽然这种处理用photoshop定义动作只需要5分钟即可全部完成,但在制作阶段会感觉不是很爽(具体的用了才知道)
  37. # 作者的建议是,如果你没有足够的制作经验,使用这个脚本得不偿失。请确保自己的能力属于“高手”级别!
  38.  
  39. # 附赠功能:
  40. #      可以让NPC角色随机8方向走,方法是:NPC角色移动路线为“自定义”,然后自定义里面使用脚本,输入c8即可
  41. #      可以让NPC角色随机4斜角方向走,方法是:NPC角色移动路线为“自定义”,然后自定义里面使用脚本,输入c4即可
  42. #      可以使用真·斜4方向行走,参考脚本53行开始
  43.  
  44. # 作者:RPGV神 QQ:958182453
  45. ###########################################################################################################################
  46. ###########################################################################################################################
  47.  
  48. class Game_Player < Game_Character
  49.    if $c3_总共可用的方向数 == 8
  50.      def update
  51.        last_moving = moving?
  52.        unless moving? or $game_system.map_interpreter.running? or
  53.               @move_route_forcing or $game_temp.message_window_showing
  54.          # 用井号后面的东西替代前面的,就可以实现斜4方向走
  55.          case Input.dir8
  56.          when 2
  57.            move_down #move_lower_left
  58.          when 4
  59.            move_left #move_upper_left
  60.          when 6
  61.            move_right #move_lower_right
  62.          when 8
  63.            move_up #move_upper_right
  64.          when 1
  65.            move_lower_left
  66.          when 3
  67.            move_lower_right
  68.          when 7
  69.            move_upper_left
  70.          when 9
  71.            move_upper_right
  72.          end
  73.        end
  74.        # 本地变量记忆坐标
  75.        last_real_x = @real_x
  76.        last_real_y = @real_y
  77.        super
  78.        # 角色向下移动、画面上的位置在中央下方的情况下
  79.        if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
  80.          # 画面向下卷动
  81.          $game_map.scroll_down(@real_y - last_real_y)
  82.        end
  83.        # 角色向左移动、画面上的位置在中央左方的情况下
  84.        if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
  85.          # 画面向左卷动
  86.          $game_map.scroll_left(last_real_x - @real_x)
  87.        end
  88.        # 角色向右移动、画面上的位置在中央右方的情况下
  89.        if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
  90.          # 画面向右卷动
  91.          $game_map.scroll_right(@real_x - last_real_x)
  92.        end
  93.        # 角色向上移动、画面上的位置在中央上方的情况下
  94.        if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
  95.          # 画面向上卷动
  96.          $game_map.scroll_up(last_real_y - @real_y)
  97.        end
  98.        # 不在移动中的情况下
  99.        unless moving?
  100.          # 上次主角移动中的情况
  101.          if last_moving
  102.            # 与同位置的事件接触就判定为事件启动
  103.            result = check_event_trigger_here([1,2])
  104.            # 没有可以启动的事件的情况下
  105.            if result == false
  106.              # 调试模式为 ON 并且按下 CTRL 键的情况下除外
  107.              unless $DEBUG and Input.press?(Input::CTRL)
  108.                # 遇敌计数下降
  109.                if @encounter_count > 0
  110.                  @encounter_count -= 1
  111.                end
  112.              end
  113.            end
  114.          end
  115.          # 按下 C 键的情况下
  116.          if Input.trigger?(Input::C)
  117.            # 判定为同位置以及正面的事件启动
  118.            check_event_trigger_here([0])
  119.            check_event_trigger_there([0,1,2])
  120.          end
  121.        end
  122.      end
  123.      #--------------------------------------------------------------------------
  124.      # ● 正面事件的启动判定
  125.      #--------------------------------------------------------------------------
  126.      def check_event_trigger_there(triggers)
  127.        result = false
  128.        # 事件执行中的情况下
  129.        if $game_system.map_interpreter.running?
  130.          return result
  131.        end
  132.        # 计算正面坐标
  133.        new_x = @x
  134.        new_y = @y
  135.        case @direction
  136.        when 1
  137.          new_x -= 1
  138.          new_y += 1
  139.        when 2
  140.          new_y += 1
  141.        when 3
  142.          new_x += 1
  143.          new_y += 1
  144.        when 4
  145.          new_x -= 1
  146.        when 6
  147.          new_x += 1
  148.        when 7
  149.          new_x -= 1
  150.          new_y -= 1
  151.        when 8
  152.          new_y -= 1
  153.        when 9
  154.          new_x += 1
  155.          new_y -= 1
  156.        end
  157.        # 全部事件的循环
  158.        for event in $game_map.events.values
  159.          # 事件坐标与目标一致的情况下
  160.          if event.x == new_x and event.y == new_y and
  161.             triggers.include?(event.trigger)
  162.            # 跳跃中以外的情况下、启动判定是正面的事件
  163.            if not event.jumping? and not event.over_trigger?
  164.              event.start
  165.              result = true
  166.            end
  167.          end
  168.        end
  169.        # 找不到符合条件的事件的情况下
  170.        if result == false
  171.          # 正面的元件是计数器的情况下
  172.          if $game_map.counter?(new_x, new_y)
  173.            # 计算 1 元件里侧的坐标
  174.            new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  175.            new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  176.            # 全事件的循环
  177.            for event in $game_map.events.values
  178.              # 事件坐标与目标一致的情况下
  179.              if event.x == new_x and event.y == new_y and
  180.                 triggers.include?(event.trigger)
  181.                # 跳跃中以外的情况下、启动判定是正面的事件
  182.                if not event.jumping? and not event.over_trigger?
  183.                  event.start
  184.                  result = true
  185.                end
  186.              end
  187.            end
  188.          end
  189.        end
  190.        return result
  191.      end
  192.      #--------------------------------------------------------------------------
  193.      # ● 向左下移动
  194.      #--------------------------------------------------------------------------
  195.      def move_lower_left
  196.        # 没有固定面向的场合
  197.        unless @direction_fix
  198.          # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
  199.          @direction = 1#(@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
  200.        end
  201.        # 下→左、左→下 的通道可以通行的情况下
  202.        if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) or
  203.           (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
  204.          # 更新坐标
  205.          @x -= 1
  206.          @y += 1
  207.          # 增加步数
  208.          increase_steps
  209.        else
  210.          check_event_trigger_touch(@x-1, @y+1)
  211.        end
  212.      end
  213.      #--------------------------------------------------------------------------
  214.      # ● 向右下移动
  215.      #--------------------------------------------------------------------------
  216.      def move_lower_right
  217.        # 没有固定面向的场合
  218.        unless @direction_fix
  219.          # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
  220.          @direction = 3#(@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
  221.        end
  222.        # 下→右、右→下 的通道可以通行的情况下
  223.        if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 6)) or
  224.           (passable?(@x, @y, 6) and passable?(@x + 1, @y, 2))
  225.          # 更新坐标
  226.          @x += 1
  227.          @y += 1
  228.          # 增加步数
  229.          increase_steps
  230.        else
  231.          check_event_trigger_touch(@x+1, @y+1)
  232.        end
  233.      end
  234.      #--------------------------------------------------------------------------
  235.      # ● 向左上移动
  236.      #--------------------------------------------------------------------------
  237.      def move_upper_left
  238.        # 没有固定面向的场合
  239.        unless @direction_fix
  240.          # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
  241.          @direction = 7#(@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
  242.        end
  243.        # 上→左、左→上 的通道可以通行的情况下
  244.        if (passable?(@x, @y, 8) and passable?(@x, @y - 1, 4)) or
  245.           (passable?(@x, @y, 4) and passable?(@x - 1, @y, 8))
  246.          # 更新坐标
  247.          @x -= 1
  248.          @y -= 1
  249.          # 增加步数
  250.          increase_steps
  251.        else
  252.          check_event_trigger_touch(@x-1, @y-1)
  253.        end
  254.      end
  255.      #--------------------------------------------------------------------------
  256.      # ● 向右上移动
  257.      #--------------------------------------------------------------------------
  258.      def move_upper_right
  259.        # 没有固定面向的场合
  260.        unless @direction_fix
  261.          # 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
  262.          @direction = 9#(@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
  263.        end
  264.        # 上→右、右→上 的通道可以通行的情况下
  265.        if (passable?(@x, @y, 8) and passable?(@x, @y - 1, 6)) or
  266.           (passable?(@x, @y, 6) and passable?(@x + 1, @y, 8))
  267.          # 更新坐标
  268.          @x += 1
  269.          @y -= 1
  270.          # 增加步数
  271.          increase_steps
  272.        else
  273.          check_event_trigger_touch(@x+1, @y-1)
  274.        end
  275.      end
  276.      #--------------------------------------------------------------------------
  277.      # ● 雅土左下移动
  278.      #--------------------------------------------------------------------------
  279.      def move_lower_left_p
  280.        unless @direction_fix
  281.          @direction = 1
  282.        end
  283.        distance = (2 ** @move_speed) / Math.sqrt(2)
  284.        turn_left unless down1(@x, @y, distance)
  285.        turn_down if @event
  286.        turn_down unless left1(@x, @y, distance) unless @event
  287.        turn_left if @event
  288.      end
  289.      #--------------------------------------------------------------------------
  290.      # ● 雅土右下移动
  291.      #--------------------------------------------------------------------------
  292.      def move_lower_right_p
  293.        unless @direction_fix
  294.          @direction = 3
  295.        end
  296.        distance = (2 ** @move_speed) / Math.sqrt(2)
  297.        turn_right unless down1(@x, @y, distance)
  298.        turn_down if @event
  299.        turn_down unless right1(@x, @y, distance) unless @event
  300.        turn_right if @event
  301.      end
  302.      #--------------------------------------------------------------------------
  303.      # ● 雅土左上移动
  304.      #--------------------------------------------------------------------------
  305.      def move_upper_left_p
  306.        unless @direction_fix
  307.          @direction = 7
  308.        end
  309.        distance = (2 ** @move_speed) / Math.sqrt(2)
  310.        turn_left unless up1(@x, @y, distance)
  311.        turn_up if @event
  312.        turn_up unless left1(@x, @y, distance) unless @event
  313.        turn_left if @event
  314.      end
  315.      #--------------------------------------------------------------------------
  316.      # ● 雅土右上移动
  317.      #--------------------------------------------------------------------------
  318.      def move_upper_right_p
  319.        unless @direction_fix
  320.          @direction = 9
  321.        end
  322.        distance = (2 ** @move_speed) / Math.sqrt(2)
  323.        turn_right unless up1(@x, @y, distance)
  324.        turn_up if @event
  325.        turn_up unless right1(@x, @y, distance) unless @event
  326.        turn_right if @event
  327.      end
  328.    end
  329. end
  330.  
  331.  
  332. class Sprite_Character < RPG::Sprite
  333.    def update
  334.      super
  335.      # 元件 ID、文件名、色相与现在的情况存在差异的情况下
  336.      if @tile_id != @character.tile_id or
  337.         @character_name != @character.character_name or
  338.         @character_hue != @character.character_hue
  339.        # 记忆元件 ID 与文件名、色相
  340.        @tile_id = @character.tile_id
  341.        @character_name = @character.character_name
  342.        @character_hue = @character.character_hue
  343.        # 元件 ID 为有效值的情况下
  344.        if @tile_id >= 384
  345.          self.bitmap = RPG::Cache.tile($game_map.tileset_name,
  346.            @tile_id, @character.character_hue)
  347.          self.src_rect.set(0, 0, 32, 32)
  348.          self.ox = 16
  349.          self.oy = 32
  350.        # 元件 ID 为无效值的情况下
  351.        else
  352.          self.bitmap = RPG::Cache.character(@character.character_name,
  353.            @character.character_hue)
  354.          @cw = bitmap.width / $c3_每一步的帧数
  355.          if $c3_总共可用的方向数==4
  356.            @ch = bitmap.height / 4
  357.          else
  358.            @ch = bitmap.height / 8
  359.          end
  360.          self.ox = @cw / 2
  361.          self.oy = @ch
  362.        end
  363.      end
  364.      # 设置可视状态
  365.      self.visible = (not @character.transparent)
  366.      # 图形是角色的情况下
  367.      if @tile_id == 0
  368.        # 设置传送目标的矩形
  369.        sx = @character.pattern * @cw
  370.        if $c3_总共可用的方向数==8
  371.          case @character.direction
  372.          when 2
  373.            sy = 0 * @ch
  374.          when 4
  375.            sy = 1 * @ch
  376.          when 6
  377.            sy = 2 * @ch
  378.          when 8
  379.            sy = 3 * @ch
  380.          when 1
  381.            sy = 4 * @ch
  382.          when 3
  383.            sy = 5 * @ch
  384.          when 7
  385.            sy = 6 * @ch
  386.          when 9
  387.            sy = 7 * @ch
  388.          end
  389.        else
  390.          sy = (@character.direction - 2) / 2 * @ch
  391.        end
  392.        self.src_rect.set(sx, sy, @cw, @ch)
  393.      end
  394.      # 设置脚本的坐标
  395.      self.x = @character.screen_x
  396.      self.y = @character.screen_y
  397.      self.z = @character.screen_z(@ch)
  398.      # 设置不透明度、合成方式、茂密
  399.      self.opacity = @character.opacity
  400.      self.blend_type = @character.blend_type
  401.      self.bush_depth = @character.bush_depth
  402.      # 动画
  403.      if @character.animation_id != 0
  404.        animation = $data_animations[@character.animation_id]
  405.        animation(animation, true)
  406.        @character.animation_id = 0
  407.      end
  408.    end
  409. end
  410.  
  411. class Game_Character
  412.    def c8
  413.      # 随机 0~5 的分支
  414.      case rand(10)
  415.      when 0..3   # 随机
  416.        move_random
  417.      when 4   # 前进一步
  418.        move_forward
  419.      when 5   # 暂时停止
  420.        @stop_count = 0
  421.      when 6..9   #另外4方向随机
  422.        c4
  423.      end
  424.    end
  425.    def c4
  426.      case rand(5)
  427.      when 0
  428.        move_upper_left
  429.      when 1
  430.        move_upper_right
  431.      when 2
  432.        move_lower_left
  433.      when 3
  434.        move_lower_right
  435.      when 4
  436.        @stop_count = 0
  437.      end
  438.    end
  439.  
  440.    def update
  441.      # 跳跃中、移动中、停止中的分支
  442.      if jumping?
  443.        update_jump
  444.      elsif moving?
  445.        update_move
  446.      else
  447.        update_stop
  448.      end
  449.      # 动画计数超过最大值的情况下
  450.      # ※最大值等于基本值减去移动速度 * 1 的值
  451.      if @anime_count > 16*4/$c3_每一步的帧数 - @move_speed * 2
  452.        # 停止动画为 OFF 并且在停止中的情况下
  453.        if not @step_anime and @stop_count > 0
  454.          # 还原为原来的图形
  455.          @pattern = @original_pattern
  456.        # 停止动画为 ON 并且在移动中的情况下
  457.        else
  458.          # 更新图形
  459.          @pattern = (@pattern + 1) % $c3_每一步的帧数
  460.        end
  461.        # 清除动画计数
  462.        @anime_count = 0
  463.      end
  464.      # 等待中的情况下
  465.      if @wait_count > 0
  466.        # 减少等待计数
  467.        @wait_count -= 1
  468.        return
  469.      end
  470.      # 强制移动路线的场合
  471.      if @move_route_forcing
  472.        # 自定义移动
  473.        move_type_custom
  474.        return
  475.      end
  476.      # 事件执行待机中并且为锁定状态的情况下
  477.      if @starting or lock?
  478.        # 不做规则移动
  479.        return
  480.      end
  481.      # 如果停止计数超过了一定的值(由移动频度算出)
  482.      if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
  483.        # 移动类型分支
  484.        case @move_type
  485.        when 1   # 随机
  486.          move_type_random
  487.        when 2   # 接近
  488.          move_type_toward_player
  489.        when 3   # 自定义
  490.          move_type_custom
  491.        end
  492.      end
  493.    end
  494. end
  495.  
  496. class Window_Base < Window
  497.    def draw_actor_graphic(actor, x, y)
  498.      bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
  499.      cw = bitmap.width / $c3_每一步的帧数
  500.      ch = bitmap.height / $c3_总共可用的方向数
  501.      src_rect = Rect.new(0, 0, cw, ch)
  502.      self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
  503.    end
  504. end
  505.  
  506. class Game_Character
  507.    #--------------------------------------------------------------------------
  508.    # ● 面向主角的方向
  509.    #--------------------------------------------------------------------------
  510.    def turn_toward_player
  511.      # 求得与主角的坐标差
  512.      sx = @x - $game_player.x
  513.      sy = @y - $game_player.y
  514.      # 坐标相等的场合下
  515.      if sx == 0 and sy == 0
  516.        return
  517.      end
  518.      # 横侧距离长的情况下
  519.      if sx.abs > sy.abs
  520.        # 将左右方向变更为朝向主角的方向
  521.        sx > 0 ? turn_left : turn_right
  522.      # 竖侧距离长的情况下
  523.      else
  524.        # 将上下方向变更为朝向主角的方向
  525.        sy > 0 ? turn_up : turn_down
  526.      end
  527.      if sx == -1 and sy == -1
  528.        @direction = 3
  529.        @stop_count = 0
  530.      elsif sx == -1 and sy == 1
  531.        @direction = 9
  532.        @stop_count = 0
  533.      elsif sx == 1 and sy == -1
  534.        @direction = 1
  535.        @stop_count = 0
  536.      elsif sx == 1 and sy == 1
  537.        @direction = 7
  538.        @stop_count = 0
  539.      end
  540.    end
  541. end
  542.  
  543. #==============================================================================
  544. # 本脚本来自[url=http://www.66rpg.com/]http://www.66rpg.com/[/url],使用和转载请保留此信息
  545. #==============================================================================
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
19 小时
注册时间
2013-2-13
帖子
16
5
发表于 2013-3-10 15:30:49 | 只看该作者
那这个???可调的
$c3_每一步的帧数 = 8
调这个

点评

ACE用了,直接class Sprite_Character < RPG::Sprite这行弹错  发表于 2013-3-10 15:33
你确定这是RPG MAKER VA能用的脚本?  发表于 2013-3-10 15:33
在脚本16行  发表于 2013-3-10 15:31
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2010-8-10
帖子
46
6
 楼主| 发表于 2013-3-10 15:38:17 | 只看该作者
本帖最后由 aa479094467 于 2013-3-10 15:40 编辑

@RPGV神 你发的ACE根本用不了,= =  

我很想说这是RMXP用的脚本,我这是在ACE区提的问,你错区也别那么狠好吧!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
19 小时
注册时间
2013-2-13
帖子
16
7
发表于 2013-3-10 15:53:15 | 只看该作者
RGSS3 代码复制
  1. #===============================================================================
  2. #  八方向行走
  3. #    by:铅笔描绘的思念
  4. #    在Characters里添加八方向行走图(命名规范:在四方向上的基础上+_8D)
  5. #    行走动画就为8方向的。否则就会原4方向的代替8方向的。
  6. #
  7. #    八方向:数字键盘方向对应的数字
  8. #     7   8   9
  9. #      ↖ ↑ ↗
  10. #     4← 0 →6
  11. #      ↙ ↓ ↘
  12. #     1   2   3
  13. #===============================================================================
  14. #==============================================================================
  15. # ■ Game_Player
  16. #==============================================================================
  17. class Game_Player < Game_Character
  18.   #--------------------------------------------------------------------------
  19.   # ● 八方向移动
  20.   #    d    :1、3、7、9 对应小键盘的四个方向
  21.   #--------------------------------------------------------------------------
  22.   def move_eight_dir(d)
  23.     move_diagonal(d + 3,2) if d == 1 || d == 3
  24.     move_diagonal(d - 3,8) if d == 7 || d == 9
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 八方向按键
  28.   #--------------------------------------------------------------------------
  29.   def move_by_input
  30.     return if !movable? || $game_map.interpreter.running?
  31.     case Input.dir8
  32.      when 1,3,7,9;  move_eight_dir(Input.dir8)
  33.      when 2,4,6,8;  move_straight(Input.dir4)
  34.     end
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 斜向移动
  38.   #     horz : 横向(4 or 6)
  39.   #     vert : 纵向(2 or 8)
  40.   #--------------------------------------------------------------------------
  41.   def move_diagonal(horz, vert)
  42.     @followers.move if diagonal_passable?(@x, @y, horz, vert)
  43.     @move_succeed = diagonal_passable?(x, y, horz, vert)
  44.     last_steps = $game_party.steps
  45.     if @move_succeed
  46.       @x = $game_map.round_x_with_direction(@x, horz)
  47.       @y = $game_map.round_y_with_direction(@y, vert)
  48.       @real_x = $game_map.x_with_direction(@x, reverse_dir(horz))
  49.       @real_y = $game_map.y_with_direction(@y, reverse_dir(vert))
  50.       increase_steps
  51.       # 八方向移动正确步数计算
  52.       if $game_party.steps - last_steps == 2
  53.         $game_party.decrease_steps
  54.       end
  55.     end
  56.     set_direction(2) if horz == 4 && vert == 2
  57.     set_direction(4) if horz == 4 && vert == 8
  58.     set_direction(6) if horz == 6 && vert == 2
  59.     set_direction(8) if horz == 6 && vert == 8
  60.   end
  61. end
  62. #==============================================================================
  63. # ■ Game_Party
  64. #==============================================================================
  65. class Game_Party < Game_Unit
  66.   def decrease_steps
  67.     @steps -= 1
  68.   end
  69. end
  70. #==============================================================================
  71. # ■ Sprite_Character
  72. #==============================================================================
  73. class Sprite_Character < Sprite_Base
  74.   #--------------------------------------------------------------------------
  75.   # ● 更新源位图(Source Bitmap)
  76.   #--------------------------------------------------------------------------
  77.   alias update_bitmap_8dir update_bitmap
  78.   def update_bitmap
  79.     update_bitmap_8dir
  80.     if @tile_id > 0            
  81.       @enable_slant = false
  82.       return
  83.     end
  84.     unless graphic_changed?
  85.      @enable_slant = true
  86.    end
  87.  
  88.     begin
  89.       @character_name_slant = "#{@character_name}_8D"
  90.       Cache.character(@character_name_slant)  
  91.     rescue
  92.       @enable_slant = false
  93.     end
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 更新源矩形
  97.   #--------------------------------------------------------------------------
  98.   alias update_src_rect_8dir update_src_rect  
  99.   def update_src_rect
  100.     return if @tile_id > 0      
  101.     if @enable_slant && @character != $game_map.events
  102.       update_src_rect_for_slant
  103.     else
  104.       update_src_rect_8dir
  105.     end
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 更新斜方向传送矩形
  109.   #--------------------------------------------------------------------------
  110.   def update_src_rect_for_slant
  111.     index = @character.character_index
  112.     pattern = @character.pattern < 8 ? @character.pattern : 1
  113.     sx = (index % 4 * 8 + pattern) * @cw
  114.     case Input.dir8 % 2
  115.     when 0  # 上下左右
  116.       if @last_slant
  117.         self.bitmap = Cache.character(@character_name)
  118.         @last_slant = false
  119.       end
  120.     else   
  121.       unless @last_slant
  122.         self.bitmap = Cache.character(@character_name_slant)
  123.         @last_slant = true
  124.       end
  125.     end
  126.       sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  127.     self.src_rect.set(sx, sy, @cw, @ch)
  128.   end
  129. end

点评

你拿我帖子里的行走图去试试就知道了。 。  发表于 2013-3-10 16:03
我又改了一下,试试  发表于 2013-3-10 15:57
我都说了铅笔描绘的思念的八方向不行,和我需求的完全不一样,他的那个太简陋了。  发表于 2013-3-10 15:56
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
19 小时
注册时间
2013-2-13
帖子
16
8
发表于 2013-3-10 15:53:41 | 只看该作者
试试这个???

点评

不行,像我1L上贴的素材,在游戏里是用不了的,而且这个脚本的停止时方向只有上下左右,格外蛋疼。  发表于 2013-3-10 15:58
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 06:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表