Project1

标题: 我的八方向脚本怎么只显示四方向行走图-.-? [打印本页]

作者: jhhuang    时间: 2009-5-31 17:31
标题: 我的八方向脚本怎么只显示四方向行走图-.-?
http://rpg.blue/web/htm/news320.htm
我的行走图是4x8人物的.
但是行走的时候,下左右上没问题,
斜着走的时候行走图还是前面4行(下左右上),而不是使用5~8行的行走图...为什么?

  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. ###########################################################################################################################
  5. # 脚本功能:八方向走与多帧移动之图片修正 + 人物跟随。

  6. # 更新日期:2005年8月6日

  7. # 更新内容:增加斜方向触发,增加斜方向面向角色(1步之内)

  8. # 使用方法:将本脚本插入到main之前。如果你使用了雅土版的八方向走脚本,请确保这个脚本的顺序位置,在雅土八方向走脚本的后面。

  9. # 预先处理:请输入每一步的帧数和总共可用的方向数

  10. $c3_每一步的帧数 = 4
  11. $c3_总共可用的方向数 = 8 #——建议不要修改这个。如果要伪8方向的,就用伪的好了。

  12. # 图片处理与功能说明:

  13. # 1、每一步的帧数:
  14. #    众所周知,RMXP的移动行走图是一个方向共有4帧,很多人都觉得这个帧数有点少。
  15. # 使用这个脚本之后,只要将 $c3_每一步的帧数 这个变量设置一个需要的帧数即可修改
  16. # 单方向移动帧数为相应输入值。修改后,需要用photoshop将所有用到的素材的横排
  17. # 调整为相应帧数,比如输入了8则要将每一行设置8个图像(即每一个行走图有8列)。

  18. # 2、可用方向调整(可用数量:4、8):
  19. #    当为4方向时没有任何变化,还是一个图4行,上左右下4个方向。
  20. #    如果想使用8方向走,将需要八方向行走的行走图在延伸扩大的画布中按照左下、右下、左上、右上继续排布图像。
  21. # 即,行走图图片从上到下的面向排列顺序为:下,左,右,上,左下,右下,左上,右上。
  22. #    至于不需要8方向走的普通的NPC(character),使用photoshop将画布向下扩大一倍即可使用。
  23. #    需要注意的是,如果需要斜方向飞鸟,请不要忘记自制素材。

  24. # 特别提示:   
  25. #     使用本脚本前请先考虑清楚是否要做这种效果。因为使用本脚本后需要用photoshop处理character行走图素材
  26. # 虽然这种处理用photoshop定义动作只需要5分钟即可全部完成,但在制作阶段会感觉不是很爽(具体的用了才知道)
  27. # 作者的建议是,如果你没有足够的制作经验,使用这个脚本得不偿失。请确保自己的能力属于“高手”级别!

  28. # 附赠功能:
  29. #     可以让NPC角色随机8方向走,方法是:NPC角色移动路线为“自定义”,然后自定义里面使用脚本,输入c8即可
  30. #     可以让NPC角色随机4斜角方向走,方法是:NPC角色移动路线为“自定义”,然后自定义里面使用脚本,输入c4即可
  31. #     可以使用真·斜4方向行走,参考脚本53行开始

  32. # 作者:carol3
  33. ###########################################################################################################################
  34. ###########################################################################################################################

  35. class Game_Player < Game_Character
  36.   if $c3_总共可用的方向数 == 8
  37.     def update
  38.       last_moving = moving?
  39.       unless moving? or $game_system.map_interpreter.running? or
  40.              @move_route_forcing or $game_temp.message_window_showing
  41.         # 用井号后面的东西替代前面的,就可以实现斜4方向走
  42.         case Input.dir8
  43.         when 2
  44.           move_down #move_lower_left
  45.         when 4
  46.           move_left #move_upper_left
  47.         when 6
  48.           move_right #move_lower_right
  49.         when 8
  50.           move_up #move_upper_right
  51.         when 1
  52.           move_lower_left
  53.         when 3
  54.           move_lower_right
  55.         when 7
  56.           move_upper_left
  57.         when 9
  58.           move_upper_right
  59.         end
  60.       end
  61.       # 本地变量记忆坐标
  62.       last_real_x = @real_x
  63.       last_real_y = @real_y
  64.       super
  65.       # 角色向下移动、画面上的位置在中央下方的情况下
  66.       if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
  67.         # 画面向下卷动
  68.         $game_map.scroll_down(@real_y - last_real_y)
  69.       end
  70.       # 角色向左移动、画面上的位置在中央左方的情况下
  71.       if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
  72.         # 画面向左卷动
  73.         $game_map.scroll_left(last_real_x - @real_x)
  74.       end
  75.       # 角色向右移动、画面上的位置在中央右方的情况下
  76.       if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
  77.         # 画面向右卷动
  78.         $game_map.scroll_right(@real_x - last_real_x)
  79.       end
  80.       # 角色向上移动、画面上的位置在中央上方的情况下
  81.       if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
  82.         # 画面向上卷动
  83.         $game_map.scroll_up(last_real_y - @real_y)
  84.       end
  85.       # 不在移动中的情况下
  86.       unless moving?
  87.         # 上次主角移动中的情况
  88.         if last_moving
  89.           # 与同位置的事件接触就判定为事件启动
  90.           result = check_event_trigger_here([1,2])
  91.           # 没有可以启动的事件的情况下
  92.           if result == false
  93.             # 调试模式为 ON 并且按下 CTRL 键的情况下除外
  94.             unless $DEBUG and Input.press?(Input::CTRL)
  95.               # 遇敌计数下降
  96.               if @encounter_count > 0
  97.                 @encounter_count -= 1
  98.               end
  99.             end
  100.           end
  101.         end
  102.         # 按下 C 键的情况下
  103.         if Input.trigger?(Input::C)
  104.           # 判定为同位置以及正面的事件启动
  105.           check_event_trigger_here([0])
  106.           check_event_trigger_there([0,1,2])
  107.         end
  108.       end
  109.     end
  110.     #--------------------------------------------------------------------------
  111.     # ● 正面事件的启动判定
  112.     #--------------------------------------------------------------------------
  113.     def check_event_trigger_there(triggers)
  114.       result = false
  115.       # 事件执行中的情况下
  116.       if $game_system.map_interpreter.running?
  117.         return result
  118.       end
  119.       # 计算正面坐标
  120.       new_x = @x
  121.       new_y = @y
  122.       case @direction
  123.       when 1
  124.         new_x -= 1
  125.         new_y += 1
  126.       when 2
  127.         new_y += 1
  128.       when 3
  129.         new_x += 1
  130.         new_y += 1
  131.       when 4
  132.         new_x -= 1
  133.       when 6
  134.         new_x += 1
  135.       when 7
  136.         new_x -= 1
  137.         new_y -= 1
  138.       when 8
  139.         new_y -= 1
  140.       when 9
  141.         new_x += 1
  142.         new_y -= 1
  143.       end
  144.       # 全部事件的循环
  145.       for event in $game_map.events.values
  146.         # 事件坐标与目标一致的情况下
  147.         if event.x == new_x and event.y == new_y and
  148.            triggers.include?(event.trigger)
  149.           # 跳跃中以外的情况下、启动判定是正面的事件
  150.           if not event.jumping? and not event.over_trigger?
  151.             event.start
  152.             result = true
  153.           end
  154.         end
  155.       end
  156.       # 找不到符合条件的事件的情况下
  157.       if result == false
  158.         # 正面的元件是计数器的情况下
  159.         if $game_map.counter?(new_x, new_y)
  160.           # 计算 1 元件里侧的坐标
  161.           new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  162.           new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  163.           # 全事件的循环
  164.           for event in $game_map.events.values
  165.             # 事件坐标与目标一致的情况下
  166.             if event.x == new_x and event.y == new_y and
  167.                triggers.include?(event.trigger)
  168.               # 跳跃中以外的情况下、启动判定是正面的事件
  169.               if not event.jumping? and not event.over_trigger?
  170.                 event.start
  171.                 result = true
  172.               end
  173.             end
  174.           end
  175.         end
  176.       end
  177.       return result
  178.     end
  179.   end
  180. end


  181. class Sprite_Character < RPG::Sprite
  182.   def update
  183.     super
  184.     # 元件 ID、文件名、色相与现在的情况存在差异的情况下
  185.     if @tile_id != @character.tile_id or
  186.        @character_name != @character.character_name or
  187.        @character_hue != @character.character_hue
  188.       # 记忆元件 ID 与文件名、色相
  189.       @tile_id = @character.tile_id
  190.       @character_name = @character.character_name
  191.       @character_hue = @character.character_hue
  192.       # 元件 ID 为有效值的情况下
  193.       if @tile_id >= 384
  194.         self.bitmap = RPG::Cache.tile($game_map.tileset_name,
  195.           @tile_id, @character.character_hue)
  196.         self.src_rect.set(0, 0, 32, 32)
  197.         self.ox = 16
  198.         self.oy = 32
  199.       # 元件 ID 为无效值的情况下
  200.       else
  201.         self.bitmap = RPG::Cache.character(@character.character_name,
  202.           @character.character_hue)
  203.         @cw = bitmap.width / $c3_每一步的帧数
  204.         if $c3_总共可用的方向数==4
  205.           @ch = bitmap.height / 4
  206.         else
  207.           @ch = bitmap.height / 8
  208.         end
  209.         self.ox = @cw / 2
  210.         self.oy = @ch
  211.       end
  212.     end
  213.     # 设置可视状态
  214.     self.visible = (not @character.transparent)
  215.     # 图形是角色的情况下
  216.     if @tile_id == 0
  217.       # 设置传送目标的矩形
  218.       sx = @character.pattern * @cw
  219.       if $c3_总共可用的方向数==8
  220.         case @character.direction
  221.         when 2
  222.           sy = 0 * @ch
  223.         when 4
  224.           sy = 1 * @ch
  225.         when 6
  226.           sy = 2 * @ch
  227.         when 8
  228.           sy = 3 * @ch
  229.         when 1
  230.           sy = 4 * @ch
  231.         when 3
  232.           sy = 5 * @ch
  233.         when 7
  234.           sy = 6 * @ch
  235.         when 9
  236.           sy = 7 * @ch
  237.         end
  238.       else
  239.         sy = (@character.direction - 2) / 2 * @ch
  240.       end
  241.       self.src_rect.set(sx, sy, @cw, @ch)
  242.     end
  243.     # 设置脚本的坐标
  244.     self.x = @character.screen_x
  245.     self.y = @character.screen_y
  246.     self.z = @character.screen_z(@ch)
  247.     # 设置不透明度、合成方式、茂密
  248.     self.opacity = @character.opacity
  249.     self.blend_type = @character.blend_type
  250.     self.bush_depth = @character.bush_depth
  251.     # 动画
  252.     if @character.animation_id != 0
  253.       animation = $data_animations[@character.animation_id]
  254.       animation(animation, true)
  255.       @character.animation_id = 0
  256.     end
  257.   end
  258. end

  259. class Game_Character
  260.   def c8
  261.     # 随机 0~5 的分支
  262.     case rand(10)
  263.     when 0..3  # 随机
  264.       move_random
  265.     when 4  # 前进一步
  266.       move_forward
  267.     when 5  # 暂时停止
  268.       @stop_count = 0
  269.     when 6..9  #另外4方向随机
  270.       c4
  271.     end
  272.   end
  273.   def c4
  274.     case rand(5)
  275.     when 0
  276.       move_upper_left
  277.     when 1
  278.       move_upper_right
  279.     when 2
  280.       move_lower_left
  281.     when 3
  282.       move_lower_right
  283.     when 4
  284.       @stop_count = 0
  285.     end
  286.   end
  287.       
  288.   def update
  289.     # 跳跃中、移动中、停止中的分支
  290.     if jumping?
  291.       update_jump
  292.     elsif moving?
  293.       update_move
  294.     else
  295.       update_stop
  296.     end
  297.     # 动画计数超过最大值的情况下
  298.     # ※最大值等于基本值减去移动速度 * 1 的值
  299.     if @anime_count > 16*4/$c3_每一步的帧数 - @move_speed * 2
  300.       # 停止动画为 OFF 并且在停止中的情况下
  301.       if not @step_anime and @stop_count > 0
  302.         # 还原为原来的图形
  303.         @pattern = @original_pattern
  304.       # 停止动画为 ON 并且在移动中的情况下
  305.       else
  306.         # 更新图形
  307.         @pattern = (@pattern + 1) % $c3_每一步的帧数
  308.       end
  309.       # 清除动画计数
  310.       @anime_count = 0
  311.     end
  312.     # 等待中的情况下
  313.     if @wait_count > 0
  314.       # 减少等待计数
  315.       @wait_count -= 1
  316.       return
  317.     end
  318.     # 强制移动路线的场合
  319.     if @move_route_forcing
  320.       # 自定义移动
  321.       move_type_custom
  322.       return
  323.     end
  324.     # 事件执行待机中并且为锁定状态的情况下
  325.     if @starting or lock?
  326.       # 不做规则移动
  327.       return
  328.     end
  329.     # 如果停止计数超过了一定的值(由移动频度算出)
  330.     if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
  331.       # 移动类型分支
  332.       case @move_type
  333.       when 1  # 随机
  334.         move_type_random
  335.       when 2  # 接近
  336.         move_type_toward_player
  337.       when 3  # 自定义
  338.         move_type_custom
  339.       end
  340.     end
  341.   end
  342. end

  343. class Window_Base < Window
  344.   def draw_actor_graphic(actor, x, y)
  345.     bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
  346.     cw = bitmap.width / $c3_每一步的帧数
  347.     ch = bitmap.height / $c3_总共可用的方向数
  348.     src_rect = Rect.new(0, 0, cw, ch)
  349.     self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
  350.   end
  351. end

  352. class Game_Character
  353.   #--------------------------------------------------------------------------
  354.   # ● 面向主角的方向
  355.   #--------------------------------------------------------------------------
  356.   def turn_toward_player
  357.     # 求得与主角的坐标差
  358.     sx = @x - $game_player.x
  359.     sy = @y - $game_player.y
  360.     # 坐标相等的场合下
  361.     if sx == 0 and sy == 0
  362.       return
  363.     end
  364.     # 横侧距离长的情况下
  365.     if sx.abs > sy.abs
  366.       # 将左右方向变更为朝向主角的方向
  367.       sx > 0 ? turn_left : turn_right
  368.     # 竖侧距离长的情况下
  369.     else
  370.       # 将上下方向变更为朝向主角的方向
  371.       sy > 0 ? turn_up : turn_down
  372.     end
  373.     if sx == -1 and sy == -1
  374.       @direction = 3
  375.       @stop_count = 0
  376.     elsif sx == -1 and sy == 1
  377.       @direction = 9
  378.       @stop_count = 0
  379.     elsif sx == 1 and sy == -1
  380.       @direction = 1
  381.       @stop_count = 0
  382.     elsif sx == 1 and sy == 1
  383.       @direction = 7
  384.       @stop_count = 0
  385.     end
  386.   end
  387. end

  388. #==============================================================================
  389. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  390. #============================================================================== #==============================================================================
  391. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  392. #==============================================================================


  393. # ————————————————————————————————————

  394. # ▼▲▼ XRXS13. パーティ列車移動 ver.1.02 ▼▲▼
  395. # by fukuyama

  396. #
  397. # Train_Actor
  398. #
  399. # [email protected]
  400. # http://www4.big.or.jp/~fukuyama/rgss/Train_Actor.txt
  401. #

  402. module Train_Actor




  403. #是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果TRANSPARENT_SWITCHES_INDEX
  404. #开关打开,跟随的人物就消失了(其实只是变成透明而已)
  405. TRANSPARENT_SWITCH = false
  406. TRANSPARENT_SWITCHES_INDEX = 20
  407. #举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。





  408. #跟随人数的最大数目,可以更改为2、3什么的。
  409. TRAIN_ACTOR_SIZE_MAX = 1





  410. # 定数
  411. #Input::DOWN = 2
  412. #Input::LEFT = 4
  413. #Input::RIGHT = 6
  414. #Input::UP = 6
  415. DOWN_LEFT = 1
  416. DOWN_RIGHT = 3
  417. UP_LEFT = 7
  418. UP_RIGHT = 9
  419. JUMP = 5

  420. class Game_Party_Actor < Game_Character
  421. def initialize
  422. super()
  423. @through = true
  424. end
  425. def setup(actor)
  426. # キャラクターのファイル名と色相を設定
  427. if actor != nil
  428. @character_name = actor.character_name
  429. @character_hue = actor.character_hue
  430. else
  431. @character_name = ""
  432. @character_hue = 0
  433. end
  434. # 不透明度と合成方法を初期化
  435. @opacity = 255
  436. @blend_type = 0
  437. end
  438. def screen_z(height = 0)
  439. if $game_player.x == @x and $game_player.y == @y
  440. return $game_player.screen_z(height) - 1
  441. end
  442. super(height)
  443. end
  444. #--------------------------------------------------------------------------
  445. # ● 下に移動
  446. # turn_enabled : その場での向き変更を許可するフラグ
  447. #--------------------------------------------------------------------------
  448. def move_down(turn_enabled = true)
  449. # 下を向く
  450. if turn_enabled
  451. turn_down
  452. end
  453. # 通行可能な場合
  454. if passable?(@x, @y, Input::DOWN)
  455. # 下を向く
  456. turn_down
  457. # 座標を更新
  458. @y += 1
  459. end
  460. end
  461. #--------------------------------------------------------------------------
  462. # ● 左に移動
  463. # turn_enabled : その場での向き変更を許可するフラグ
  464. #--------------------------------------------------------------------------
  465. def move_left(turn_enabled = true)
  466. # 左を向く
  467. if turn_enabled
  468. turn_left
  469. end
  470. # 通行可能な場合
  471. if passable?(@x, @y, Input::LEFT)
  472. # 左を向く
  473. turn_left
  474. # 座標を更新
  475. @x -= 1
  476. end
  477. end
  478. #--------------------------------------------------------------------------
  479. # ● 右に移動
  480. # turn_enabled : その場での向き変更を許可するフラグ
  481. #--------------------------------------------------------------------------
  482. def move_right(turn_enabled = true)
  483. # 右を向く
  484. if turn_enabled
  485. turn_right
  486. end
  487. # 通行可能な場合
  488. if passable?(@x, @y, Input::RIGHT)
  489. # 右を向く
  490. turn_right
  491. # 座標を更新
  492. @x += 1
  493. end
  494. end
  495. #--------------------------------------------------------------------------
  496. # ● 上に移動
  497. # turn_enabled : その場での向き変更を許可するフラグ
  498. #--------------------------------------------------------------------------
  499. def move_up(turn_enabled = true)
  500. # 上を向く
  501. if turn_enabled
  502. turn_up
  503. end
  504. # 通行可能な場合
  505. if passable?(@x, @y, Input::UP)
  506. # 上を向く
  507. turn_up
  508. # 座標を更新
  509. @y -= 1
  510. end
  511. end
  512. #--------------------------------------------------------------------------
  513. # ● 左下に移動
  514. #--------------------------------------------------------------------------
  515. def move_lower_left
  516. # 向き固定でない場合
  517. unless @direction_fix
  518. # 右向きだった場合は左を、上向きだった場合は下を向く
  519. @direction = 1
  520. end
  521. # 下→左、左→下 のどちらかのコースが通行可能な場合
  522. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  523. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  524. # 座標を更新
  525. @x -= 1
  526. @y += 1
  527. end
  528. end
  529. #--------------------------------------------------------------------------
  530. # ● 右下に移動
  531. #--------------------------------------------------------------------------
  532. def move_lower_right
  533. # 向き固定でない場合
  534. unless @direction_fix
  535. # 左向きだった場合は右を、上向きだった場合は下を向く
  536. @direction = 3
  537. end
  538. # 下→右、右→下 のどちらかのコースが通行可能な場合
  539. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  540. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  541. # 座標を更新
  542. @x += 1
  543. @y += 1
  544. end
  545. end
  546. #--------------------------------------------------------------------------
  547. # ● 左上に移動
  548. #--------------------------------------------------------------------------
  549. def move_upper_left
  550. # 向き固定でない場合
  551. unless @direction_fix
  552. # 右向きだった場合は左を、下向きだった場合は上を向く
  553. @direction = 7
  554. end
  555. # 上→左、左→上 のどちらかのコースが通行可能な場合
  556. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  557. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  558. # 座標を更新
  559. @x -= 1
  560. @y -= 1
  561. end
  562. end
  563. #--------------------------------------------------------------------------
  564. # ● 右上に移動
  565. #--------------------------------------------------------------------------
  566. def move_upper_right
  567. # 向き固定でない場合
  568. unless @direction_fix
  569. # 左向きだった場合は右を、下向きだった場合は上を向く
  570. @direction = 9
  571. end
  572. # 上→右、右→上 のどちらかのコースが通行可能な場合
  573. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  574. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  575. # 座標を更新
  576. @x += 1
  577. @y -= 1
  578. end
  579. end
  580. attr_writer :move_speed
  581. attr_writer :step_anime
  582. end
  583. module Spriteset_Map_Module
  584. def setup_actor_character_sprites?
  585. return @setup_actor_character_sprites_flag != nil
  586. end
  587. def setup_actor_character_sprites(characters)
  588. if !setup_actor_character_sprites?
  589. index_game_player = 0
  590. @character_sprites.each_index do |i|
  591. if @character_sprites[i].character.instance_of?(Game_Player)
  592. index_game_player = i
  593. break
  594. end
  595. end
  596. for character in characters.reverse
  597. @character_sprites.unshift(
  598. Sprite_Character.new(@viewport1, character)
  599. )
  600. end
  601. @setup_actor_character_sprites_flag = true
  602. end
  603. end
  604. end
  605. module Scene_Map_Module
  606. def setup_actor_character_sprites(characters)
  607. @spriteset.setup_actor_character_sprites(characters)
  608. end
  609. end
  610. module Game_Party_Module
  611. def set_transparent_actors(transparent)
  612. @transparent = transparent
  613. end
  614. def setup_actor_character_sprites
  615. if @characters == nil
  616. @characters = []
  617. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  618. @characters.push(Game_Party_Actor.new)
  619. end
  620. end
  621. for i in 1 ... TRAIN_ACTOR_SIZE_MAX
  622. @characters[i - 1].setup(actors[i])
  623. end
  624. if $scene.class.method_defined?('setup_actor_character_sprites')
  625. $scene.setup_actor_character_sprites(@characters)
  626. end
  627. end
  628. def update_party_actors
  629. setup_actor_character_sprites
  630. transparent = $game_player.transparent
  631. if transparent == false
  632. if TRANSPARENT_SWITCH
  633. transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
  634. end
  635. end
  636. for character in @characters
  637. character.transparent = transparent
  638. character.move_speed = $game_player.move_speed
  639. character.step_anime = $game_player.step_anime
  640. character.update
  641. end
  642. end
  643. def moveto_party_actors( x, y )
  644. setup_actor_character_sprites
  645. for character in @characters
  646. character.moveto( x, y )
  647. end
  648. if @move_list == nil
  649. @move_list = []
  650. end
  651. move_list_setup
  652. end
  653. def move_party_actors
  654. if @move_list == nil
  655. @move_list = []
  656. move_list_setup
  657. end
  658. @move_list.each_index do |i|
  659. if @characters[i] != nil
  660. case @move_list[i].type
  661. when Input::DOWN
  662. @characters[i].move_down(@move_list[i].args[0])
  663. when Input::LEFT
  664. @characters[i].move_left(@move_list[i].args[0])
  665. when Input::RIGHT
  666. @characters[i].move_right(@move_list[i].args[0])
  667. when Input::UP
  668. @characters[i].move_up(@move_list[i].args[0])
  669. when DOWN_LEFT
  670. @characters[i].move_lower_left
  671. when DOWN_RIGHT
  672. @characters[i].move_lower_right
  673. when UP_LEFT
  674. @characters[i].move_upper_left
  675. when UP_RIGHT
  676. @characters[i].move_upper_right
  677. when JUMP
  678. @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
  679. end
  680. end
  681. end
  682. end
  683. class Move_List_Element
  684. def initialize(type,args)
  685. @type = type
  686. @args = args
  687. end
  688. def type() return @type end
  689. def args() return @args end
  690. end
  691. def move_list_setup
  692. for i in 0 .. TRAIN_ACTOR_SIZE_MAX
  693. @move_list[i] = nil
  694. end
  695. end
  696. def add_move_list(type,*args)
  697. @move_list.unshift(Move_List_Element.new(type,args)).pop
  698. end
  699. def move_down_party_actors(turn_enabled = true)
  700. move_party_actors
  701. add_move_list(Input::DOWN,turn_enabled)
  702. end
  703. def move_left_party_actors(turn_enabled = true)
  704. move_party_actors
  705. add_move_list(Input::LEFT,turn_enabled)
  706. end
  707. def move_right_party_actors(turn_enabled = true)
  708. move_party_actors
  709. add_move_list(Input::RIGHT,turn_enabled)
  710. end
  711. def move_up_party_actors(turn_enabled = true)
  712. move_party_actors
  713. add_move_list(Input::UP,turn_enabled)
  714. end
  715. def move_lower_left_party_actors
  716. move_party_actors
  717. add_move_list(DOWN_LEFT)
  718. end
  719. def move_lower_right_party_actors
  720. move_party_actors
  721. add_move_list(DOWN_RIGHT)
  722. end
  723. def move_upper_left_party_actors
  724. move_party_actors
  725. add_move_list(UP_LEFT)
  726. end
  727. def move_upper_right_party_actors
  728. move_party_actors
  729. add_move_list(UP_RIGHT)
  730. end
  731. def jump_party_actors(x_plus, y_plus)
  732. move_party_actors
  733. add_move_list(JUMP,x_plus, y_plus)
  734. end
  735. end
  736. module Game_Player_Module
  737. def update
  738. $game_party.update_party_actors
  739. super
  740. end
  741. def moveto( x, y )
  742. $game_party.moveto_party_actors( x, y )
  743. super( x, y )
  744. end
  745. def move_down(turn_enabled = true)
  746. if passable?(@x, @y, Input::DOWN)
  747. $game_party.move_down_party_actors(turn_enabled)
  748. end
  749. super(turn_enabled)
  750. end
  751. def move_left(turn_enabled = true)
  752. if passable?(@x, @y, Input::LEFT)
  753. $game_party.move_left_party_actors(turn_enabled)
  754. end
  755. super(turn_enabled)
  756. end
  757. def move_right(turn_enabled = true)
  758. if passable?(@x, @y, Input::RIGHT)
  759. $game_party.move_right_party_actors(turn_enabled)
  760. end
  761. super(turn_enabled)
  762. end
  763. def move_up(turn_enabled = true)
  764. if passable?(@x, @y, Input::UP)
  765. $game_party.move_up_party_actors(turn_enabled)
  766. end
  767. super(turn_enabled)
  768. end
  769. def move_lower_left
  770. # 下→左、左→下 のどちらかのコースが通行可能な場合
  771. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  772. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  773. $game_party.move_lower_left_party_actors
  774. end
  775. super
  776. end
  777. def move_lower_right
  778. # 下→右、右→下 のどちらかのコースが通行可能な場合
  779. if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  780. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  781. $game_party.move_lower_right_party_actors
  782. end
  783. super
  784. end
  785. def move_upper_left
  786. # 上→左、左→上 のどちらかのコースが通行可能な場合
  787. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  788. (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  789. $game_party.move_upper_left_party_actors
  790. end
  791. super
  792. end
  793. def move_upper_right
  794. # 上→右、右→上 のどちらかのコースが通行可能な場合
  795. if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  796. (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  797. $game_party.move_upper_right_party_actors
  798. end
  799. super
  800. end
  801. def jump(x_plus, y_plus)
  802. # 新しい座標を計算
  803. new_x = @x + x_plus
  804. new_y = @y + y_plus
  805. # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
  806. if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
  807. $game_party.jump_party_actors(x_plus, y_plus)
  808. end
  809. super(x_plus, y_plus)
  810. end
  811. attr_reader :move_speed
  812. attr_reader :step_anime
  813. end
  814. end # module Train_Actor
  815. class Game_Party
  816. include Train_Actor::Game_Party_Module
  817. end
  818. class Game_Player
  819. include Train_Actor::Game_Player_Module
  820. end
  821. class Spriteset_Map
  822. include Train_Actor::Spriteset_Map_Module
  823. end
  824. class Scene_Map
  825. include Train_Actor::Scene_Map_Module
  826. end

  827. #==============================================================================
  828. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  829. #==============================================================================
复制代码
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~ [LINE]1,#dddddd[/LINE]本贴由论坛斑竹darkten结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
作者: 冷不冷    时间: 2009-5-31 20:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: tommay    时间: 2009-6-2 18:31
以下引用冷不冷于2009-5-31 12:05:39的发言:

这个MS要8x8的图`!

不用,建议LZ上传工程。
作者: jhhuang    时间: 2009-6-2 18:46
新建一个工程,把上面的脚本放在MAIN上面,
然后把下面的图片设置成阿尔西斯的行走图.
保存-F12测试


作者: tommay    时间: 2009-6-2 18:47
看错了,抱歉= =
作者: jhhuang    时间: 2009-6-2 18:51
看不到.....第几行错了?
或者能不能帮我把这图改了,再发上来给我看看
作者: tommay    时间: 2009-6-2 19:10
同上
作者: jhhuang    时间: 2009-6-2 19:15
那你能不能说到底是第几行错了啊???
我看了半天都看不出来哪一行错了....
下   下   下   下
左   左   左   左
右   右   右   右
上   上   上   上
左下 左下 左下 左下
右下 右下 右下 右下
左上 左上 左上 左上
右上 右上 右上 右上
这样不对吗?
作者: tommay    时间: 2009-6-2 19:42
用这个吧,看了半天不知道哪里错了。
http://rpg.blue/web/htm/news136.htm [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: jhhuang    时间: 2009-6-3 02:52
以下引用tommay于2009-6-2 11:42:18的发言:

用这个吧,看了半天不知道哪里错了。
http://rpg.blue/web/htm/news136.htm

又发现一个问题-.-
这个脚本人物没有问题,但是使用"c8"和"c4"NPC移动时,还是如顶楼的问题....不过这次问题是出在NPC上...




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