赞 | 3 |
VIP | 333 |
好人卡 | 2 |
积分 | 1 |
经验 | 1450446 |
最后登录 | 2019-5-29 |
在线时间 | 615 小时 |
Lv1.梦旅人 66RPG站长
- 梦石
- 0
- 星屑
- 54
- 在线时间
- 615 小时
- 注册时间
- 2005-10-10
- 帖子
- 5734
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
……貌似是我研究的第三种16×16的方法了。不过这个还有更多的挖掘潜力。
简单说,其实只要把每次走1格改为走0.5格就行了:
#--------------------------------------------------------------------------
# ● 向下移动
# turn_enabled : 本场地位置更改许可标志
#--------------------------------------------------------------------------
def move_down(turn_enabled = true)
# 面向下
if turn_enabled
turn_down
end
# 可以通行的场合
if passable?( @x, @y, 2)
# 面向下
turn_down
# 更新坐标
if self.is_a?(Game_Player)
@y += 0.5
else
@y += 1
end
# 增加步数
increase_steps
# 不能通行的情况下
else
# 接触事件的启动判定
check_event_trigger_touch( @x, @y+1)
end
end
这里用一个条件分歧来判断角色和NPC,当然也可以不做判断。
但是这样处理后有两个问题:
1、通行,对0.5格的判断会出错
2、事件触发,不容易对准。其实和通行是一个问题
3、角色站的位置不好。
关于2的解决方法和1完全一样,这里仅仅看看1的解决:
在def passable?里面,把原来的new_x,new_y修改为:
if d == 6 and (x - x.to_i >= 0.5)
new_x = x + 1
elsif d == 4 and (x - x.to_i <= 0.4)
new_x = x - 1
else
new_x = x
end
if d == 2 and (y - y.to_i >= 0.5)
new_y = y + 1
elsif d == 8 and (y - y.to_i <= 0.4)
new_y = y - 1
else
new_y = y
end
new_x = new_x.to_i
new_y = new_y.to_i
这样就可以判断是在原来的32×32格中走,还是该做行走的passable判定(0.5是判定;0.4那个是为了如果你打算切得更细,比如每一步走0.3步用)。
根据默认的passable,当在“主角所处格”移动时,一律return false,这里修改为:
# 主角的坐标与移动目标坐标一致的情况下
if $game_player.x == new_x and $game_player.y == new_y and !self.is_a?(Game_Player)
# 穿透为 ON
unless $game_player.through
# 自己的图形是角色的情况下
if @character_name != ""
# 不能通行
return false
end
end
end
就可以了。
关于3、角色站位不好的问题,在以前的综合系统里面都没解决过,现在看,其实只要在Spriteset_Character里面进行修改:
self.ox = @cw / 2 + 8
self.oy = @ch + 12
这个+8和+12就是调整位置了……
这样就行了……手感大增……
经过测试:BUG无数 - -b
原因:默认图块的优先级错误。
所以又是一个只能用于双远景图或者类似方法制作的游戏中的东西……仅供开阔思路好了。
[本贴由 叶舞枫 于 2007-4-28 12:58:30 进行了编辑] |
|