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

Project1

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

[原创发布] 翻转(水平/垂直)动画

[复制链接]

Lv2.观梦者

(?????)

梦石
0
星屑
728
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

跳转到指定楼层
1
发表于 2012-4-3 03:33:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 各种压力的猫君 于 2012-4-3 03:34 编辑

(根据提问区问题 如何将数据库动画水平翻转。编写。)


RUBY 代码复制
  1. #==============================================================================
  2. # ■ 翻转动画 by 各种压力的猫君
  3. #------------------------------------------------------------------------------
  4. #  翻转显示动画,支持水平翻转和垂直翻转,理论支持任何地方的动画显示。
  5. #------------------------------------------------------------------------------
  6. #   使用方法:
  7. #     ① 扩大你的动画数据库上限
  8. #     ② 在设定段指定翻转开始编号
  9. #     ③ 需要翻转播放时播放指定编号的动画
  10. #   特殊动画:
  11. #     数据库中动画名以[nf]结尾的动画不会被翻转显示
  12. #     数据库中动画名以[hf]结尾的动画会水平翻转显示
  13. #     数据库中动画名以[vf]结尾的动画会垂直翻转显示
  14. #     识别标示中的字母可在设定段中更改(正则表达式)
  15. #     ※特殊动画的优先级高于数字指定※
  16. #==============================================================================
  17.  
  18. #------------------------------------------------------------------------------
  19. # ● 设定段
  20. #------------------------------------------------------------------------------
  21.  
  22. module FFAni # Full_Flip_Animation
  23.  
  24.   # 水平翻转编号偏移量
  25.   # 若设定为100,则101号动画为1号动画的水平翻转(数据库中可以为空)
  26.   HF_ID = 100
  27.  
  28.   # 垂直翻转编号偏移量(※请确保这个数字比上面一个数字大!※)
  29.   # 若设定为200,则201号动画为1号动画的垂直翻转(数据库中可以为空)
  30.   VF_ID = 200
  31.  
  32.   # 特殊动画识别正则表达式
  33.   NF_Flag = /\[nf\]\z/ # 不翻转
  34.   HF_Flag = /\[hf\]\z/ # 水平翻转
  35.   VF_Flag = /\[vf\]\z/ # 垂直翻转
  36.  
  37. end
  38.  
  39. "         ┏━━━━━━━━━━━━━━━━━┓         "
  40. "         ┃※以下内容无一定脚本基础请勿修改※┃         "
  41. "         ┗━━━━━━━━━━━━━━━━━┛         "
  42.  
  43. #==============================================================================
  44. # ■ RPG::Sprite
  45. #------------------------------------------------------------------------------
  46. #  追加了 RPGXP 使用的各种效果处理的精灵的类。
  47. #==============================================================================
  48.  
  49. module RPG
  50.   class Sprite < ::Sprite
  51.     #------------------------------------------------------------------------
  52.     # ● 播放动画
  53.     #------------------------------------------------------------------------
  54.     def animation(animation, hit)
  55.       dispose_animation
  56.       @_animation = animation
  57.       #---------------------------------------------------
  58.       # 根据动画ID判断翻转情况
  59.       #---------------------------------------------------
  60.       if @_animation.id > FFAni::VF_ID    # 垂直
  61.         full_flip = 2
  62.         fixed_animation_id = @_animation.id - FFAni::VF_ID
  63.       elsif @_animation.id > FFAni::HF_ID # 水平
  64.         full_flip = 1
  65.         fixed_animation_id = @_animation.id - FFAni::HF_ID
  66.       end
  67.       #---------------------------------------------------
  68.       # 根据动画名判断翻转情况
  69.       #---------------------------------------------------
  70.       if(FFAni::NF_Flag =~ @_animation.name)  # 不翻转
  71.         full_flip = 0
  72.       elsif(FFAni::HF_Flag =~ @_animation.name) # 水平
  73.         full_flip = 1
  74.       elsif(FFAni::VF_Flag =~ @_animation.name) # 垂直
  75.         full_flip = 2
  76.       end
  77.       #---------------------------------------------------
  78.       # 修正参数
  79.       #   @_full_flip
  80.       #     0 : 不翻转
  81.       #     1 : 水平翻转
  82.       #     2 : 垂直翻转
  83.       #---------------------------------------------------
  84.       if full_flip == nil
  85.         @_full_flip = 0
  86.       else
  87.         @_full_flip = full_flip
  88.       end
  89.       unless fixed_animation_id == nil
  90.         @_animation = $data_animations[fixed_animation_id]
  91.       end
  92.       #---------------------------------------------------
  93.       return if @_animation == nil
  94.       @_animation_hit = hit
  95.       @_animation_duration = @_animation.frame_max
  96.       animation_name = @_animation.animation_name
  97.       animation_hue = @_animation.animation_hue
  98.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  99.       if @@_reference_count.include?(bitmap)
  100.         @@_reference_count[bitmap] += 1
  101.       else
  102.         @@_reference_count[bitmap] = 1
  103.       end
  104.       @_animation_sprites = []
  105.       if @_animation.position != 3 or not @@_animations.include?(animation)
  106.         for i in 0..15
  107.           sprite = ::Sprite.new(self.viewport)
  108.           sprite.bitmap = bitmap
  109.           sprite.visible = false
  110.           @_animation_sprites.push(sprite)
  111.         end
  112.         unless @@_animations.include?(animation)
  113.           @@_animations.push(animation)
  114.         end
  115.       end
  116.       update_animation
  117.     end
  118.     #------------------------------------------------------------------------
  119.     # ● 播放循环动画
  120.     #------------------------------------------------------------------------
  121.     def loop_animation(animation)
  122.       return if animation == @_loop_animation
  123.       dispose_loop_animation
  124.       @_loop_animation = animation
  125.       return if @_loop_animation == nil
  126.       @_loop_animation_index = 0
  127.       animation_name = @_loop_animation.animation_name
  128.       animation_hue = @_loop_animation.animation_hue
  129.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  130.       if @@_reference_count.include?(bitmap)
  131.         @@_reference_count[bitmap] += 1
  132.       else
  133.         @@_reference_count[bitmap] = 1
  134.       end
  135.       @_loop_animation_sprites = []
  136.       for i in 0..15
  137.         sprite = ::Sprite.new(self.viewport)
  138.         sprite.bitmap = bitmap
  139.         sprite.visible = false
  140.         @_loop_animation_sprites.push(sprite)
  141.       end
  142.       update_loop_animation
  143.     end
  144.     #------------------------------------------------------------------------
  145.     # ● 设定动画Sprites
  146.     #------------------------------------------------------------------------
  147.     def animation_set_sprites(sprites, cell_data, position)
  148.       for i in 0..15
  149.         sprite = sprites[i]
  150.         pattern = cell_data[i, 0]
  151.         if sprite == nil or pattern == nil or pattern == -1
  152.           sprite.visible = false if sprite != nil
  153.           next
  154.         end
  155.         sprite.visible = true
  156.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  157.         if position == 3
  158.           if self.viewport != nil
  159.             sprite.x = self.viewport.rect.width / 2
  160.             sprite.y = self.viewport.rect.height - 160
  161.           else
  162.             sprite.x = 320
  163.             sprite.y = 240
  164.           end
  165.         else
  166.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  167.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  168.           sprite.y -= self.src_rect.height / 4 if position == 0
  169.           sprite.y += self.src_rect.height / 4 if position == 2
  170.         end
  171.         #---------------------------------------------------
  172.         # 脚本本体
  173.         #---------------------------------------------------
  174.         case @_full_flip
  175.         when 0  # 啥也不做
  176.           sprite.x += cell_data[i, 1]
  177.           sprite.y += cell_data[i, 2]
  178.           sprite.angle = cell_data[i, 4]
  179.           sprite.mirror = (cell_data[i, 5] == 1)
  180.         when 1  # 水平翻转
  181.           sprite.x -= cell_data[i, 1]
  182.           sprite.y += cell_data[i, 2]
  183.           sprite.angle = 360 - cell_data[i, 4]
  184.           sprite.mirror = (cell_data[i, 5] == 0)
  185.         when 2  # 垂直翻转
  186.           sprite.x += cell_data[i, 1]
  187.           sprite.y -= cell_data[i, 2]
  188.           temp_angel = cell_data[i, 4] + 180
  189.           sprite.angle = temp_angel > 360 ? temp_angel - 360 : temp_angel   
  190.           sprite.mirror = (cell_data[i, 5] == 0)  
  191.         end
  192.         #---------------------------------------------------
  193.         sprite.z = 2000
  194.         sprite.ox = 96
  195.         sprite.oy = 96
  196.         sprite.zoom_x = cell_data[i, 3] / 100.0
  197.         sprite.zoom_y = cell_data[i, 3] / 100.0
  198.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  199.         sprite.blend_type = cell_data[i, 7]
  200.       end
  201.     end
  202.   end
  203. end


