Project1

标题: 如何简单实现角色拖影效果? [打印本页]

作者: 某死灵法师    时间: 2014-1-21 23:13
标题: 如何简单实现角色拖影效果?
游戏里有一个按住ctrl大幅加速的效果,想在加速的时候给角色套上一个拖影
不需要现成脚本实例,提供方案就好
作者: yagami    时间: 2014-1-21 23:27
用个数组spritearr 和一个开关 boola
update里
boola = inputkey(ctrl)?true:false
if !spritearr .empty?
遍历数组里的元素 将里面的精灵opacity减少 如果opacity<0 将精灵移出数组
end

按下移动后 角色会做个move的函数
在move执行之前 如果开关是开着的 生成个精灵(对应行走图方向) 精灵坐标=角色坐标 加入到数组里
作者: 某死灵法师    时间: 2014-1-22 02:56
yagami 发表于 2014-1-21 23:27
用个数组spritearr 和一个开关 boola
update里
boola = inputkey(ctrl)?true:false

角色move动作相关脚本在哪里
作者: 芯☆淡茹水    时间: 2014-1-22 09:58
可以多添加 2 个 主角行走图的 Sprite,然后更改这两个 Sprite 的色调和透明度(变黑,逐渐变淡),然后其原点稍微靠后,可见关闭。

在地图场景判断:if Input.dir4 and Input.press?(CTRL)   可见打开。
作者: yagami    时间: 2014-1-22 13:38
http://rpg.blue/thread-347056-1-1.html  我将这效果实现了下 至于CTRL加速功能 请自行添加
作者: heiwang1997    时间: 2014-1-23 21:50
  1. module BFS_Shadow
  2.   attr_accessor :_shadow
  3.   def shadow_on
  4.     @_shadow = true
  5.   end
  6.   def shadow_off
  7.     @_shadow = false
  8.   end
  9. end
  10. class Spriteset_Map
  11.   alias cy_ini initialize
  12.   def initialize
  13.     [url=home.php?mod=space&uid=134219]@Time[/url] = 0
  14.     @canying = []
  15.     cy_ini
  16.   end
  17.   alias cy_update update
  18.   def update
  19.     cy_update
  20.     if @time == 2
  21.       @time = 0
  22.     else
  23.       @time += 1
  24.     end
  25.     for i in @character_sprites
  26.       if i.character._shadow and i.character.moving? and @time == 1
  27.         sprite = Sprite_Canying.new(@viewport1, i.character)
  28.         sprite.z = i.z
  29.         @canying.push sprite
  30.       end
  31.     end
  32.     @canying.each{|s|s.opacity <= 0 ? (s.visible = false ; @canying.delete(s)) : (s.opacity -= 15 ; s.update)} if @canying != []
  33.   end
  34. end
  35. class Game_Player
  36.   include BFS_Shadow
  37. end
  38. class Game_Event
  39.   include BFS_Shadow
  40. end
  41. class Sprite_Canying < Sprite_Character
  42.   def initialize(viewport, character = nil)
  43.     @shadow_x = character.real_x
  44.     @shadow_y = character.real_y
  45.     @shadow_jump_peak = character.jump_peak
  46.     @shadow_jump_count = character.jump_count
  47.     @first_create = true
  48.     super(viewport, character)
  49.   end
  50.   def update
  51.     if @first_create
  52.       super
  53.       @first_create = false
  54.     else
  55.       self.x = get_screen_x
  56.       self.y = get_screen_y
  57.     end
  58.   end
  59.   def get_screen_x
  60.     return (@shadow_x - $game_map.display_x + 3) / 4 + 16
  61.   end
  62.   def get_screen_y
  63.     y = (@shadow_y - $game_map.display_y + 3) / 4 + 32
  64.     if @shadow_jump_count >= @shadow_jump_peak
  65.       n = @shadow_jump_count - @shadow_jump_peak
  66.     else
  67.       n = @shadow_jump_peak - @shadow_jump_count
  68.     end
  69.     return y - (@shadow_jump_peak * @shadow_jump_peak - n * n) / 2
  70.   end
  71. end
  72. class Game_Character
  73.   attr_accessor :jump_peak
  74.   attr_accessor :jump_count
  75. end
复制代码
这个支持地图滚动时的残影,使用时对$game_player实例使用shadow_on方法即可(关闭用shadow_off)




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1