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

Project1

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

[已经过期] 请问va有补丁能让两个动画播放在同一个人物\事件上么?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
102
在线时间
402 小时
注册时间
2013-11-2
帖子
104
跳转到指定楼层
1
发表于 2017-2-7 08:01:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
va动画问题

Lv1.梦旅人

梦石
0
星屑
50
在线时间
137 小时
注册时间
2014-1-27
帖子
71
2
发表于 2017-2-7 16:33:07 | 只看该作者

请问va有补丁能让两个动画播放在同一个人物\事件上么?

请问va有补丁能让两个动画播放在同一个人物\事件上么?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
137 小时
注册时间
2014-1-27
帖子
71
3
发表于 2017-2-7 16:51:32 | 只看该作者
一个事件播放一个动画(动画1)时,如果还没有播放完就再让这个事件播放其它动画(动画2),那么原来的动画1就不会继续播放而是直接播放动画2。如何让2个动画同时在1个事件播放?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
102
在线时间
402 小时
注册时间
2013-11-2
帖子
104
4
 楼主| 发表于 2017-2-8 15:29:18 | 只看该作者
幼吾幼 发表于 2017-2-7 16:51
一个事件播放一个动画(动画1)时,如果还没有播放完就再让这个事件播放其它动画(动画2),那么原来的动画 ...

咱俩帖子标题为啥一样给我整懵了都
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
137 小时
注册时间
2014-1-27
帖子
71
5
发表于 2017-2-8 16:24:05 | 只看该作者
库拉托斯 发表于 2017-2-8 15:29
咱俩帖子标题为啥一样给我整懵了都

直接复制。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
102
在线时间
402 小时
注册时间
2013-11-2
帖子
104
6
 楼主| 发表于 2017-2-8 16:31:11 | 只看该作者

好吧,这个确实是个问题,我有一个解决方案,虽然效果可以,但是我不是很满意
方案如下:
新建一个透明事件,并行处理
事件内容是
1.获取玩家/事件的x和y值
2.将坐标赋值给本事件,让本事件和人物同格
3.再本事件上播放动画
亲测有效,并且不卡顿,但是要是每个地图都需要同时显示两个动画的话则每个地图都要有一个这样的事件,太费劲,不过要是临时一个什么剧情需要同时播放两个事件的倒是挺管用的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
137 小时
注册时间
2014-1-27
帖子
71
7
发表于 2017-2-8 19:31:59 | 只看该作者
库拉托斯 发表于 2017-2-8 16:31
好吧,这个确实是个问题,我有一个解决方案,虽然效果可以,但是我不是很满意
方案如下:
新建一个透明事 ...

我也考虑到了。我给你一个脚本,大概就会让你满意,但是还是用你的思路。
复制事件脚本:

=begin
  $game_self_switches[[地图编号,事件编号,"A"]] = true/false

  使用说明
  
  copy_map_event(map_id, event_id, x, y)
  
    复制特定地图的特定事件 到坐标 x y
    如果 x y 坐标不填,事件就复制到原本的坐标
   
    示例 copy_map_event(2, 1) # 复制地图2的事件1
         copy_map_event(3, 2, 0, 0) # 复制地图3的事件2到坐标(0,0)
  
  
  关于独立开关
  
    现在每个“复制事件”有各自的独立开关,利用“复制事件”里的独立开关操作来开启。
    “复制事件”的独立开关优先级高于原本“被复制事件”的独立开关。
   
    要开/关“被复制事件”的某个独立开关可以用脚本
      $game_self_switches[[map_id, event_id, "A"]] = true / false
  
  
      
      
  remove_copy_event(map_id, event_id)
  
    移除从特定地图复制过来的事件,如果复制了多个则全部移除
    需要一个一个移除使用下面的方法
   
   
  remove_map_event(事件id)
  
    移除指定id的事件
    复制过来的事件id为 当前地图事件id最大值 + 1
  
=end


class Game_Interpreter
  def copy_map_event(map_id, event_id, x = nil, y = nil)
    map_filename = sprintf("Data/Map%03d.rvdata2", map_id)
    if File.exist?(map_filename)
      event = load_data(map_filename).events[event_id]
      if event
        event = Game_Event.new(map_id, event)
        event_id = $game_map.events.keys.max + 1
        event_id += $game_map.copy_map_events.size if $game_map.copy_map_events
        event.event_copy_setup(event_id, x, y)
        $game_map.prepare_copy_event(event)
      elsif $TEST
        msgbox("复制<地图#{map_id}>的<事件#{event_id}>失败,该事件不存在。")
        exit
      end
    elsif $TEST
      msgbox("从<地图#{map_id}>复制事件失败,该地图不存在。")
      exit
    end
  end
  def remove_copy_event(map_id, event_id)
    $game_map.events.each_value {|event|
      if event.copy_id == event_id && event.map_id == map_id
        $game_map.prepare_remove_event(event)
      end
    }
  end
  def remove_map_event(event_id)
    event = $game_map.events[event_id]
    $game_map.prepare_remove_event(event) if event
  end
  #
  alias_method :copy_map_event_command_123, :command_123
