查看: 11447|回复: 9

[已发主站] VA真·八方向行走

[复制链接]
梦石
0
星屑
2306
在线时间
1010 小时
注册时间
2012-4-30
回帖
1455

开拓者

发表于 2012-7-22 16:07:03 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 铅笔描绘的思念 于 2012-7-23 11:53 编辑

因为这个帖子(><)所以就写了咱第一个脚本。。
貌似站上木有va的真八方。。就发布啦~\(≧▽≦)/~
并且还不不影响4方向哦。。只要把八方向的行走图重命名为原4方向的行走图+"_8D"放在Characters里
如果是8个角色元元的话。。那么八方向的的行走图也要是8个角色元的行走图。。角色元的index还是4方的index
类似下面:
4方向 $Actor_001.png 八方向的 $Actor_001_8D.png 当然木有找到八方向的行走图就不会使用八方行走啦。。
效果截图: 8D.png 。。(´Д`)不要吐槽网格。。。是有用滴。。


已知BUG一只。。。人物跟随会被拉的很远。。出现囧囧的效果。。
[pre lang="ruby" line="1"]#===============================================================================
#  八方向行走
#    by:铅笔描绘的思念
#    在Characters里添加八方向行走图(命名规范:在四方向上的基础上+_8D)
#    行走动画就为8方向的。否则就会原4方向的代替8方向的。
#
#    八方向:数字键盘方向对应的数字
#     7   8   9
#      ↖ ↑ ↗
#     4← 0 →6
#      ↙ ↓ ↘
#     1   2   3
#===============================================================================
#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● 八方向移动
  #    d    :1、3、7、9 对应小键盘的四个方向
  #--------------------------------------------------------------------------
  def move_eight_dir(d)
    move_diagonal(d + 3,2) if d == 1 || d == 3
    move_diagonal(d - 3,8) if d == 7 || d == 9
  end
  #--------------------------------------------------------------------------
  # ● 八方向按键
  #--------------------------------------------------------------------------
  def move_by_input
    return if !movable? || $game_map.interpreter.running?
    case Input.dir8
     when 1,3,7,9;  move_eight_dir(Input.dir8)
     when 2,4,6,8;  move_straight(Input.dir4)
    end
  end
  #--------------------------------------------------------------------------
  # ● 斜向移动
  #     horz : 横向(4 or 6)
  #     vert : 纵向(2 or 8)
  #--------------------------------------------------------------------------
  def move_diagonal(horz, vert)
    @followers.move if diagonal_passable?(@x, @y, horz, vert)
    @move_succeed = diagonal_passable?(x, y, horz, vert)
    last_steps = $game_party.steps
    if @move_succeed
      @x = $game_map.round_x_with_direction(@x, horz)
      @y = $game_map.round_y_with_direction(@y, vert)
      @real_x = $game_map.x_with_direction(@x, reverse_dir(horz))
      @real_y = $game_map.y_with_direction(@y, reverse_dir(vert))
      increase_steps
      # 八方向移动正确步数计算
      if $game_party.steps - last_steps == 2
        $game_party.decrease_steps
      end
    end
    set_direction(2) if horz == 4 && vert == 2
    set_direction(4) if horz == 4 && vert == 8
    set_direction(6) if horz == 6 && vert == 2
    set_direction(8) if horz == 6 && vert == 8
  end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit
  def decrease_steps
    @steps -= 1
  end
end
#==============================================================================
# ■ Sprite_Character
#==============================================================================
class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 更新源位图(Source Bitmap)
  #--------------------------------------------------------------------------
  alias update_bitmap_8dir update_bitmap
  def update_bitmap
    update_bitmap_8dir
    if @tile_id > 0            
      @enable_slant = false
      return
    end
    unless graphic_changed?
     @enable_slant = true
   end
   
    begin
      @character_name_slant = "#{@character_name}_8D"
      Cache.character(@character_name_slant)  
    rescue
      @enable_slant = false
    end
  end
  #--------------------------------------------------------------------------
  # ● 更新源矩形
  #--------------------------------------------------------------------------
  alias update_src_rect_8dir update_src_rect  
  def update_src_rect
    return if @tile_id > 0      
    if @enable_slant && @character != $game_map.events
      update_src_rect_for_slant
    else
      update_src_rect_8dir
    end
  end
  #--------------------------------------------------------------------------
  # ● 更新斜方向传送矩形
  #--------------------------------------------------------------------------
  def update_src_rect_for_slant
    index = @character.character_index
    pattern = @character.pattern < 3 ? @character.pattern : 1
    sx = (index % 4 * 3 + pattern) * @cw
    case Input.dir8 % 2
    when 0  # 上下左右
      if @last_slant
        self.bitmap = Cache.character(@character_name)
        @last_slant = false
      end
    else   
      unless @last_slant
        self.bitmap = Cache.character(@character_name_slant)
        @last_slant = true
      end
    end
      sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
    self.src_rect.set(sx, sy, @cw, @ch)
  end
end

[/pre]
附件: 8fangxiang.zip (330.59 KB, 下载次数: 2226) dll自备

点评

发现bug!!!设置一下成员行走图跟随效果,你就懂了。。。  发表于 2012-7-22 17:34
表示bug暂无。。。但是如果要设置事件的八方向移动。。。该肿么办。。。  发表于 2012-7-22 17:31

评分

参与人数 6星屑 +724 赞 +6 收起 理由
Shy07 + 6 主站收录
任F + 24 塞糖
Kimu + 400 话说行走图的说明写反了吧
明特·布兰马修 + 238 塞糖
荷包PIG蛋 + 14 感谢你的事件和脚本~
sszny + 48 塞糖

查看全部评分

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-12-16 20:55:14 | 显示全部楼层
本帖最后由 Sion 于 2014-4-18 13:39 编辑

帮你优化了一下:
  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. class Game_Player
  15.   def move_by_input
  16.     return if !movable? || $game_map.interpreter.running?
  17.     case Input.dir8
  18.     when 2,4,6,8; move_straight(Input.dir8)
  19.     when 1; move_diagonal(4, 2)
  20.     when 3; move_diagonal(6, 2)
  21.     when 7; move_diagonal(4, 8)
  22.     when 9; move_diagonal(6, 8)
  23.     end
  24.   end
  25. end

  26. class Game_CharacterBase

  27.   def move_diagonal(horz, vert)
  28.     @move_succeed = diagonal_passable?(x, y, horz, vert)
  29.     if @move_succeed
  30.       @x = $game_map.round_x_with_direction(@x, horz)
  31.       @y = $game_map.round_y_with_direction(@y, vert)
  32.       @real_x = $game_map.x_with_direction(@x, reverse_dir(horz))
  33.       @real_y = $game_map.y_with_direction(@y, reverse_dir(vert))
  34.       increase_steps
  35.     end
  36.     if horz == 4
  37.       vert == 2 ? set_direction(1) : set_direction(7)
  38.     else
  39.       vert == 2 ? set_direction(3) : set_direction(9)
  40.     end
  41.   end
  42. end

  43. class Sprite_Character < Sprite_Base
  44.   def dispose
  45.      bitmap.dispose if @_8d
  46.      super
  47.   end
  48.   def set_character_bitmap
  49.     if File.exist?("Graphics/Characters/#{@character_name}_8D.png")
  50.       @_8d = true
  51.       bitmap1 = Cache.character(@character_name)
  52.       bitmap2 = Cache.character(@character_name + "_8D")
  53.       width = bitmap1.width
  54.       height = bitmap1.height
  55.       rect = Rect.new(0, 0, width, height)
  56.       self.bitmap = Bitmap.new(width * 2, height * 2)
  57.       self.bitmap.blt(0, 0, bitmap1, rect)
  58.       self.bitmap.blt(width, 0, bitmap2, rect)
  59.       sign = @character_name[/^[\!\$]./]
  60.       if sign && sign.include?("$")
  61.         @cw = width / 3
  62.         @ch = height / 4
  63.       else
  64.         @cw = width / 12
  65.         @ch = height / 8
  66.       end
  67.       self.ox = @cw / 2
  68.       self.oy = @ch
  69.     else
  70.       self.bitmap = Cache.character(@character_name)
  71.       sign = @character_name[/^[\!\$]./]
  72.       if sign && sign.include?("$")
  73.         @cw = bitmap.width / 3
  74.         @ch = bitmap.height / 4
  75.       else
  76.         @cw = bitmap.width / 12
  77.         @ch = bitmap.height / 8
  78.       end
  79.       self.ox = @cw / 2
  80.       self.oy = @ch
  81.     end
  82.   end

  83.   def update_src_rect
  84.     return if @tile_id != 0
  85.     index = @character.character_index
  86.     pattern = @character.pattern < 3 ? @character.pattern : 1
  87.     sx = (index % 4 * 3 + pattern) * @cw
  88.     if @character.direction % 2 == 1
  89.       sx += self.bitmap.width / 2 if @_8d
  90.       row = case @character.direction
  91.       when 1; 0
  92.       when 3; 2
  93.       when 7; 1
  94.       when 9; 3
  95.       end
  96.       sy = (index / 4 * 4 + row) * @ch
  97.     else
  98.       sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  99.     end
  100.     self.src_rect.set(sx, sy, @cw, @ch)
  101.   end
  102. end
复制代码

点评

赞!~\(≧▽≦)/~,我还想说有瑕疵整么办,直接就看到优化版在下方了!!  发表于 2014-4-18 10:22
回复

使用道具 举报

梦石
0
星屑
50
在线时间
250 小时
注册时间
2011-8-16
回帖
163
发表于 2012-7-22 16:53:31 | 显示全部楼层
好 好 十分之好
不过怎样才能添加单方向的帧数呢 ,3帧总感觉太假啊、

点评

3帧的确是有点假不过如果不是想梦幻西游一样还是没有大碍的。。  发表于 2012-7-22 16:58
——————
回复

使用道具 举报

梦石
0
星屑
75
在线时间
1074 小时
注册时间
2012-1-16
回帖
1855
发表于 2012-7-22 17:13:51 | 显示全部楼层
嘎嘎!!铅笔居然还是一个超级脚本触。。。
看来有空可以找You专门定制脚本了(喂喂XD
好吧。。。帮我做的那个事件标题还是谢谢你了哈~~

点评

解决了bug咯。。pig蛋君。。  发表于 2012-7-22 19:15
(´Д`)。。。好吧、。。。话说有木有BUG啊。。  发表于 2012-7-22 17:22
本人目前已被作业山压死,有事请烧(call)纸(me)……
回复

