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

Project1

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

[已经过期] 求真·斜四方向脚本(论坛以前貌似有但是现在没了)

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
73 小时
注册时间
2008-5-30
帖子
84
跳转到指定楼层
1
发表于 2011-4-25 10:38:17 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 xzqcm111 于 2011-4-26 10:40 编辑

我只需要留下斜四方向的,按“上”的话往右上走,下为左下,左为左上,右为右下,应该如何修改??另外命名方式改为@+行走图名    单张的行走图。NPC无要求,当然如果连NPC一起做了的话可追加VIP悬赏。
PS:要考虑到事件触发,因为全部采用斜四方向的话,主角和NPC之间的最小距离也是二,会导致按确定键无法触发事件。
附一个八方向脚本供参考。

  1. #==============================================================================
  2. # ■ Game_Character
  3. #==============================================================================

  4. class Game_Character
  5.   #--------------------------------------------------------------------------
  6.   # ● 八方向
  7.   #--------------------------------------------------------------------------
  8.   def direction_8dir
  9.     return @direction
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 变成指定方向
  13.   #     direction : 方向
  14.   #--------------------------------------------------------------------------
  15.   alias set_direction_8fangxiang set_direction
  16.   def set_direction(direction)
  17.     last_dir = @direction
  18.     set_direction_8fangxiang(direction)
  19.     if !@direction_fix && direction != 0
  20.       @direction_8dir = direction
  21.     end
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 向左下移动
  25.   #--------------------------------------------------------------------------
  26.   alias move_lower_left_8fangxiang move_lower_left
  27.   def move_lower_left
  28.     move_lower_left_8fangxiang
  29.     @direction_8dir = 1 unless @direction_fix
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 向右下移动
  33.   #--------------------------------------------------------------------------
  34.   alias move_lower_right_8fangxiang move_lower_right
  35.   def move_lower_right
  36.     move_lower_right_8fangxiang
  37.     @direction_8dir = 3 unless @direction_fix
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 向左上移动
  41.   #--------------------------------------------------------------------------
  42.   alias move_upper_left_8fangxiang move_upper_left
  43.   def move_upper_left
  44.     move_upper_left_8fangxiang
  45.     @direction_8dir = 7 unless @direction_fix
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 向右上移动
  49.   #--------------------------------------------------------------------------
  50.   alias move_upper_right_8fangxiang move_upper_right
  51.   def move_upper_right
  52.     move_upper_right_8fangxiang
  53.     @direction_8dir = 9 unless @direction_fix
  54.   end
  55. end
  56. #==============================================================================
  57. # ■ Game_Party
  58. #==============================================================================

  59. class Game_Party < Game_Unit
  60.   def decrease_steps
  61.     @steps -= 1
  62.   end
  63. end

  64. #==============================================================================
  65. # ■ Game_Player
  66. #==============================================================================

  67. class Game_Player < Game_Character

  68.   #--------------------------------------------------------------------------
  69.   # ●八方向
  70.   #--------------------------------------------------------------------------
  71.   def direction_8dir
  72.     @direction_8dir = @direction if @direction_8dir == nil
  73.     return @direction_8dir
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 八方向按键
  77.   #--------------------------------------------------------------------------
  78.   def move_by_input
  79.     return unless movable?
  80.     return if $game_map.interpreter.running?
  81.     last_steps = $game_party.steps
  82.     case Input.dir8
  83.     when 1;  move_down; move_left; @direction = 2
  84.     when 2;  move_down
  85.     when 3;  move_down; move_right; @direction = 6
  86.     when 4;  move_left
  87.     when 6;  move_right
  88.     when 7;  move_up; move_left; @direction = 4
  89.     when 8;  move_up
  90.     when 9;  move_up; move_right; @direction = 8
  91.     else;    return
  92.     end
  93.     @direction_8dir = Input.dir8
  94.     # 斜方向移动正确步数计算
  95.     if $game_party.steps - last_steps == 2
  96.       $game_party.decrease_steps
  97.     end
  98.   end
  99.   
  100.   #--------------------------------------------------------------------------
  101.   # ● 移动更新
  102.   #--------------------------------------------------------------------------
  103.   def update_move
  104.     distance = 2 ** @move_speed   
  105.     if dash?                     
  106.       distance *= 2
  107.     end
  108.     distance = Integer(distance)
  109.     @real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
  110.     @real_x = [@real_x + distance, @x * 256].min if @x * 256 > @real_x
  111.     @real_y = [@real_y - distance, @y * 256].max if @y * 256 < @real_y
  112.     @real_y = [@real_y + distance, @y * 256].min if @y * 256 > @real_y
  113.     update_bush_depth unless moving?
  114.     if @walk_anime
  115.       @anime_count += 1.5
  116.     elsif @step_anime
  117.       @anime_count += 1
  118.     end
  119.   end
  120. end
  121. #==============================================================================
  122. # ■ Sprite_Character
  123. #==============================================================================
  124. class Sprite_Character < Sprite_Base
  125.   
  126.   ANIME_TABLE = { 1=>2, 3=>6, 7=>4, 9=>8 }
  127.   #--------------------------------------------------------------------------
  128.   # ● 更新位图
  129.   #--------------------------------------------------------------------------
  130.   alias update_bitmap_8fangxiang update_bitmap
  131.   def update_bitmap
  132.     name_changed = (@character_name != @character.character_name)
  133.     update_bitmap_8fangxiang
  134.     if @tile_id > 0            
  135.       @enable_slant = false
  136.       return
  137.     end
  138.     return unless name_changed  
  139.     @enable_slant = true
  140.     begin
  141.       @character_name_slant = @character_name + "#"
  142.       Cache.character(@character_name_slant)
  143.     rescue
  144.       @enable_slant = false
  145.     end
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 更新传送矩形
  149.   #--------------------------------------------------------------------------
  150.   alias update_src_rect_8fangxiang update_src_rect
  151.   def update_src_rect
  152.     return if @tile_id > 0  
  153.     if @enable_slant
  154.       update_src_rect_for_slant
  155.     else
  156.       update_src_rect_8fangxiang
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 更新斜方向传送矩形
  161.   #--------------------------------------------------------------------------
  162.   def update_src_rect_for_slant
  163.     index = @character.character_index
  164.     pattern = @character.pattern < 3 ? @character.pattern : 1
  165.     sx = (index % 4 * 3 + pattern) * @cw
  166.     dir = @character.direction_8dir
  167.     case dir % 2
  168.     when 0  # 上下左右
  169.       if @last_slant
  170.         self.bitmap = Cache.character(@character_name)
  171.         @last_slant = false
  172.       end
  173.     else   
  174.       unless @last_slant
  175.         self.bitmap = Cache.character(@character_name_slant)
  176.         @last_slant = true
  177.       end
  178.       dir = ANIME_TABLE[dir]
  179.     end
  180.     sy = (index / 4 * 4 + (dir - 2) / 2) * @ch
  181.     self.src_rect.set(sx, sy, @cw, @ch)
  182.   end
  183. end