=begin
  def command_123
    if @event_id > 0
      event = get_character(@event_id)
      event.copy_id ?
        process_copy_self_switch(event) :
        copy_map_event_command_123
    end
  end
=end
  def process_copy_self_switch(event)
    event.copy_self_switch ||= {}
    event.copy_self_switch[@params[0]] = (@params[1] == 0)
    all_off = true
    event.copy_self_switch.each_value {|key| break all_off = false if key}
    event.copy_self_switch = nil if all_off
    $game_map.need_refresh = true
  end
end
#
class Spriteset_Map
  def add_copy_event(event)
    @character_sprites.push(Sprite_Character.new(@viewport1, event))
  end
  def remove_copy_event(event)
    @character_sprites.each {|sprite|
      if sprite.character == event
        @character_sprites.delete(sprite)
        sprite.dispose
        return
      end
    }
  end
end
#
class Scene_Map
  attr(:spriteset)
end
class Game_Map
  attr(:copy_map_events)
  def prepare_copy_event(event)
    @copy_map_events ||= {}
    @tile_events.push(event) if event.tile?
    @copy_map_events[event] = true
  end
  def prepare_remove_event(event)
    @copy_map_events ||= {}
    @tile_events.delete(event) if event.tile?
    @copy_map_events[event] = false
  end
  alias_method :copy_map_events_update_events, :update_events
  def update_events
    copy_map_events_update_events
    if @copy_map_events
      delete_ids = []
      in_map = SceneManager.scene_is?(Scene_Map)
      @copy_map_events.each {|event, copy|
        if copy
          @events[event.id] = event
          SceneManager.scene.spriteset.add_copy_event(event) if in_map
        else
          delete_ids.push(event.id)
          SceneManager.scene.spriteset.remove_copy_event(event) if in_map
        end
      }
      delete_ids.each {|id| @events.delete(id)}
      @copy_map_events = nil
    end
  end
end
class Game_Event
  attr(:copy_id, :map_id)
  attr_accessor :copy_self_switch
  def event_copy_setup(id, x, y)
    @copy_id = @id
    @id = id
    moveto(x, y) if x && y
  end
  def update #注意:方法覆盖
    super
    check_event_trigger_auto
    return unless @interpreter
    @interpreter.setup(@list, @id) unless @interpreter.running?
    @interpreter.update
  end
  def conditions_met?(page) #注意:方法覆盖
    c = page.condition
   
    if c.switch1_valid
      if c.switch1_id == 3
        return false unless $game_e[[@id,"found"]] == true
      else
        return false unless $game_switches[c.switch1_id]
      end
    end
    if c.switch2_valid
      if c.switch2_id == 3
        return false unless $game_e[[@id,"found"]] == true
      else
        return false unless $game_switches[c.switch2_id]
      end
    end
   
    if c.variable_valid
      return false if $game_variables[c.variable_id] < c.variable_value
    end
    if c.self_switch_valid
      return false unless @copy_self_switch ?
        @copy_self_switch[c.self_switch_ch] :
        $game_self_switches[[@map_id, @event.id, c.self_switch_ch]]
    end
    if c.item_valid
      item = $data_items[c.item_id]
      return false unless $game_party.has_item?(item)
    end
    if c.actor_valid
      actor = $game_actors[c.actor_id]
      return false unless $game_party.members.include?(actor)
    end

    if page.list[0].code == 108
      key = [@map_id, @event.id, page.list[0].parameters[0].split('出现条件:独立开关操作')[1].to_s]
      return false if $game_self_switches[key] != true
    end

    return true
  end
end




先在一个地图设置上一个用来显示动画的事件,然后在其他地图里用脚本指令复制过去就可以了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
137 小时
注册时间
2014-1-27
帖子
71
8
发表于 2017-2-8 19:32:47 | 只看该作者
幼吾幼 发表于 2017-2-8 19:31
我也考虑到了。我给你一个脚本,大概就会让你满意,但是还是用你的思路。
复制事件脚本:

本人做ARPG。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
102
在线时间
402 小时
注册时间
2013-11-2
帖子
104
9
 楼主| 发表于 2017-2-8 22:09:51 | 只看该作者

确实简化了不少,至少不用每个图都粘贴一遍了,我也做arpg,有机会多交流啊
qq 1773320143 加不加随你,6R我也经常上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
137 小时
注册时间
2014-1-27
帖子
71
10
发表于 2017-2-9 11:53:43 | 只看该作者
库拉托斯 发表于 2017-2-8 22:09
确实简化了不少,至少不用每个图都粘贴一遍了,我也做arpg,有机会多交流啊
qq 1773320143 加不加随你,6 ...

验证密码:我的名字是:…………
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 05:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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