Project1

标题: 角色改为占4格后的碰撞设置 [打印本页]

作者: 猫猫鱼    时间: 2012-1-18 15:56
标题: 角色改为占4格后的碰撞设置
本帖最后由 猫猫鱼 于 2012-1-18 18:25 编辑

这是坦克所占的4格图
实际格子只占了这格,其他的3格都是虚的,因为游戏需要这么大的角色,所以就产生了这问题,怎么把角色所占的格数改为2X2,碰撞什么的都正确不会重叠?
也就是说角色所占的4格都不能穿到墙里。都变为实格。dsu_plus_rewardpost_czw
作者: 511139511    时间: 2012-1-18 18:54
game_character1里
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
改成
new_x = x + (d == 6 ? 2 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -2 : 0)

作者: 猫猫鱼    时间: 2012-1-18 19:08
这样子的话,只判断了走的那方向的格内有无墙,但是如果是往右走,而头上那格是墙的话,头就穿墙了。

作者: 511139511    时间: 2012-1-19 13:24
  1.   def passable?(x, y, d)
  2.     # 求得新的坐标
  3.     new_x = x + (d == 6 ? 2 : d == 4 ? -1 : 0)
  4.     new_y = y + (d == 2 ? 1 : d == 8 ? -2 : 0)
  5.     # 坐标在地图以外的情况
  6.     unless $game_map.valid?(new_x, new_y)
  7.       # 不能通行
  8.       return false
  9.     end
  10.     # 穿透是 ON 的情况下
  11.     if @through
  12.       # 可以通行
  13.       return true
  14.     end
  15.     # 移动者的元件无法来到指定方向的情况下
  16.     unless $game_map.passable?(x, y, d, self)
  17.       # 通行不可
  18.       return false
  19.     end
  20.     # 从指定方向不能进入到移动处的元件的情况下
  21.     if d == 2 or d == 8
  22.       unless $game_map.passable?(new_x, new_y, 10 - d) and $game_map.passable?(new_x + 1, new_y, 10 - d)
  23.        return false
  24.       end
  25.     elsif d ==4 or d == 6
  26.       unless $game_map.passable?(new_x, new_y, 10 - d) and $game_map.passable?(new_x , new_y - 1, 10 - d)
  27.        return false
  28.       end
  29.     end
  30.     # 循环全部事件
  31.    
  32.     for event in $game_map.events.values
  33.       # 事件坐标于移动目标坐标一致的情况下
  34.       if (d == 2 or d == 8)and(event.x == new_x or event.x + 1 == new_x or event.x == new_x + 1) and (event.y == new_y or event.y - 1 == new_y ) or ((d == 4 or d == 6)and(event.x == new_x or event.x + 1 == new_x ) and (event.y == new_y or event.y - 1 == new_y or event.y == new_y - 1))
  35.             # 穿透为 ON
  36.         unless event.through
  37.           # 自己就是事件的情况下
  38.           if self != $game_player
  39.             # 不能通行
  40.             return false
  41.           end
  42.           # 自己是主角、对方的图形是角色的情况下
  43.           if event.character_name != ""
  44.             # 不能通行
  45.             return false
  46.           end
  47.         end
  48.       end
  49.     end
  50.     # 主角的坐标与移动目标坐标一致的情况下
  51.     if (d == 2 or d == 8)and($game_player.x == new_x or $game_player.x + 1 == new_x or $game_player.x == new_x + 1) and ($game_player.y == new_y or $game_player.y - 1 == new_y ) or ((d == 4 or d == 6)and($game_player.x == new_x or $game_player.x + 1 == new_x ) and ($game_player.y == new_y or $game_player.y - 1 == new_y or $game_player.y == new_y - 1))
  52.      # 穿透为 ON
  53.       unless $game_player.through
  54.         # 自己的图形是角色的情况下
  55.         if @character_name != ""
  56.           # 不能通行
  57.           return false
  58.         end
  59.       end
  60.     end
  61.     # 可以通行
  62.     return true
  63.   end
复制代码
替换相同部分就可以




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