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

Project1

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

伪 8方向移动

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
116
在线时间
192 小时
注册时间
2008-5-11
帖子
547
跳转到指定楼层
1
发表于 2008-5-17 01:47:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
直接插入到MAIN前面,然后用方向键按方向(比如上键+右键)就可以了

已知冲突:横版战斗(sideview)所有版本


  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ ダッシュ&8方向移動 - RPG_EDirMove ◆ VX ◆
  3. #_/    ◇ Last update : 2008/02/17 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  ダッシュ速度の調整や、8方向移動機能を追加します。
  6. #_/============================================================================
  7. #_/
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  9. #==============================================================================
  10. # ★ カスタマイズ項目 - Customize ★
  11. #==============================================================================

  12. module RPG
  13. module EDirMove
  14.   # ◆ 8-Way Directional Movement
  15.   # true = Enables the character to move in diagonal directions.
  16.   # false = Disable diagonal movement, restricting the player to the default
  17.   #         movement system of up, down, left, and right.
  18.   ENABLE_8DIR = true
  19.   # ◆ ?
  20.   ENABLE_8DIR_ANIMATION = true

  21.   # ◆ Walk Speed
  22.   #  Allows you to change the default rate of speed the character walks.
  23.   #  A DEFAULT_WALK_SPEED of 4 is the default RMVX walk speed.
  24.   DEFAULT_WALK_SPEED = 4
  25.   # ◆ Dash Speed
  26.   #  
  27.   DASH_SPEED_RATE    = 2
  28. end
  29. end

  30. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  31. $imported = {} if $imported == nil
  32. $imported["EDirMove"] = true

  33. module RPG::EDirMove
  34.   # 斜め画像の接尾辞
  35.   SLANT_SUFFIX = "#"
  36. end

  37. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  38. #==============================================================================
  39. # □ RPG::Commands
  40. #==============================================================================

  41. module RPG::Commands
  42.   module_function
  43.   #--------------------------------------------------------------------------
  44.   # ○ 歩行速度のリセット
  45.   #--------------------------------------------------------------------------
  46.   def reset_walk_speed
  47.     $game_player.reset_move_speed
  48.   end
  49. end

  50. class Game_Interpreter
  51.   include RPG::Commands
  52. end

  53. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  54. #==============================================================================
  55. # ■ Game_Party
  56. #==============================================================================

  57. class Game_Party < Game_Unit
  58.   #--------------------------------------------------------------------------
  59.   # ○ 歩数減少
  60.   #--------------------------------------------------------------------------
  61.   def decrease_steps
  62.     @steps -= 1
  63.   end
  64. end

  65. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  66. #==============================================================================
  67. # ■ Game_Character
  68. #==============================================================================

  69. class Game_Character
  70.   #--------------------------------------------------------------------------
  71.   # ○ 向き (8方向用)
  72.   #--------------------------------------------------------------------------
  73.   def direction_8dir
  74.     return @direction
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 指定方向に向き変更
  78.   #     direction : 向き
  79.   #--------------------------------------------------------------------------
  80.   alias set_direction_RPG_EDirMove set_direction
  81.   def set_direction(direction)
  82.     last_dir = @direction

  83.     set_direction_RPG_EDirMove(direction)

  84.     if !@direction_fix && direction != 0
  85.       @direction_8dir = direction
  86.     end
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 左下に移動
  90.   #--------------------------------------------------------------------------
  91.   alias move_lower_left_RPG_EDirMove move_lower_left
  92.   def move_lower_left
  93.     move_lower_left_RPG_EDirMove

  94.     @direction_8dir = 1 unless @direction_fix
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 右下に移動
  98.   #--------------------------------------------------------------------------
  99.   alias move_lower_right_RPG_EDirMove move_lower_right
  100.   def move_lower_right
  101.     move_lower_right_RPG_EDirMove

  102.     @direction_8dir = 3 unless @direction_fix
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 左上に移動
  106.   #--------------------------------------------------------------------------
  107.   alias move_upper_left_RPG_EDirMove move_upper_left
  108.   def move_upper_left
  109.     move_upper_left_RPG_EDirMove

  110.     @direction_8dir = 7 unless @direction_fix
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 右上に移動
  114.   #--------------------------------------------------------------------------
  115.   alias move_upper_right_RPG_EDirMove move_upper_right
  116.   def move_upper_right
  117.     move_upper_right_RPG_EDirMove

  118.     @direction_8dir = 9 unless @direction_fix
  119.   end
  120. end

  121. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  122. #==============================================================================
  123. # ■ Game_Player
  124. #==============================================================================

  125. class Game_Player < Game_Character
  126.   #--------------------------------------------------------------------------
  127.   # ● オブジェクト初期化
  128.   #--------------------------------------------------------------------------
  129.   alias initialize_RPG_EDirMove initialize
  130.   def initialize
  131.     initialize_RPG_EDirMove

  132.     reset_move_speed
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ○ 向き (8方向用)
  136.   #--------------------------------------------------------------------------
  137.   def direction_8dir
  138.     @direction_8dir = @direction if @direction_8dir == nil
  139.     return @direction_8dir
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ○ 移動速度のリセット
  143.   #--------------------------------------------------------------------------
  144.   def reset_move_speed
  145.     @move_speed = RPG::EDirMove::DEFAULT_WALK_SPEED
  146.   end

  147. if RPG::EDirMove::ENABLE_8DIR
  148.   #--------------------------------------------------------------------------
  149.   # ● 方向ボタン入力による移動処理
  150.   #--------------------------------------------------------------------------
  151.   def move_by_input
  152.     return unless movable?
  153.     return if $game_map.interpreter.running?

  154.     last_steps = $game_party.steps

  155.     case Input.dir8
  156.     when 1;  move_down; move_left; @direction = 2
  157.     when 2;  move_down
  158.     when 3;  move_down; move_right; @direction = 6
  159.     when 4;  move_left
  160.     when 6;  move_right
  161.     when 7;  move_up; move_left; @direction = 4
  162.     when 8;  move_up
  163.     when 9;  move_up; move_right; @direction = 8
  164.     else;    return
  165.     end
  166.     @direction_8dir = Input.dir8

  167.     # 2歩進んでいたら1歩戻す
  168.     if $game_party.steps - last_steps == 2
  169.       $game_party.decrease_steps
  170.     end
  171.   end
  172. end  # ENABLE_8DIR

  173.   #--------------------------------------------------------------------------
  174.   # ● 移動時の更新
  175.   #--------------------------------------------------------------------------
  176.   def update_move
  177.     distance = 2 ** @move_speed   # 移動速度から移動距離に変換
  178.     if dash?                      # ダッシュ状態なら速度変更
  179.       distance *= RPG::EDirMove::DASH_SPEED_RATE
  180.     end
  181.     distance = Integer(distance)

  182.     @real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
  183.     @real_x = [@real_x + distance, @x * 256].min if @x * 256 > @real_x
  184.     @real_y = [@real_y - distance, @y * 256].max if @y * 256 < @real_y
  185.     @real_y = [@real_y + distance, @y * 256].min if @y * 256 > @real_y
  186.     update_bush_depth unless moving?
  187.     if @walk_anime
  188.       @anime_count += 1.5
  189.     elsif @step_anime
  190.       @anime_count += 1
  191.     end
  192.   end
  193. end

  194. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  195. #==============================================================================
  196. # ■ Sprite_Character
  197. #==============================================================================

  198. if RPG::EDirMove::ENABLE_8DIR_ANIMATION

  199. class Sprite_Character < Sprite_Base
  200.   #--------------------------------------------------------------------------
  201.   # ○ 定数
  202.   #--------------------------------------------------------------------------
  203.   SLANT_ANIME_TABLE = { 1=>2, 3=>6, 7=>4, 9=>8 }
  204.   #--------------------------------------------------------------------------
  205.   # ● 転送元ビットマップの更新
  206.   #--------------------------------------------------------------------------
  207.   alias update_bitmap_RPG_EDirMove update_bitmap
  208.   def update_bitmap
  209.     name_changed = (@character_name != @character.character_name)

  210.     update_bitmap_RPG_EDirMove

  211.     if @tile_id > 0             # タイル画像使用
  212.       @enable_slant = false
  213.       return
  214.     end
  215.     return unless name_changed  # 画像名変化なし

  216.     # 斜め移動アニメ有効判定
  217.     @enable_slant = true
  218.     begin
  219.       @character_name_slant = @character_name + RPG::EDirMove::SLANT_SUFFIX
  220.       Cache.character(@character_name_slant)
  221.     rescue
  222.       @enable_slant = false
  223.     end
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 転送元矩形の更新
  227.   #--------------------------------------------------------------------------
  228.   alias update_src_rect_RPG_EDirMove update_src_rect
  229.   def update_src_rect
  230.     return if @tile_id > 0  # タイル画像

  231.     if @enable_slant
  232.       update_src_rect_for_slant
  233.     else
  234.       update_src_rect_RPG_EDirMove
  235.     end
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ○ 斜め移動用転送元矩形の更新
  239.   #--------------------------------------------------------------------------
  240.   def update_src_rect_for_slant
  241.     index = @character.character_index
  242.     pattern = @character.pattern < 3 ? @character.pattern : 1
  243.     sx = (index % 4 * 3 + pattern) * @cw

  244.     dir = @character.direction_8dir
  245.     case dir % 2
  246.     when 0  # 上下左右
  247.       if @last_slant
  248.         self.bitmap = Cache.character(@character_name)
  249.         @last_slant = false
  250.       end
  251.     else    # 斜め
  252.       unless @last_slant
  253.         self.bitmap = Cache.character(@character_name_slant)
  254.         @last_slant = true
  255.       end
  256.       # Convert 1, 3, 7, 9 を 2, 6, 4, 8
  257.       dir = SLANT_ANIME_TABLE[dir]
  258.     end

  259.     sy = (index / 4 * 4 + (dir - 2) / 2) * @ch
  260.     self.src_rect.set(sx, sy, @cw, @ch)
  261.   end
  262. end

  263. end  # ENABLE_8DIR_ANIMATION

  264. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
  265. #_/  The original untranslated version of this script can be found here:
  266. #
  267. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
复制代码
9
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-16 15:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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