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

Project1

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

[已经过期] 试图用脚本在地图上显示动画失败了是为什么?

[复制链接]

Lv2.观梦者

梦石
0
星屑
815
在线时间
636 小时
注册时间
2011-1-21
帖子
176
跳转到指定楼层
1
发表于 2017-12-31 18:56:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 pokemonjs 于 2018-1-1 10:22 编辑

如题所示,最近在努力做一款ARPG,关于ARPG中地图上技能的显示遇到了一些问题。起初我是用一个行走图是动画图形的Game_Event来作为地图上的技能事件,但是后来发现有些动画并不很合适用行走图来表示,于是我将其改成了一个行走图为空的Game_Event,并且用animation_id属性来控制它显示的技能动画,但是在实际操作中发现,这些动画并不能出现在屏幕上,我尝试着p出了这个事件的坐标,通过与角色坐标的对比发现确实是在视野范围中的,而且动画虽然不显示,但是动画背景SE是有的,而且似乎是在循环播放,这是为什么呢?求教,谢谢各位!
RUBY 代码复制
  1. #地图技能类
  2. class Game_MNSkill < Game_Character
  3.  
  4.   #单位长度,技能的实际长宽分别乘以动画的放大率
  5.   UNITSIZE=128
  6.  
  7.   attr_reader     :collider
  8.  
  9.   def initialize(owner,skill_id)
  10.     super()
  11.     @skill=$data_skills[skill_id]
  12.     @owner=owner
  13.     @x=owner.x
  14.     @y=owner.y
  15.     @real_x=owner.real_x
  16.     @real_y=owner.real_y
  17.     @animation1=$data_animations[@skill.animation1_id]
  18.     @animation2=$data_animations[@skill.animation2_id]
  19.     @through=true
  20.     @index=0
  21.     @frame_max=@animation1.frame_max
  22.     #碰撞盒子
  23.     val=Toolkit.get_anim_rect(@animation1,@index)
  24.     @collider=Rect.new(
  25.       @real_x+UNITSIZE*val[0],
  26.       @real_y+UNITSIZE*val[1],
  27.       UNITSIZE*val[2],
  28.       UNITSIZE*val[2]
  29.     )
  30.     #将一些特殊标记效果存储在marks中,如@marks["瞬杀"]=true
  31.     @marks=Hash.new()
  32.     @move_speed=@owner.move_speed*1.5
  33.     @animation_id=skill_id
  34.     #移动初始化处理
  35.     moveto(owner.x,owner.y)
  36.     @direction=owner.direction
  37.     @mmove_type=0#默认静止
  38.     #1-直线    2-待定
  39.     common_event=$data_common_events[$data_skills[skill_id].common_event_id]
  40.     for i in common_event.list
  41.       if i.code==108 && i.parameters[0][0,9]=="move_type"
  42.         @mmove_type=i.parameters[0][10,1].to_i
  43.         #str[0]是一个char,也就是ASCII码值
  44.         #str[0,1]是一个长度为1的string
  45.       end
  46.     end if common_event!=nil
  47.   end
  48.  
  49.   def update
  50.     super()
  51.     @index+=1
  52.     @index=0 if @index>=@frame_max
  53.     case @mmove_type
  54.     when 1
  55.       @direction_fix=true
  56.       move_forward
  57.     end unless moving?
  58.     #更新碰撞盒子
  59.     val=Toolkit.get_anim_rect(@animation1,@index)
  60.     @collider=Rect.new(
  61.       @real_x+UNITSIZE*val[0],
  62.       @real_y+UNITSIZE*val[1],
  63.       UNITSIZE*val[2],
  64.       UNITSIZE*val[2]
  65.     )
  66.   end
  67.  
  68.   #--------------------------------------------------------------------------
  69.   # ● 接触事件启动判定
  70.   #--------------------------------------------------------------------------
  71.   def check_event_trigger_touch(x, y)
  72.     result = false
  73.     # 事件执行中的情况下
  74.     if $game_system.map_interpreter.running?
  75.       return result
  76.     end
  77.     #对所有敌人进行循环
  78.     for enemy in $game_mbs.enemy_list
  79.       if enemy.collider?(self)
  80.         enemy.damage_by(self)
  81.         result=true
  82.       end
  83.     end
  84.     #对角色队伍进行循环
  85.     for player in $game_players
  86.       if player.collider?(self)
  87.         player.damage_by(self)
  88.         result=true
  89.       end
  90.     end
  91.     return result
  92.   end
  93.  
  94. end
  95.  
  96. #地图敌人类中的攻击方法
  97. def fire_on(target)
  98.     skill=Game_MNSkill.new(self,1)#1代表普攻
  99.     @spe_effs.each_pair do |key,val|
  100.       if skill.spe_effs.has_key?
  101.         case spe_effs[key].class
  102.         when Numberic
  103.           skill.spe_effs[key] += val
  104.         when TrueClass
  105.           skill.spe_effs[key] ||= val
  106.           next
  107.         when  FalseClass
  108.           skill.spe_effs[key] ||= val
  109.           next
  110.         end
  111.       else
  112.         skill.spe_effs[key]=val
  113.       end
  114.     end
  115.     $game_map.add_effect(skill)
  116.   end

Lv4.逐梦者

梦石
0
星屑
7921
在线时间
1049 小时
注册时间
2012-4-3
帖子
1271

开拓者

2
发表于 2017-12-31 19:28:42 手机端发表。 | 只看该作者
行走图虽然可以为空,但是要确保这个行走图存在。可以尝试用一张透明的行走图作为替代。祝你好运( ^_^)/
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1387
在线时间
184 小时
注册时间
2007-2-28
帖子
145
3
发表于 2018-1-1 09:33:03 | 只看该作者
想知道脚本哪里出问题你得把脚本贴出来啊……不过我猜要么是没建立RPG::Sprite,要么是Z值不对图形被覆盖了,要么就是没刷新的问题……

点评

emmmm不太清楚你这脚本的原理,get_anim_rect这个方法是哪来的?  发表于 2018-1-2 22:47
好的,谢谢建议,已在1L更新了帖子。  发表于 2018-1-1 10:23
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23984
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

4
发表于 2018-1-1 15:42:20 | 只看该作者
不太清楚,楼上几位的说法都有可能,,除此之外,会不会是指定的Sprite被设置了visible = false?

点评

好的,谢谢!我再去检查下。  发表于 2018-1-6 13:24
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

5
发表于 2018-1-1 17:39:09 | 只看该作者
可以使用那个在地图指定坐标显示动画的脚本,而不是在人物身上显示
论坛里能找到

点评

了解了,谢谢!我去搜索下尽心参考!  发表于 2018-1-6 13:25
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-21 20:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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