幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3206|回复: 14

[RMVX] [求助]关于自定角色的移动帧数与待机动作脚本图片命名冲

[复制链接]

28

主题

108

帖子

1191

积分

⑥精研

积分
1191
发表于 2007-5-6 18:39:09 | 显示全部楼层 |阅读模式
我使用的待机动作脚本,在图片命名格式上要求每个待机动作图名称后缀上"_W"
但是呢 我用到的行走图的移动帧数并不全是统一的 有的是8帧 有的是12帧 这时 我便用了“更改角色的移动帧数、移动帧速率”脚本
问题出来了 这个自定移动帧数的脚本也有图片命名限制 比如 你用8帧 后缀就是"_8"
这样一来 2个脚本的图片名称后缀冲突了
也就是
在运行待机动作时 系统只认 后缀为_W的
而用了自设移动帧数脚本 那么系统只认行走图后缀为"_帧数" 也就是 用了这脚本 所有行走图名称必须标上"_帧数"


该怎么处理 才好呢?
如果此问题不好解决
那么请教 用哪些脚本可以使如下3个功能并存
1:人物有待机动作
2:不同的角色行走图移动帧数可以不相同
3:八方向与斜四方向并存
回复

使用道具 举报

好人卡的 该用户已被删除
发表于 2007-5-6 18:55:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

28

主题

108

帖子

1191

积分

⑥精研

积分
1191
 楼主| 发表于 2007-5-6 22:10:17 | 显示全部楼层
这样还是不行 比如一个待机动作图片名称 改成了 :飞剑侠_W@8
这样的话 运行时 系统还是说找不到 :飞剑侠_W
回复 支持 反对

使用道具 举报

38

主题

3468

帖子

1

积分

超级版主

传说中的Bunny火神~!

Rank: 8Rank: 8

积分
1
发表于 2007-5-7 14:21:54 | 显示全部楼层
其实有一个很狡猾的方法,只要在定义“_W”这个后辍的地方将其改为“_W_8”就可以了,只要素材是配套的,行走图的帧数应该一样。
我突然发现,我是一个很幸运的好人。老婆真好~ 点我进入JQ(激情)教程范例收集!
回复 支持 反对

使用道具 举报

28

主题

108

帖子

1191

积分

⑥精研

积分
1191
 楼主| 发表于 2007-5-7 18:33:05 | 显示全部楼层
引用第3楼杀鸡四天王2007-05-07 14:21发表的:
其实有一个很狡猾的方法,只要在定义“_W”这个后辍的地方将其改为“_W_8”就可以了,只要素材是配套的,行走图的帧数应该一样。



我用的各个角色的行走图帧数不是统一的 有些行走图帧数是12 有的是8
改成 _W_8 就是只能8帧的了
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
发表于 2007-5-7 19:24:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

28

主题

108

帖子

1191

积分

⑥精研

积分
1191
 楼主| 发表于 2007-5-8 13:16:32 | 显示全部楼层
引用第5楼好人卡的神话2007-05-07 19:24发表的:
- -+那就只好用邪恶的方法了。。。
制造一个for的循环,然后:
for i in 8..12#这边的这个8代表的是你所有行走图里最小帧数的,12是最大帧数的。
if FileTest.exist?(行走图名称+i.to_s)
更改行走图的指令,后缀名为_W_ + i.to_s
.......

可是我的待机动作脚本的图片命名规则是 : 每张待机动作图后缀名称必须是“_W”
你要在后面在加上帧数的话 那系统就会出错了 说“找不到到XX待机图”了

就好象是一个文件的格式一样 如果你有两个后缀 那么只认你最后一个后缀 前一个后缀会被当成名称


因为不管是待机图还是行走图 各角色的帧数都是不一致的,所以
我认为解决此问题的方法 可能在名称命名上行不通
只能去修改控制人物移动帧数的脚本。让他可以读取不同帧数的行走图
[s:8]
回复 支持 反对

使用道具 举报

38

主题

3468

帖子

1

积分

超级版主

传说中的Bunny火神~!

Rank: 8Rank: 8

