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

Project1

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

[已经解决] VX可以八方向行走吗?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
3 小时
注册时间
2012-5-4
帖子
284
跳转到指定楼层
1
发表于 2012-5-9 20:52:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
随便问问

点评

经过了第4个。  发表于 2012-5-9 20:54
1理解2深入3搜索4提问。你经过了几个?  发表于 2012-5-9 20:53

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2188 小时
注册时间
2011-6-23
帖子
1044
2
发表于 2012-5-9 20:54:51 | 只看该作者
本帖最后由 lsu666666 于 2012-5-9 20:56 编辑

伪 . 八方向行走  VX
http://rpg.blue/thread-201049-1-1.html

以下為真八方向腳本
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 8方向移動 - KGC_Dash_8DirMove ◆ VX ◆
  3. #_/    ◇ Last update : 2008/11/16 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  ダッシュ速度の調整や、8方向移動機能を追加します。
  6. #_/============================================================================
  7. #_/ 【マップ】≪タイルセット拡張≫ より下に導入してください。
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

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

  12. module KGC
  13. module Dash_8DirMove
  14.   # ◆ 8方向移動を有効にする
  15.   #  true  : 斜め移動可
  16.   #  false : 4方向のみ
  17.   ENABLE_8DIR           = false
  18.   # ◆ 歩行アニメを8方向対応にする
  19.   ENABLE_8DIR_ANIMATION = true

  20.   # ◆ 歩行速度 (デフォルト)
  21.   #  ニューゲームから始めた場合のみ有効。
  22.   #  イベントで速度を変更した場合、そちらを優先。
  23.   DEFAULT_WALK_SPEED = 5
  24.   # ◆ ダッシュ速度倍率
  25.   #  小数も指定可能。
  26.   #  0.5 などにすれば、ダッシュボタンで歩行も可。
  27.   DASH_SPEED_RATE    = 0.6
  28. end
  29. end

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

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

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

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

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

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

  52. class Game_Interpreter
  53.   include KGC::Commands
  54. end

  55. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  56. #==============================================================================
  57. # ■ Game_Party
  58. #==============================================================================

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

  67. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  68. #==============================================================================
  69. # ■ Game_Character
  70. #==============================================================================

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

  85.     set_direction_KGC_Dash_8DirMove(direction)

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

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

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

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

  120.     @direction_8dir = 9 unless @direction_fix
  121.   end
  122. end

  123. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  124. #==============================================================================
  125. # ■ Game_Player
  126. #==============================================================================

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

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

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

  156.     # 予約済みの追加移動を実行
  157.     if @reserved_move != nil
  158.       case @reserved_move
  159.       when :down
  160.         move_down if passable_l?(2)
  161.       when :left
  162.         move_left if passable_l?(4)
  163.       when :right
  164.         move_right if passable_l?(6)
  165.       when :up
  166.         move_up if passable_l?(8)
  167.       end
  168.       @reserved_move = nil
  169.       return
  170.     end

  171.     last_steps = $game_party.steps

  172.     case Input.dir8
  173.     when 1
  174.       if !passable_l?(2) && passable_l?(4)
  175.         # 左だけ
  176.         move_left
  177.         @reserved_move = :down
  178.       elsif passable_l?(2) && !passable_l?(4)
  179.         # 下だけ
  180.         move_down
  181.         @reserved_move = :left
  182.       elsif passable_l?(2)
  183.         # 下に優先的に移動
  184.         move_down
  185.         move_left
  186.       end
  187.       @direction = 2
  188.     when 2
  189.       move_down
  190.     when 3
  191.       if !passable_l?(2) && passable_l?(6)
  192.         # 右だけ
  193.         move_right
  194.         @reserved_move = :down
  195.       elsif passable_l?(2) && !passable_l?(6)
  196.         # 下だけ
  197.         move_down
  198.         @reserved_move = :right
  199.       elsif passable_l?(2)
  200.         # 下に優先的に移動
  201.         move_down
  202.         move_right
  203.       end
  204.       @direction = 6
  205.     when 4
  206.       move_left
  207.     when 6
  208.       move_right
  209.     when 7
  210.       if !passable_l?(8) && passable_l?(4)
  211.         # 左だけ
  212.         move_left
  213.         @reserved_move = :up
  214.       elsif passable_l?(8) && !passable_l?(4)
  215.         # 上だけ
  216.         move_up
  217.         @reserved_move = :left
  218.       elsif passable_l?(8)
  219.         # 上に優先的に移動
  220.         move_up
  221.         move_left
  222.       end
  223.       @direction = 4
  224.     when 8
  225.       move_up
  226.     when 9
  227.       if !passable_l?(8) && passable_l?(6)
  228.         # 右だけ
  229.         move_right
  230.         @reserved_move = :up
  231.       elsif passable_l?(8) && !passable_l?(6)
  232.         # 上だけ
  233.         move_up
  234.         @reserved_move = :right
  235.       elsif passable_l?(8)
  236.         # 上に優先的に移動
  237.         move_up
  238.         move_right
  239.       end
  240.       @direction = 8
  241.     else
  242.       return
  243.     end
  244.     @direction_8dir = Input.dir8

  245.     # 2歩進んでいたら1歩戻す
  246.     if $game_party.steps - last_steps == 2
  247.       $game_party.decrease_steps
  248.     end
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ○ 簡易移動可否判定
  252.   #     d : 移動方向
  253.   #--------------------------------------------------------------------------
  254.   def passable_l?(d)
  255.     if $imported["TilesetExtension"]
  256.       return passable?(@x, @y, d)
  257.     else
  258.       case d
  259.       when 1
  260.         return passable?(@x-1, @y+1)
  261.       when 2
  262.         return passable?(@x, @y+1)
  263.       when 3
  264.         return passable?(@x+1, @y+1)
  265.       when 4
  266.         return passable?(@x-1, @y)
  267.       when 6
  268.         return passable?(@x+1, @y)
  269.       when 7
  270.         return passable?(@x-1, @y-1)
  271.       when 8
  272.         return passable?(@x, @y-1)
  273.       when 9
  274.         return passable?(@x+1, @y-1)
  275.       end
  276.     end
  277.     return false
  278.   end
  279. end  # ENABLE_8DIR

  280.   #--------------------------------------------------------------------------
  281.   # ● 移動時の更新
  282.   #--------------------------------------------------------------------------
  283.   def update_move
  284.     distance = 2 ** @move_speed   # 移動速度から移動距離に変換
  285.     if dash?                      # ダッシュ状態なら速度変更
  286.       distance *= KGC::Dash_8DirMove::DASH_SPEED_RATE
  287.     end
  288.     distance = Integer(distance)

  289.     @real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
  290.     @real_x = [@real_x + distance, @x * 256].min if @x * 256 > @real_x
  291.     @real_y = [@real_y - distance, @y * 256].max if @y * 256 < @real_y
  292.     @real_y = [@real_y + distance, @y * 256].min if @y * 256 > @real_y
  293.     update_bush_depth unless moving?
  294.     if @walk_anime
  295.       @anime_count += 1.5
  296.     elsif @step_anime
  297.       @anime_count += 1
  298.     end
  299.   end
  300. end

  301. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  302. #==============================================================================
  303. # ■ Sprite_Character
  304. #==============================================================================

  305. if KGC::Dash_8DirMove::ENABLE_8DIR_ANIMATION

  306. class Sprite_Character < Sprite_Base
  307.   #--------------------------------------------------------------------------
  308.   # ○ 定数
  309.   #--------------------------------------------------------------------------
  310.   SLANT_ANIME_TABLE = { 1=>2, 3=>6, 7=>4, 9=>8 }
  311.   #--------------------------------------------------------------------------
  312.   # ● 転送元ビットマップの更新
  313.   #--------------------------------------------------------------------------
  314.   alias update_bitmap_KGC_Dash_8DirMove update_bitmap
  315.   def update_bitmap
  316.     name_changed = (@character_name != @character.character_name)

  317.     update_bitmap_KGC_Dash_8DirMove

  318.     if @tile_id > 0             # タイル画像使用
  319.       @enable_slant = false
  320.       return
  321.     end
  322.     return unless name_changed  # 画像名変化なし

  323.     # 斜め移動アニメ有効判定
  324.     @enable_slant = true
  325.     begin
  326.       @character_name_slant = @character_name + KGC::Dash_8DirMove::SLANT_SUFFIX
  327.       Cache.character(@character_name_slant)
  328.     rescue
  329.       @enable_slant = false
  330.     end
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 転送元矩形の更新
  334.   #--------------------------------------------------------------------------
  335.   alias update_src_rect_KGC_Dash_8DirMove update_src_rect
  336.   def update_src_rect
  337.     return if @tile_id > 0  # タイル画像

  338.     if @enable_slant
  339.       update_src_rect_for_slant
  340.     else
  341.       update_src_rect_KGC_Dash_8DirMove
  342.     end
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ○ 斜め移動用転送元矩形の更新
  346.   #--------------------------------------------------------------------------
  347.   def update_src_rect_for_slant
  348.     index = @character.character_index
  349.     pattern = @character.pattern < 3 ? @character.pattern : 1
  350.     sx = (index % 4 * 3 + pattern) * @cw

  351.     dir = @character.direction_8dir
  352.     case dir % 2
  353.     when 0  # 上下左右
  354.       if @last_slant
  355.         self.bitmap = Cache.character(@character_name)
  356.         @last_slant = false
  357.       end
  358.     else    # 斜め
  359.       unless @last_slant
  360.         self.bitmap = Cache.character(@character_name_slant)
  361.         @last_slant = true
  362.       end
  363.       # 1, 3, 7, 9 を 2, 6, 4, 8 に変換
  364.       dir = SLANT_ANIME_TABLE[dir]
  365.     end

  366.     sy = (index / 4 * 4 + (dir - 2) / 2) * @ch
  367.     self.src_rect.set(sx, sy, @cw, @ch)
  368.   end
  369. end

  370. end  # ENABLE_8DIR_ANIMATION
复制代码
���

评分

参与人数 1星屑 +60 收起 理由
哦他妈的耶 + 60 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-7 21:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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