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

Project1

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

[已经解决] 关于动画随着人物朝向旋转问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2014-7-23
帖子
232
跳转到指定楼层
1
发表于 2016-10-13 13:16:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
有没有一种让数据库的动画根据人物当前朝向而旋转动画的脚本呢?比如说一个激光的动画,是水平播放的,当人物朝向为上下时,变成的垂直播放。好复杂啊

点评

已经解决  发表于 2016-10-20 11:15

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

2
发表于 2016-10-13 14:09:43 | 只看该作者
条件分支,
假如玩家朝向上,则播放动画一,朝向下,则播放动画二,如此类推。
这个激光的动画对应制作四个。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2014-7-23
帖子
232
3
 楼主| 发表于 2016-10-13 23:00:14 | 只看该作者
七重 发表于 2016-10-13 14:09
条件分支,
假如玩家朝向上,则播放动画一,朝向下,则播放动画二,如此类推。
这个激光的动画对应制作四个 ...

这个办法。。。。。。。我只是用激光做比喻,是所有的动画都想让他按朝向旋转,而且不单单是玩家的朝向,事件也包括在内。。。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

4
发表于 2016-10-13 23:57:52 | 只看该作者
qq546431664 发表于 2016-10-13 23:00
这个办法。。。。。。。我只是用激光做比喻,是所有的动画都想让他按朝向旋转,而且不单单是玩家的朝向, ...


因为楼主既提到动画,又提到事件,所以有点好奇。

我查了下,楼主好像是在用ABS制作ARPG?

那么我猜现在是在制作子弹?

如果是的话。

虽然我也不是很了解abs,不过应该是不用这样麻烦的设定吧

你是打算制作什么一个什么功能需要这个设置?

如果猜错就算了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2014-7-23
帖子
232
5
 楼主| 发表于 2016-10-14 10:50:05 | 只看该作者
七重 发表于 2016-10-13 23:57
因为楼主既提到动画,又提到事件,所以有点好奇。

我查了下,楼主好像是在用ABS制作ARPG?

这都被你发现了呀,其实不是麻烦的设定哦,如果实现了,打击效果将是翻倍的哦,
就像你说的目前的每个制作的子弹都能调用数据库的动画,却因为不会随着朝向而改变动画的方向,所以只能选用一些范围伤害的动画,如果是单方向调用动画的话就很奇怪。
要是真不行的话我去悬赏的问问看
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

6
发表于 2016-10-14 11:11:07 | 只看该作者
qq546431664 发表于 2016-10-14 10:50
这都被你发现了呀,其实不是麻烦的设定哦,如果实现了,打击效果将是翻倍的哦,
就像你说的目前的每个制 ...



我自己所见的经验的话,一般应该会把子弹制作成事件的。而不用动画控制。

这样设置的好处就是,当子弹前进的时候,实际上他的视觉效果也是随方向自动变化(因为他本质上是个设置好移动路线的事件),不需要自己另外设定。

--
楼主指出的方法我感觉是会牵动很多东西的,但是也许是我水平不够。

我也只能期待其他人给出其他解答。

点评

总之谢谢你了啊  发表于 2016-10-14 11:30
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
6886
在线时间
7027 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

7
发表于 2016-10-19 15:47:19 | 只看该作者
本帖最后由 RaidenInfinity 于 2016-10-20 11:17 编辑

