赞 | 5 |
VIP | 620 |
好人卡 | 38 |
积分 | 69 |
经验 | 125468 |
最后登录 | 2015-7-27 |
在线时间 | 1666 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 6865
- 在线时间
- 1666 小时
- 注册时间
- 2008-10-29
- 帖子
- 6710
|
本帖最后由 后知后觉 于 2009-11-7 23:14 编辑
这一段是事件的Z算法.事件在地图上会被遮挡物遮挡
那么只需要把动画和事件的Z弄清楚就可以.- #--------------------------------------------------------------------------
- # ● 获取画面 Z 坐标
- # height : 角色的高度
- #--------------------------------------------------------------------------
- def screen_z(height = 0)
- # 在最前显示的标志为 ON 的情况下
- if @always_on_top
- # 无条件设置为 999
- return 999
- end
- # 通过实际坐标和地图的显示位置来求得画面坐标
- z = (@real_y - $game_map.display_y + 3) / 4 + 32
- # 元件的情况下
- if @tile_id > 0
- # 元件的优先不足 * 32
- return z + $game_map.priorities[@tile_id] * 32
- # 角色的场合
- else
- # 如果高度超过 32 就判定为满足 31
- return z + ((height > 32) ? 31 : 0)
- end
- end
复制代码 要改动画的Z有2种情况
一种是把动画本体的sprite的Z改成和其本体的sprite的Y一样
这样改的话感觉上更真实.但是也的确存在一些问题
就看你的动画是什么样的动画了
一种是把动画本体sprite的Z改成和调用该动画的sprite的Z一样
这样改的话.动画sprite就会压在调用者的上面.但是和图块的遮挡关系和其相同
看加色的部分
module RPG
class Sprite < ::Sprite
def animation_set_sprites(sprites, cell_data, position)
for i in 0..15
sprite = sprites[ i ]
pattern = cell_data[i, 0]
if sprite == nil or pattern == nil or pattern == -1
sprite.visible = false if sprite != nil
next
end
sprite.visible = true
sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
if position == 3
if self.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 / 4 if position == 0
sprite.y += self.src_rect.height / 4 if position == 2
end
sprite.x += cell_data[i, 1]
sprite.y += cell_data[i, 2]
sprite.z = sprite.y # 和动画本体的Y挂钩
#sprite.z = self.z # 和调用者的Z一样
# # 如果位置是画面就和默认一样2000
sprite.z = 2000 if position == 3
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.angle = cell_data[i, 4]
sprite.mirror = (cell_data[i, 5] == 1)
sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
sprite.blend_type = cell_data[i, 7]
end
end
end
end
.
那个position就是在数据库设置的 上.中.下.画面.的位置.
可以case一下这样效果会好得多 |
|