赞 | 16 |
VIP | 0 |
好人卡 | 0 |
积分 | 99 |
经验 | 5631 |
最后登录 | 2024-9-17 |
在线时间 | 2485 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 9949
- 在线时间
- 2485 小时
- 注册时间
- 2016-10-2
- 帖子
- 31
|
可以針對RPG::Sprite自行添加抖動的效果
參考animation_process_timing的寫法
假設在指定動畫幀使用了某se音效,名稱為shake
那麼程式上寫成 如果音效名稱等於shake,就去執行抖動效果
抖動時間長度等於關鍵幀的長度、抖動強度等於R、抖動速度等於G、偏移量等於B、型態等於alpha
↓寫在animation_process_timing內或自行定義都可以
- if timing.se.name == "System_Shake"
- if hit
- c = timing.flash_color
- self.shake(timing.flash_duration, c.red, c.green, c.blue , c.alpha)
- end
- end
复制代码
↓這段寫在class內的哪裡都可以
- def shake(timing, power, speed, shift, type)
- @_shake_duration = timing
- @shake_count = timing
- @shake_power = 2 * power
- @shake_speed = speed
- @shake_shift_count = shift == 0 ? 6 : shift
- @shake_type = type
- end
复制代码
接著編寫震動的處理,抖動時間大於0時才做(寫在update內)
用三角函數、正弦實作晃動效果,針對角色圖像的ox、oy做移動,如果型態(alpha)等於0做左右抖動、等於1做上下抖動、大於1上下左右都做
- if @shake_count >= 1
- @shake_count -= 1
- width = self.width / 2
- self.ox = @shake_power * Math.sqrt(@shake_count.to_f/@_shake_duration) *
- Math.sin((@_shake_duration-@shake_count) * @shake_speed * Math::PI / @shake_shift_count) +
- width if @shake_type == 0 || @shake_type >= 2
- self.oy = @shake_power * Math.sqrt(@shake_count.to_f/@_shake_duration) *
- Math.sin((@_shake_duration-@shake_count) * @shake_speed * Math::PI / @shake_shift_count) +
- self.src_rect.height if @shake_type == 1 || @shake_type >= 2
- end
复制代码
由於RTAB腳本龐大,每個人的都不盡相同,在此不提供整套方案,所以請自行添加進自己的專案內吧 |
|