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

Project1

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

留下脚印的做法

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-4-6
帖子
39
跳转到指定楼层
1
发表于 2009-4-17 06:21:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-4-17 17:58:26 | 只看该作者
很有意思的功能~其实做这个的思路就是移动时在移动前的坐标处显示脚印的精灵,然后每帧减少每个精灵对象的不透明度,透明度为 0 时释放相关的资源

需要考虑三点:
1、地图图块的遮挡关系
如果只是在屏幕上显示精灵的话和地图图块是毫无遮挡关系的,所以应该把精灵放到显示地图图块的那个 viewport 中
2、脚印要随着画面卷动而移动
如果只是在屏幕上显示精灵的话,精灵的坐标是相对于屏幕的,在地图画面卷动的时候脚印也跟着“漂移”了……所以应该刷新精灵的坐标,使其相对于地图真实坐标~
3、判断角色是否踩在雪地上
这个可以用地形标志解决

不过用了这个之后多少会影响一点帧率,所以如果移动速度调到很高的话,fps 肯定是会降很多的~

脚印的素材用一张 128 * 32 的四帧素材,分别表示四种不同的脚印方向,比如:


顺序和行走图的纵向顺序相同,南、西、东、北

脚本(插入 Main 前):
  1. # 雪地的地形标志
  2. $雪地地形标志 = 6

  3. class Footprint < Sprite
  4.   def initialize(x, y, dir)
  5.     super($footprints_viewport)
  6.     @real_x, @real_y = x << 5, y << 5
  7.     self.bitmap = RPG::Cache.picture("footprint.png")
  8.     #self.src_rect = Rect.new(((dir >> 1) - 1) * 32, 0, 32, 32)
  9.     self.src_rect = Rect.new(dir * 32, 0, 32, 32)
  10.     #self.z = 1
  11.     update_opacity
  12.   end
  13.   def update_opacity
  14.     self.x = @real_x - ($game_map.display_x >> 2)
  15.     self.y = @real_y - ($game_map.display_y >> 2)
  16.     self.opacity -= 1
  17.     if self.opacity == 0
  18.       dispose
  19.       $footprints.delete(self.hash)
  20.     end
  21.   end
  22. end

  23. class Spriteset_Map
  24.   alias :initialize_old :initialize unless method_defined? :initialize_old
  25.   def initialize
  26.     initialize_old
  27.     $footprints_viewport = @viewport1
  28.   end
  29. end

  30. $footprints = {}
  31. class Game_Character
  32.   def move_down(turn_enabled = true)
  33.     # 面向下
  34.     if turn_enabled
  35.       turn_down
  36.     end
  37.     # 可以通行的场合
  38.     if passable?(@x, @y, 2)
  39.       if terrain_tag == $雪地地形标志
  40.         obj = Footprint.new(@x, @y, 0)
  41.         $footprints[obj.hash] = obj
  42.       end
  43.       # 面向下
  44.       turn_down
  45.       # 更新坐标
  46.       @y += 1
  47.       # 增加步数
  48.       increase_steps
  49.     # 不能通行的情况下
  50.     else
  51.       # 接触事件的启动判定
  52.       check_event_trigger_touch(@x, @y+1)
  53.     end
  54.   end

  55.   def move_left(turn_enabled = true)
  56.     # 面向左
  57.     if turn_enabled
  58.       turn_left
  59.     end
  60.     # 可以通行的情况下
  61.     if passable?(@x, @y, 4)
  62.       if terrain_tag == $雪地地形标志
  63.         obj = Footprint.new(@x, @y, 1)
  64.         $footprints[obj.hash] = obj
  65.       end
  66.       # 面向左
  67.       turn_left
  68.       # 更新坐标
  69.       @x -= 1
  70.       # 增加步数
  71.       increase_steps
  72.     # 不能通行的情况下
  73.     else
  74.       # 接触事件的启动判定
  75.       check_event_trigger_touch(@x-1, @y)
  76.     end
  77.   end

  78.   def move_right(turn_enabled = true)
  79.     # 面向右
  80.     if turn_enabled
  81.       turn_right
  82.     end
  83.     # 可以通行的场合
  84.     if passable?(@x, @y, 6)
  85.       if terrain_tag == $雪地地形标志
  86.         obj = Footprint.new(@x, @y, 2)
  87.         $footprints[obj.hash] = obj
  88.       end
  89.       # 面向右
  90.       turn_right
  91.       # 更新坐标
  92.       @x += 1
  93.       # 增加部数
  94.       increase_steps
  95.     # 不能通行的情况下
  96.     else
  97.       # 接触事件的启动判定
  98.       check_event_trigger_touch(@x+1, @y)
  99.     end
  100.   end

  101.   def move_up(turn_enabled = true)
  102.     # 面向上
  103.     if turn_enabled
  104.       turn_up
  105.     end
  106.     # 可以通行的情况下
  107.     if passable?(@x, @y, 8)
  108.       if terrain_tag == $雪地地形标志
  109.         obj = Footprint.new(@x, @y, 3)
  110.         $footprints[obj.hash] = obj
  111.       end
  112.       # 面向上
  113.       turn_up
  114.       # 更新坐标
  115.       @y -= 1
  116.       # 歩数増加
  117.       increase_steps
  118.     # 不能通行的情况下
  119.     else
  120.       # 接触事件的启动判定
  121.       check_event_trigger_touch(@x, @y-1)
  122.     end
  123.   end
  124. end

  125. class Scene_Map
  126.   alias :main_old :main unless method_defined? :main_old
  127.   def main
  128.     main_old
  129.     $footprints.each_key {
  130.       |key|
  131.       $footprints.delete(key).dispose      
  132.     }
  133.   end
  134.   
  135.   alias :update_old :update unless method_defined? :update_old
  136.   def update
  137.     $footprints.each_value {
  138.       |footprint|
  139.       footprint.update_opacity
  140.     }
  141.     update_old
  142.   end
  143. end
