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

Project1

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

[已经解决] 如何简单实现角色拖影效果?

[复制链接]

Lv3.寻梦者

梦石
3
星屑
178
在线时间
161 小时
注册时间
2010-9-30
帖子
114
跳转到指定楼层
1
发表于 2014-1-21 23:13:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
游戏里有一个按住ctrl大幅加速的效果,想在加速的时候给角色套上一个拖影
不需要现成脚本实例,提供方案就好

Lv3.寻梦者

梦石
0
星屑
3570
在线时间
3064 小时
注册时间
2011-11-17
帖子
980
2
发表于 2014-1-21 23:27:29 | 只看该作者
用个数组spritearr 和一个开关 boola
update里
boola = inputkey(ctrl)?true:false
if !spritearr .empty?
遍历数组里的元素 将里面的精灵opacity减少 如果opacity<0 将精灵移出数组
end

按下移动后 角色会做个move的函数
在move执行之前 如果开关是开着的 生成个精灵(对应行走图方向) 精灵坐标=角色坐标 加入到数组里
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
178
在线时间
161 小时
注册时间
2010-9-30
帖子
114
3
 楼主| 发表于 2014-1-22 02:56:45 | 只看该作者
yagami 发表于 2014-1-21 23:27
用个数组spritearr 和一个开关 boola
update里
boola = inputkey(ctrl)?true:false

角色move动作相关脚本在哪里

点评

Game_Character 2  发表于 2014-1-22 11:34
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33125
在线时间
5104 小时
注册时间
2012-11-19
帖子
4878

开拓者

4
发表于 2014-1-22 09:58:03 | 只看该作者
可以多添加 2 个 主角行走图的 Sprite,然后更改这两个 Sprite 的色调和透明度(变黑,逐渐变淡),然后其原点稍微靠后,可见关闭。

在地图场景判断:if Input.dir4 and Input.press?(CTRL)   可见打开。
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3570
在线时间
3064 小时
注册时间
2011-11-17
帖子
980
5
发表于 2014-1-22 13:38:36 | 只看该作者
http://rpg.blue/thread-347056-1-1.html  我将这效果实现了下 至于CTRL加速功能 请自行添加

评分

参与人数 2星屑 +102 收起 理由
myownroc + 90 认可答案
某死灵法师 + 12 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
465 小时
注册时间
2011-4-13
帖子
174
6
发表于 2014-1-23 21:50:59 | 只看该作者
  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)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-30 14:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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