使用道具 举报

梦石
0
星屑
50
在线时间
250 小时
注册时间
2011-8-16
回帖
163
发表于 2012-7-22 19:34:11 | 显示全部楼层
我用了之后,突然变得巨卡 (我放了不少动态景物之类的)
——————
回复

使用道具 举报

梦石
0
星屑
47
在线时间
412 小时
注册时间
2012-6-1
回帖
1008
发表于 2012-7-22 23:56:19 | 显示全部楼层
原创支持
不过这样的八方向会不会拖慢游戏的速度?
实用性强不?
这里是新人 明特·布兰马修
脚本盲 事件盲 美工盲
还是色盲ORZ
XP\VX略懂VA无助很抱歉
所以问题什么如果答不好就不要提醒我了
短篇7已经放弃,但是坑在继续补上。所以回答和现身次数少之。
有事烧纸或者留言即可。

还有我不是正太啊ORZ
回复

使用道具 举报

梦石
0
星屑
55
在线时间
36 小时
注册时间
2009-1-17
回帖
20
发表于 2012-7-23 16:50:39 | 显示全部楼层
支持楼主,太棒了,
多谢多谢啊,抱走啦~
找时间也得学学脚本什么的..总感觉好难的说~
回复

使用道具 举报

梦石
0
星屑
50
在线时间
107 小时
注册时间
2010-10-10
回帖
191
发表于 2013-3-5 20:20:53 | 显示全部楼层
用了之后很卡,不建议使用。。。。。建议LZ优化一下 原本50帧的游戏运速,一下子降低到了10几帧。
我是新手党,但是请不要小看任何一个新手,新手们的力量,是不容忽略的!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
48 小时
注册时间
2010-12-24
回帖
34
发表于 2013-4-1 15:28:10 | 显示全部楼层
运行不了,只能打开工程,rgss300.dll缺少

点评

那啥,你保存一下再重新打开试试。。。(本人助人无数,只为混点经验)  发表于 2014-4-16 20:51
回复

使用道具 举报

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-8
回帖
5
发表于 2013-7-9 01:18:58 | 显示全部楼层
真的可以在RMVA中使用,并且与改变行走图帧数脚本不冲突。多谢!
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部