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

Project1

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

NPC的大問題

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

Lv1.梦旅人 (禁止发言)

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

Lv1.梦旅人

ACG宅

梦石
0
星屑
72
在线时间
413 小时
注册时间
2008-10-1
帖子
5595

开拓者贵宾

2
发表于 2009-5-25 16:57:35 | 只看该作者
事件中设置无视障碍物,好象是这个意思.在事件的左下角.至于不穿过主角好象也是在事件中设置
此号诞生于公元2008年10月1日。
此号消失于公元2012年10月1日。
4年的经历,4年的守望。现在只剩下66RPG的名字和当年的“梦想世界,在你手中。”这一句话。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
1 小时
注册时间
2007-3-4
帖子
98
3
发表于 2009-5-25 18:31:21 | 只看该作者
MS不能吧。能穿墙就能穿主角。。忽略不能移动的场所MS只是当遇到障碍物时移动不能时不会卡住。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-5-27 18:05:20 | 只看该作者
给 Game_Character 添加一个标识 @through_tiles ,专门用来判断是否需要只穿透图块但不穿透主角~然后在 passable? 中判断,如果 @through_tiles 为 true 且新坐标不等于主角的坐标,那就 return true,告诉调用者目的图块可以通行:
class Game_Character
  #--------------------------------------------------------------------------
  # ● 可以通行判定
  #     x : X 坐标
  #     y : Y 坐标
  #     d : 方向 (0,2,4,6,8)  ※ 0 = 全方向不能通行的情况判定 (跳跃用)
  #--------------------------------------------------------------------------
  def passable?(x, y, d)
    # 求得新的坐标
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    # 坐标在地图以外的情况
    unless $game_map.valid?(new_x, new_y)
      # 不能通行
      return false
    end
    if @through_tiles && ($game_player.x != new_x || $game_player.y != new_y)
      return true
    end

    # 穿透是 ON 的情况下
    if @through
      # 可以通行
      return true
    end
    # 移动者的元件无法来到指定方向的情况下
    unless $game_map.passable?(x, y, d, self)
      # 通行不可
      return false
    end
    # 从指定方向不能进入到移动处的元件的情况下
    unless $game_map.passable?(new_x, new_y, 10 - d)
      # 不能通行
      return false
    end
    # 循环全部事件
    for event in $game_map.events.values
      # 事件坐标于移动目标坐标一致的情况下
      if event.x == new_x and event.y == new_y
        # 穿透为 ON
        unless event.through
          # 自己就是事件的情况下
          if self != $game_player
            # 不能通行
            return false
          end
          # 自己是主角、对方的图形是角色的情况下
          if event.character_name != ""
            # 不能通行
            return false
          end
        end
      end
    end
    # 主角的坐标与移动目标坐标一致的情况下
    if $game_player.x == new_x and $game_player.y == new_y
      # 穿透为 ON
      unless $game_player.through
        # 自己的图形是角色的情况下
        if @character_name != ""
          # 不能通行
          return false
        end
      end
    end
    # 可以通行
    return true
  end

  attr_accessor :through_tiles

end
用的时候原来的穿透属性就不要勾上了,否则还是原来的效果~在事件脚本中写上
$game_map.events[1].through_tiles = true
,就是打开 1 号事件的穿透图块属性,用
$game_map.events[1].through_tiles = false
true
来关闭这个属性
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-14 02:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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