积分
1
发表于 2007-5-8 21:45:06 | 显示全部楼层
命名规则也是根据脚本内容制定的,脚本改了命名规则也改了……

你能把脚本中带有"_W"的行贴出来吗?还有那个关于帧数的脚本也贴一下……顺便把你游戏中的最小帧数和最大帧数说一下,方便帮你改。
我突然发现,我是一个很幸运的好人。老婆真好~ 点我进入JQ(激情)教程范例收集!
回复 支持 反对

使用道具 举报

28

主题

108

帖子

1191

积分

⑥精研

积分
1191
 楼主| 发表于 2007-5-9 09:17:50 | 显示全部楼层
那真是谢谢你了 [s:1]  [s:7]  我终于看到希望了 [s:6]

脚本:更改角色的移动帧数、移动帧速率

内容:

=====================================================
#说明:
#此脚本是8方向的,具体查找:@ch = bitmap.height / 8  
#修改最后的数字8就是8方#向 4为4方向
#例:
#角色1,行走图文件为:001-Fighter01.png  则为4帧
#角色1,行走图文件为:002-Fighter02_5.png  则为5帧
#角色3,行走图文件为:003-Fighter03_8.png  则为8帧

#使用此脚本后,行走图文件名要有一定的限制~~~不要出现两个下划线……

#另(柳柳编按):

#刷新速度方面,全脚本搜索
#if @anime_count > 18 - @move_speed * 2
#(默认是在Game_Character 2的23行)

#把那个18改小就能缩短刷新间隔时间



#========================================
#
#========================================
# ■ Sprite_Character
#-------------------------------------------------
#  角色显示用脚本。监视 Game_Character 类的实例、
# 自动变化脚本状态。
#===============================================

class Sprite_Character < RPG::Sprite
#------------------------------------------
# ● 定义实例变量
#------------------------------------------
attr_accessor :character                # 角色
#------------------------------------------
# ● 初始化对像
#     viewport  : 查看端口
#     character : 角色 (Game_Character)
#------------------------------------------
def initialize(viewport, character = nil)
   super(viewport)
   @character = character
   update
end
#---------------------------------------
# ● 更新画面
#-----------------------------------------
def update
   super
   # 元件 ID、文件名、色相与现在的情况存在差异的情况下
   if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_hue != @character.character_hue
     # 记忆元件 ID 与文件名、色相
     @tile_id = @character.tile_id
     @character_name = @character.character_name
     @character_hue = @character.character_hue
     # 元件 ID 为有效值的情况下
     if @tile_id >= 384
       self.bitmap = RPG::Cache.tile($game_map.tileset_name,
         @tile_id, @character.character_hue)
       self.src_rect.set(0, 0, 32, 32)
       self.ox = 16
       self.oy = 32
     # 元件 ID 为无效值的情况下
     else
       self.bitmap = RPG::Cache.character(@character.character_name,
         @character.character_hue)
       fps = @character.character_name.split(/_/)[1] != nil ? @character.character_name.split(/_/)[1].to_i : 4
       @cw = bitmap.width / fps
       @ch = bitmap.height / 8
       self.ox = @cw / 2
       self.oy = @ch
     end
   end
   # 设置可视状态
   self.visible = (not @character.transparent)
   # 图形是角色的情况下
   if @tile_id == 0
     # 设置传送目标的矩形
     sx = @character.pattern * @cw
     sy = (@character.direction - 2) / 2 * @ch
     self.src_rect.set(sx, sy, @cw, @ch)
   end
   # 设置脚本的坐标
   self.x = @character.screen_x
   self.y = @character.screen_y
   self.z = @character.screen_z(@ch)
   # 设置不透明度、合成方式、茂密
   self.opacity = @character.opacity
   self.blend_type = @character.blend_type
   self.bush_depth = @character.bush_depth
   # 动画
   if @character.animation_id != 0
     animation = $data_animations[@character.animation_id]
     animation(animation, true)
     @character.animation_id = 0
   end
end
end

================================================
回复 支持 反对

使用道具 举报

28

主题

108

帖子

1191

积分

⑥精研