复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
99 小时
注册时间
2011-3-19
帖子
41
3
发表于 2011-5-1 10:28:38 | 只看该作者
  #--------------------------------------------------------------------------
  # ● 下(左下)
  #     turn_ok : 此地可以更改朝向
  #--------------------------------------------------------------------------
  def move_down(turn_ok = true)
    unless @direction_fix
      @direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
    end
    if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
       (passable?(@x-1, @y) and passable?(@x-1, @y+1))
      turn_down
      @x -= 1
      @y += 1      
      increase_steps
      @move_failed = false
    else                                    # 不可以通过
      turn_down if turn_ok
      check_event_trigger_touch(@x, @y+1)   # 判断接触的事件启动
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 左(左上)
  #     turn_ok : 此地可以更改朝向
  #--------------------------------------------------------------------------
  def move_left(turn_ok = true)
    unless @direction_fix
      @direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
    end
    if (passable?(@x, @y-1) and passable?(@x-1, @y-1)) or
       (passable?(@x-1, @y) and passable?(@x-1, @y-1))
      turn_left
      @x -= 1
      @y -= 1
      increase_steps
      @move_failed = false
    else                                    # 不可以通过
      turn_left if turn_ok
      check_event_trigger_touch(@x-1, @y)   # 判断接触的事件启动
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 右(右下)
  #     turn_ok : 此地可以更改朝向
  #--------------------------------------------------------------------------
  def move_right(turn_ok = true)
    unless @direction_fix
      @direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
    end
    if (passable?(@x, @y+1) and passable?(@x+1, @y+1)) or
       (passable?(@x+1, @y) and passable?(@x+1, @y+1))
      turn_right
      @x += 1
      @y += 1
      increase_steps
      @move_failed = false
    else                                    # 不可以通过
      turn_right if turn_ok
      check_event_trigger_touch(@x+1, @y)   # 判断接触的事件启动
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 上(右上)
  #     turn_ok : 此地可以更改朝向
  #--------------------------------------------------------------------------
  def move_up(turn_ok = true)
    unless @direction_fix
      @direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
    end
    if (passable?(@x, @y-1) and passable?(@x+1, @y-1)) or
       (passable?(@x+1, @y) and passable?(@x+1, @y-1))
      turn_up
      @x += 1
      @y -= 1
      increase_steps
      @move_failed = false
    else                                    # 不可以通过
      turn_up if turn_ok
      check_event_trigger_touch(@x, @y-1)   # 判断接触的事件启动
      @move_failed = true
    end
  end




这样npc也是斜着走。但是和触发事件的手感很差。而且地图上有一半格子走不到(国际象棋里的象)

另外弱弱的问一句。脚本里经常说的真伪是什么意思。。。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
176 小时
注册时间
2011-1-26
帖子
131
2
发表于 2011-4-25 14:46:14 | 只看该作者
vx好像没人发过45度斜向移动的脚本,xp到有不少
主角和npc斜四方向站立,八方脚本自带,npc斜四方向行走不会,要不npc事件移动设置时直接斜向移动,因该效果一样
主角斜向行走,脚本83-103对应数字键盘,改改看看,但不知方向键是否有用
    def move_by_input
      return unless movable?
      return if $game_map.interpreter.running?
      last_steps = $game_party.steps
      case Input.dir8
      when 1;  
      when 2;  move_down; move_right; @direction = 6
      when 3;   
      when 4;  move_down; move_left; @direction = 2
      when 6;  move_up; move_right; @direction = 8
      when 7;  
      when 8;  move_up; move_left; @direction = 4
      when 9;  
      else;    return
      end
      @direction_8dir = Input.dir8
      # 斜方向移动正确步数计算
      if $game_party.steps - last_steps == 2
        $game_party.decrease_steps
      end
    end
没试过,本人改脚本的出错率很高:)

点评

额 用倒不是不能用,只是。。。。。。  发表于 2011-4-26 10:41
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-11 19:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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