复制代码


效果图:

版主对此帖的认可:『如此大赞{/qiang}』,积分『+150』。
系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~

评分

参与人数 2星屑 +2 +1 收起 理由
CCD0645 + 1 图片都挂了,能不能麻烦补一个.
不是马甲 + 2 我要想制作8方的那

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

剑圣

梦石
0
星屑
50
在线时间
122 小时
注册时间
2008-8-31
帖子
778
3
发表于 2009-4-17 18:44:07 | 只看该作者
赞~~
这样不只是雪地脚印,水上飘(?)的波纹,恶魔猎手走过的冒火,边走边掉血都一并解决了~

PC/IOS/Android共享的RM RPG:未名大学
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-4-17 19:11:52 | 只看该作者
嗯,不过恶魔猎手那种就不用判断地形标志了,随时都冒火……
暴雪的游戏有超多这样的效果,火墙、拦截、疾跑时的残影、火箭炮喷的火,还有亡灵和死骑的坐骑踏过地面留下的蹄痕{/se}
山口山中不同的种族职业脚印也不同,比如小德留下的就可以是爪痕、牛头是牛蹄印,这些都可以在上面的基础上扩充,而如果要多种效果同时存在的话,就可以设计不同的 Sprite 派生类(这里只写了一个 Footprint)分别在不同的场合显示不同的效果~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-4-6
帖子
39
5
 楼主| 发表于 2009-4-17 19:42:29 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

6
发表于 2009-4-17 20:18:32 | 只看该作者
代码部分写的相当的不错啊
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
41 小时
注册时间
2008-3-5
帖子
2072
7
发表于 2009-4-17 20:25:08 | 只看该作者
受亿万老师如此夸奖,真是很高的荣誉呢~!恭喜紫苏大啊
你它囧一字母君谁记得……
当时那把剑离我的喉咙只有0.01工分。可是一柱香之后,这个女主人会深深的爱上我,虽然本人平生说了无数的谎话,可是这句最有效:“你应该这么做,我也应该死。
曾经有一取ID的机会放在我面前,我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此。你的剑在我的咽喉上割下去吧!不用再犹豫了!如果上天能够给我一个再来一次的机会,我绝对会取个汉字君。如果非要给这ID加点修饰的话,我希望是……红色加粗……

回复 支持 反对

使用道具 举报

Lv1.梦旅人

穿越一季:朔

梦石
0
星屑
50
在线时间
333 小时
注册时间
2007-4-11
帖子
5369

贵宾

8
发表于 2009-4-17 20:33:01 | 只看该作者
{/fd} 话说我也在研究的说

直接套去学习  谢谢 {/hx}

另外很期待楼上的卡牌系统 {/se}
6R复活?别扯淡了.

柳柳一旦接手66RPG,我果断呵呵啊。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 17:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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