这没啥好截图的 = = b 用法很简单,范例不提供了。

评分

参与人数 1星屑 +200 收起 理由
Kimu + 200 发布奖励

查看全部评分

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42422
在线时间
7603 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

2
发表于 2012-4-3 18:07:49 | 只看该作者
还以为要用到api,angle和mirror本身就挺慢的……

点评

记忆中相当慢,而且还有锯齿。  发表于 2012-4-3 18:09
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
145 小时
注册时间
2011-7-14
帖子
43
3
发表于 2012-4-12 14:27:49 | 只看该作者
怎样复制代码!
只想完成自己所梦想的游戏!
只要自己努力
回复 支持 反对

使用道具 举报

Lv1.梦旅人

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

4
发表于 2012-5-13 08:48:37 手机端发表。 | 只看该作者
其实我记得zoomxy改成负数就行……
某只PHP/HTML小白鼠→退屈の间


Cause I knew you were trouble when you walked in
So shame is on me now
I flow me to place i ve never been
till you put me down oh
Now Im lying on the cold hard ground
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
186 小时
注册时间
2012-5-8
帖子
987
5
发表于 2012-5-13 23:09:30 | 只看该作者
有图片或范例吗?能让别人更好的理解。
看什么看,没看过大坑啊!
-------------------------炫翼-----------------------------
剧情:4%
地图:2%
系统:7%
优化:3%
脚本:25%
--------------------------炫翼----------------------------

      工作室


广告位招租....  
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

6
发表于 2012-5-16 13:32:01 | 只看该作者
怎么用啊?表示纠结中
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 15:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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