查看: 2166|回复: 4

[RMVA发布] 新手修改的8帧行走站立图脚本

[复制链接]
梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-8
回帖
5
发表于 2013-7-13 10:34:55 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 boby1999 于 2013-7-13 10:41 编辑

[pre lang="ruby" line="1"]# 文件名第一位为'&'支持8张循环
# 文件中有8行,前四行依次对应脸向下、脸向左、脸向右、脸向上的站立图
# 后四行依次对应下行、左行、右行、上行的行走图
#
# 文件名第一位为'%'支持8张循环
# 文件中有4行,依次对应下行、左行、右行、上行的行走图
#
# 这两种格式的动画,为适应RMXP中原有1600X1600或800的行走图,
# 把人物图片的中心点位置往下移18%,让脚与想站的格子相吻合

# 定义一个模块级常量,文件名第一位为'&'或'%'时每帧画面宽度是总宽除以8
# 第1495号开关量为On时,表示当前是站立状态,否则是移动状态
module MY_SPRITE_DEFINE
  CONST_FRAME_NUMBER = 8
  SWITCH_SN_STOP_OR_MOVING = 1495
end

class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 设定角色的位图
  #--------------------------------------------------------------------------
  def set_character_bitmap
    self.bitmap = Cache.character(@character_name)
    sign = @character_name[/^[\!\$]./]
    if @character_name[0] == '&'
      @cw = bitmap.width / MY_SPRITE_DEFINE::CONST_FRAME_NUMBER
      @ch = bitmap.height / 8 # 前四行为站立图,后四行为行走图
      self.oy = @ch * 0.82    # 把图片的中心点位置往下移18%
    elsif @character_name[0] == '%'
      @cw = bitmap.width / MY_SPRITE_DEFINE::CONST_FRAME_NUMBER
      @ch = bitmap.height / 4
      self.oy = @ch * 0.82    # 把图片的中心点位置往下移18%
    else
      if sign && sign.include?('$')
        @cw = bitmap.width / 3
        @ch = bitmap.height / 4
      else
        @cw = bitmap.width / 12
        @ch = bitmap.height / 8
      end
      self.oy = @ch
    end
    self.ox = @cw / 2
  end
  #--------------------------------------------------------------------------
  # ● 源矩形的更新
  #--------------------------------------------------------------------------
  def update_src_rect
    if @tile_id == 0
      if @character_name[0] == '&'
        sx = @character.pattern * @cw
        if $game_switches[MY_SPRITE_DEFINE::SWITCH_SN_STOP_OR_MOVING]
          # 如果是站立着的,从前4行图形里取对应序号的帧
          sy = (@character.direction - 2) / 2 * @ch
        else
          # 如果是行走中的,从后4行图形里取对应序号的帧
          sy = ((@character.direction - 2) / 2 + 4) * @ch
        end
      elsif @character_name[0] == '%'
        # 根据指定的帧编号获取对应序号的画面
        sx = @character.pattern * @cw
        sy = (@character.direction - 2) / 2 * @ch
        
      else
        index = @character.character_index
        pattern = @character.pattern < 3 ? @character.pattern : 1
        sx = (index % 4 * 3 + pattern) * @cw
        sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
      end
      self.src_rect.set(sx, sy, @cw, @ch)
    end
  end
end

class Game_CharacterBase
  #--------------------------------------------------------------------------
  # ● 更新动画图案
  #--------------------------------------------------------------------------
  def update_anime_pattern
    if @character_name[0] == '&'
      # 系统开关量1495中存放主角是在站立状态吗?true or false
      $game_switches[MY_SPRITE_DEFINE::SWITCH_SN_STOP_OR_MOVING]= @stop_count > 0
      
      # 这里+1再用8取模,则1~8帧就会在行走时循环
      @pattern = (@pattern + 1) % MY_SPRITE_DEFINE::CONST_FRAME_NUMBER
      
    elsif @character_name[0] == '%'
      # 这里+1再用8取模,则1~8帧就会在行走时循环
      @pattern = (@pattern + 1) % MY_SPRITE_DEFINE::CONST_FRAME_NUMBER
      
    else
      if !@step_anime && @stop_count > 0
        @pattern = @original_pattern
      else
        @pattern = (@pattern + 1) % 4
      end
    end
  end
end
[/pre]

评分

参与人数 1星屑 +5 收起 理由
sszny + 5 塞糖

查看全部评分

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
回帖
2982

贵宾

发表于 2013-7-14 09:39:38 | 显示全部楼层
现在这个状态会使所有事件都共用一个开关,确定没有问题么?
回复

使用道具 举报

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-8
回帖
5
 楼主| 发表于 2013-7-14 10:02:04 | 显示全部楼层
我也没有找到好的办法来判断当前人物的站或行的状态。当我在把《金庸无双》的第一个场景移植到RMVA时,这是碰到的第一个难题,好在我只控制一个玩家,暂时还能不冲突。请问有更好的处理方法吗?多谢!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
250 小时
注册时间
2011-8-16
回帖
163
发表于 2013-8-12 05:11:24 | 显示全部楼层
很久以前一直期盼着这个脚本
楼主帮我圆梦了{:2_272:}
——————
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部