积分
1191
 楼主| 发表于 2007-5-9 09:21:09 | 显示全部楼层
脚本:待机动作
内容:

==================================================

#==============================================================================
# ■ 待机动作系统(多种)
#------------------------------------------------------------------------------
#  企图改为随机的动态小动作...也就是更多的小动作...但尚未实现(原因:缺少素材)
#   By 星子,whbm(企图修改)
#==============================================================================
class Game_Character
  attr_accessor :time
  attr_accessor :step_anime_in
  attr_accessor ld_character
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  alias old_ini initialize
  def initialize
    old_ini
    @old_character = ""
    @time = 0
    @step_anime_in = 0
  end
  TIME_LIMIT = 1 # 抓耳挠腮前的等待时间 (好象也不是帧…不知道是什么单位了)
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update   
    if self.is_a?(Game_Player) or self.is_a?(Game_Event)
      if @time == TIME_LIMIT
        @character_name = @old_character + "_W"
        @step_anime_in = 1
        @step_anime = true
        @time = TIME_LIMIT + 1
      elsif @time < TIME_LIMIT
        @step_anime_in = 0
        @step_anime = false
      end
      if moving? or $game_system.map_interpreter.running? or
         @move_route_forcing
        if $game_system.map_interpreter.running?
          @character_name = @old_character + "_W"
        else
          @time = 0
          @character_name = @old_character
        end
      end
      unless moving?
        @time += 1 if @time < TIME_LIMIT
      end
    #elsif self.is_a?(Game_Event)
    end
    # 跳跃中、移动中、停止中的分支
    if jumping?
      update_jump
    elsif moving?
      update_move
    else
      update_stop
    end
    # 动画计数超过最大值的情况下
    # ※最大值等于基本值减去移动速度 * 1 的值
    #====================夏娜改=====================================
    shanaspeed = @character_name == @old_character + "_W" ? $待机图速度ok : $行走图速度ok
   
    if @anime_count > 16 * 8/$c3_每一步的帧数 - (@move_speed * 2*shanaspeed).round#18 - @move_speed * 2
      # 停止动画为 OFF 并且在停止中的情况下
      if not @step_anime and @stop_count > 0
        # 还原为原来的图形
        @pattern = @original_pattern
      # 停止动画为 ON 并且在移动中的情况下
      else
        # 更新图形
        @pattern = (@pattern + 1) % $c3_每一步的帧数
      end
      # 清除动画计数
      @anime_count = 0
    end
    # 等待中的情况下
    if @wait_count > 0
      # 减少等待计数
      @wait_count -= 1
      return
    end
    # 强制移动路线的场合
    if @move_route_forcing
      # 自定义移动
      move_type_custom
      return
    end
    # 事件执行待机中并且为锁定状态的情况下
    if @starting or lock?
      # 不做规则移动
      return
    end
    # 如果停止计数超过了一定的值(由移动频度算出)
    if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
      # 移动类型分支
      case @move_type
      when 1  # 随机
        move_type_random
      when 2  # 接近
        move_type_toward_player
      when 3  # 自定义
        move_type_custom
      end
    end
  end
end

class Game_Event < Game_Character
    attr_reader   :event
  def initialize(map_id, event)
    super()
    @map_id = map_id
    @event = event
    @id = @event.id
    @erased = false
    @starting = false
    @through = true
    #@old_character = event.pages[0].graphic.character_name
    # 初期位置的移动
    moveto(@event.x, @event.y)
    refresh
  end
end

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    # 同伴人数为 0 的情况下
    if $game_party.actors.size == 0
      # 清除角色的文件名及对像
      #......................................................................
      @old_character = ""
      #......................................................................
      @character_name = ""
      @character_hue = 0
      # 分支结束
      return
    end
    # 获取带头的角色
    actor = $game_party.actors[0]
    # 设置角色的文件名及对像
    @character_name = actor.character_name
    #........................................................................
    @old_character = actor.character_name
    #........................................................................
    @character_hue = actor.character_hue
    # 初始化不透明度和合成方式子
    @opacity = 255
    @blend_type = 0
  end
end
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-23 09:04 , Processed in 0.012080 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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