- 累计送礼:
- 0 个
- 累计收礼:
- 0 个
TA的每日心情 | 开心 昨天 18:01 |
---|
签到天数: 114 天 连续签到: 4 天 [LV.6]常住居民II

管理员
  
- VIP
- 6
- 卡币
- 10632
- OK点
- 16
- 推广点
- 0
- 同能卷
- 0
- 积分
- 13401


|
(根据提问区问题如何将数据库动画水平翻转。编写。)
RUBY 代码 - #==============================================================================
- # ■ 翻转动画 by 各种压力的猫君
- #------------------------------------------------------------------------------
- # 翻转显示动画,支持水平翻转和垂直翻转,理论支持任何地方的动画显示。
- #------------------------------------------------------------------------------
- # 使用方法:
- # ① 扩大你的动画数据库上限
- # ② 在设定段指定翻转开始编号
- # ③ 需要翻转播放时播放指定编号的动画
- # 特殊动画:
- # 数据库中动画名以[nf]结尾的动画不会被翻转显示
- # 数据库中动画名以[hf]结尾的动画会水平翻转显示
- # 数据库中动画名以[vf]结尾的动画会垂直翻转显示
- # 识别标示中的字母可在设定段中更改(正则表达式)
- # ※特殊动画的优先级高于数字指定※
- #==============================================================================
- #------------------------------------------------------------------------------
- # ● 设定段
- #------------------------------------------------------------------------------
- module FFAni # Full_Flip_Animation
- # 水平翻转编号偏移量
- # 若设定为100,则101号动画为1号动画的水平翻转(数据库中可以为空)
- HF_ID = 100
- # 垂直翻转编号偏移量(※请确保这个数字比上面一个数字大!※)
- # 若设定为200,则201号动画为1号动画的垂直翻转(数据库中可以为空)
- VF_ID = 200
- # 特殊动画识别正则表达式
- NF_Flag = /\[nf\]\z/ # 不翻转
- HF_Flag = /\[hf\]\z/ # 水平翻转
- VF_Flag = /\[vf\]\z/ # 垂直翻转
- end
- " ┏━━━━━━━━━━━━━━━━━┓ "
- " ┃※以下内容无一定脚本基础请勿修改※┃ "
- " ┗━━━━━━━━━━━━━━━━━┛ "
- #==============================================================================
- # ■ RPG::Sprite
- #------------------------------------------------------------------------------
- # 追加了 RPGXP 使用的各种效果处理的精灵的类。
- #==============================================================================
- module RPG
- class Sprite < ::Sprite
- #------------------------------------------------------------------------
- # ● 播放动画
- #------------------------------------------------------------------------
- def animation(animation, hit)
- dispose_animation
- @_animation = animation
- #---------------------------------------------------
- # 根据动画ID判断翻转情况
- #---------------------------------------------------
- if@_animation.id > FFAni::VF_ID # 垂直
- full_flip = 2
- fixed_animation_id = @_animation.id - FFAni::VF_ID
- elsif@_animation.id > FFAni::HF_ID# 水平
- full_flip = 1
- fixed_animation_id = @_animation.id - FFAni::HF_ID
- end
- #---------------------------------------------------
- # 根据动画名判断翻转情况
- #---------------------------------------------------
- if(FFAni::NF_Flag =~ @_animation.name) # 不翻转
- full_flip = 0
- elsif(FFAni::HF_Flag =~ @_animation.name)# 水平
- full_flip = 1
- elsif(FFAni::VF_Flag =~ @_animation.name)# 垂直
- full_flip = 2
- end
- #---------------------------------------------------
- # 修正参数
- # @_full_flip
- # 0 : 不翻转
- # 1 : 水平翻转
- # 2 : 垂直翻转
- #---------------------------------------------------
- if full_flip == nil
- @_full_flip = 0
- else
- @_full_flip = full_flip
- end
- unless fixed_animation_id == nil
- @_animation = $data_animations[fixed_animation_id]
- end
- #---------------------------------------------------
- returnif@_animation == nil
- @_animation_hit = hit
- @_animation_duration = @_animation.frame_max
- animation_name = @_animation.animation_name
- animation_hue = @_animation.animation_hue
- bitmap = RPG::Cache.animation(animation_name, animation_hue)
- if @@_reference_count.include?(bitmap)
- @@_reference_count[bitmap] += 1
- else
- @@_reference_count[bitmap] = 1
- end
- @_animation_sprites = []
- if@_animation.position != 3ornot @@_animations.include?(animation)
- for i in0..15
- sprite = ::Sprite.new(self.viewport)
- sprite.bitmap = bitmap
- sprite.visible = false
- @_animation_sprites.push(sprite)
- end
- unless @@_animations.include?(animation)
- @@_animations.push(animation)
- end
- end
- update_animation
- end
- #------------------------------------------------------------------------
- # ● 播放循环动画
- #------------------------------------------------------------------------
- def loop_animation(animation)
- returnif animation == @_loop_animation
- dispose_loop_animation
- @_loop_animation = animation
- returnif@_loop_animation == nil
- @_loop_animation_index = 0
- animation_name = @_loop_animation.animation_name
- animation_hue = @_loop_animation.animation_hue
- bitmap = RPG::Cache.animation(animation_name, animation_hue)
- if @@_reference_count.include?(bitmap)
- @@_reference_count[bitmap] += 1
- else
- @@_reference_count[bitmap] = 1
- end
- @_loop_animation_sprites = []
- for i in0..15
- sprite = ::Sprite.new(self.viewport)
- sprite.bitmap = bitmap
- sprite.visible = false
- @_loop_animation_sprites.push(sprite)
- end
- update_loop_animation
- end
- #------------------------------------------------------------------------
- # ● 设定动画Sprites
- #------------------------------------------------------------------------
- def animation_set_sprites(sprites, cell_data, position)
- for i in0..15
- sprite = sprites[i]
- pattern = cell_data[i, 0]
- if sprite == nilor pattern == nilor pattern == -1
- sprite.visible = falseif sprite != nil
- next
- end
- sprite.visible = true
- sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
- if position == 3
- ifself.viewport != nil
- sprite.x = self.viewport.rect.width / 2
- sprite.y = self.viewport.rect.height - 160
- else
- sprite.x = 320
- sprite.y = 240
- end
- else
- sprite.x = self.x - self.ox + self.src_rect.width / 2
- sprite.y = self.y - self.oy + self.src_rect.height / 2
- sprite.y -= self.src_rect.height / 4if position == 0
- sprite.y += self.src_rect.height / 4if position == 2
- end
- #---------------------------------------------------
- # 脚本本体
- #---------------------------------------------------
- case@_full_flip
- when0 # 啥也不做
- sprite.x += cell_data[i, 1]
- sprite.y += cell_data[i, 2]
- sprite.angle = cell_data[i, 4]
- sprite.mirror = (cell_data[i, 5] == 1)
- when1 # 水平翻转
- sprite.x -= cell_data[i, 1]
- sprite.y += cell_data[i, 2]
- sprite.angle = 360 - cell_data[i, 4]
- sprite.mirror = (cell_data[i, 5] == 0)
- when2 # 垂直翻转
- sprite.x += cell_data[i, 1]
- sprite.y -= cell_data[i, 2]
- temp_angel = cell_data[i, 4] + 180
- sprite.angle = temp_angel > 360 ? temp_angel - 360 : temp_angel
- sprite.mirror = (cell_data[i, 5] == 0)
- end
- #---------------------------------------------------
- sprite.z = 2000
- sprite.ox = 96
- sprite.oy = 96
- sprite.zoom_x = cell_data[i, 3] / 100.0
- sprite.zoom_y = cell_data[i, 3] / 100.0
- sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
- sprite.blend_type = cell_data[i, 7]
- end
- end
- end
- end
复制代码
这没啥好截图的 = = b 用法很简单,范例不提供了。
本帖来自P1论坛作者各种压力的猫君,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=226947 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |
|