RUBY 代码复制
  1. #地图上动画朝向脚本
  2. #by RaidenInfinity
  3. class Sprite_Character < Sprite_Base
  4.  
  5.         def ani_four_dir #套用四朝向的动画,角色面向哪儿动画就朝向哪儿
  6.                 [58] #在这里增加想要套用的动画ID,别忘了逗号 例子:[1,2,3,4]
  7.         end
  8.  
  9.         def ani_two_dir #套用二朝向的动画,面向上或下时不变,左或右等同朝右
  10.                 [] #在这里增加想要套用的动画ID,别忘了逗号 例子:[55,66,77,88]
  11.         end
  12.  
  13.         #-----------------------------------------------------------------------------
  14.         #以下的除非你知道你在干嘛,否则请勿触碰!
  15.  
  16.         def char_direction
  17.                 @character.direction       
  18.         end
  19.  
  20.         def char_ani_id
  21.                 @character.animation_id
  22.         end
  23.  
  24.         alias :ani_dir_animation_set_sprites :animation_set_sprites
  25.   def animation_set_sprites(frame)
  26.                         if ani_four_dir.include?(char_ani_id)
  27.                                 animation_set_sprites_d(frame,0)
  28.                                 return
  29.                         elsif ani_two_dir.include?(char_ani_id)
  30.                                 animation_set_sprites_d(frame,1)
  31.                                 return                       
  32.                         end
  33.                         ani_dir_animation_set_sprites(frame)
  34.   end
  35.  
  36.         def animation_set_sprites_d(frame,type)
  37.     cell_data = frame.cell_data
  38.     @ani_sprites.each_with_index do |sprite, i|
  39.       next unless sprite
  40.       pattern = cell_data[i, 0]
  41.       if !pattern || pattern < 0
  42.         sprite.visible = false
  43.         next
  44.       end
  45.                         #y fix
  46.                         a_x = @ani_ox
  47.                         a_y = @ani_oy
  48.                         a_y -= self.height / 2 if char_direction == 4 || char_direction == 6
  49.                         #y fix end
  50.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  51.       sprite.visible = true
  52.       sprite.src_rect.set(pattern % 5 * 192,
  53.         pattern % 100 / 5 * 192, 192, 192)
  54.       if @ani_mirror
  55.         sprite.x = a_x - cell_data[i, 1]
  56.         sprite.y = a_y + cell_data[i, 2]
  57.         sprite.angle = (360 - cell_data[i, 4])
  58.         sprite.mirror = (cell_data[i, 5] == 0)
  59.       else
  60.         sprite.x = a_x + cell_data[i, 1]
  61.         sprite.y = a_y + cell_data[i, 2]
  62.         sprite.angle = cell_data[i, 4]
  63.         sprite.mirror = (cell_data[i, 5] == 1)
  64.       end
  65.                         #direction change here
  66.                         if type == 0 && char_direction != 8
  67.                                 sprite.angle = get_fdir_angle(sprite.angle)
  68.                                 coord = get_fdir_coord([sprite.x - a_x,sprite.y - a_y])
  69.                                 sprite.x = coord[0] + a_x
  70.                                 sprite.y = coord[1] + a_y
  71.                         elsif type == 1 && (char_direction == 4 || char_direction == 6)
  72.                                 sprite.angle = get_tdir_angle(sprite.angle)
  73.                                 coord = get_tdir_coord([sprite.x - a_x,sprite.y - a_y])
  74.                                 sprite.x = coord[0] + a_x
  75.                                 sprite.y = coord[1] + a_y               
  76.                         end
  77.                         #direction change end
  78.       sprite.z = self.z + 300 + i
  79.       sprite.ox = 96
  80.       sprite.oy = 96
  81.       sprite.zoom_x = cell_data[i, 3] / 100.0
  82.       sprite.zoom_y = cell_data[i, 3] / 100.0
  83.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  84.       sprite.blend_type = cell_data[i, 7]
  85.     end
  86.   end
  87.  
  88.         def get_fdir_angle(angle)
  89.                 case(char_direction)
  90.                         when 4; angle += 90
  91.                         when 6; angle -= 90
  92.                         when 2; angle += 180
  93.                 end
  94.                 angle = angle - 360 if angle > 360
  95.                 angle = 360 - angle if angle < 0
  96.                 return angle
  97.         end
  98.  
  99.         def get_tdir_angle(angle)
  100.                 angle -= 90
  101.                 angle = 360 - angle if angle < 0
  102.                 return angle
  103.         end
  104.  
  105.         def get_fdir_coord(vec)
  106.                 return m_mult(get_std_mat(char_direction),vec)
  107.         end
  108.  
  109.         def get_tdir_coord(vec)
  110.                 return m_mult(get_std_mat(6),vec)
  111.         end
  112.  
  113.         def m_mult(std,vec)
  114.                 a = [0,0]
  115.                 a[0] = std[0] * vec[0] + std[1] * vec[1]
  116.                 a[1] = std[2] * vec[0] + std[3] * vec[1]
  117.                 return a
  118.         end
  119.  
  120.         def get_std_mat(direction)
  121.                 case(direction)
  122.                         when 4; return [0,1,-1,0]
  123.                         when 6; return [0,-1,1,0]
  124.                         when 2; return [-1,0,0,-1]
  125.                 end
  126.                 [1,0,0,1]
  127.         end
  128.  
  129. end


MAGIC.

评分

参与人数 1星屑 +250 梦石 +1 收起 理由
怪蜀黍 + 250 + 1 楼主认可的解答

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-8 19:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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