Project1

标题: 如何判定某處是遮蔽的?(就是地圖元件打五角星的地方) [打印本页]

作者: machinemxy    时间: 2011-11-6 19:57
标题: 如何判定某處是遮蔽的?(就是地圖元件打五角星的地方)
RT,想設置主角躲在牆壁后或者樹蔭下就可以避開敵人的視線。但是不知道如何判定啊。判定是否可通行的代碼是$game_player.passable?(x,y),那麼有沒有判定該處是否是遮蔽的代碼呢?dsu_plus_rewardpost_czw
作者: MSQ    时间: 2011-11-6 20:02
本帖最后由 MSQ 于 2011-11-6 20:04 编辑

貌似有点难~~事件可以吗?

1,可以用公共事件来做,当进入某地图时自动打开,用条件分歧判断,当主角与该坐标重合时,可以用开关,变量等控制敌人的事件。
2,普通事件,铺上透明事件,当该事件与主角接触时,判断。从而做到如上的效果。
作者: machinemxy    时间: 2011-11-6 20:14
MSQ 发表于 2011-11-6 20:02
貌似有点难~~事件可以吗?

1,可以用公共事件来做,当进入某地图时自动打开,用条件分歧判断,当主角与该 ...

這樣做是可以啦,只是略麻煩了點。如果有一句代碼的話,那麼就會方便很多呢……
作者: MSQ    时间: 2011-11-6 20:19
machinemxy 发表于 2011-11-6 20:14
這樣做是可以啦,只是略麻煩了點。如果有一句代碼的話,那麼就會方便很多呢…… ...

嗯~~本人只是一个新人~~只明白一些简单的事件~~脚本只会改坐标~~~囧

不过VX区强人很多,多能一会儿吧~~

VX区的强人来6R的时间都很诡异~~=W=(大雾)
作者: machinemxy    时间: 2011-11-6 21:08
MSQ 发表于 2011-11-6 20:19
嗯~~本人只是一个新人~~只明白一些简单的事件~~脚本只会改坐标~~~囧

不过VX区强人很多,多能一会儿吧~~

誒,我也是新人呢~以前都純事件的,現在剛開始研究編腳本。
作者: DeathKing    时间: 2011-11-7 00:20
本帖最后由 DeathKing 于 2011-11-7 14:05 编辑

参见VX指导手册:RPG Maker VX -> 地图 -> 通行设定
在B~E组的元件中会有另外一个星号标记 ☆ ,代表该元件的优先级在主角之上。


写代码很快,但是发现了一个BUG:VX的地图绘制是互斥的,B层绘制后再绘制C层,则C层会覆盖B层,因此,不可能检查A、B、C层的通行设定。考虑到楼主的需求,给出的代码只检查了B层的对应区域是否为 [☆] 。楼住可以参考Game_Map#passable?方法来修改此方法。

使用方法:$game_map.mask?(x,y) 检查当前地图x,y坐标处的B层图块是否设置为[☆]。
  1. class Game_Map
  2.   #--------------------------------------------------------------------------
  3.   # ● 判断是否为五角星
  4.   #     x    : X 坐标
  5.   #     y    : Y 坐标
  6.   #--------------------------------------------------------------------------
  7.   def mask?(x, y)
  8.     # 考虑到只检查主角是否躲在树下,因此只检查B层
  9.     tile_id = @map.data[x, y, 1]          # 获取元件 ID
  10.     return false if tile_id == nil        # 获取元件 ID 失败 : 不可以通行
  11.     pass = @passages[tile_id]             # 获取通行属性
  12.     return true if pass & 0x10 == 0x10    # [☆] : 不受通行影响
  13.     return false                          # 不可以通行
  14.   end
  15. end
复制代码

作者: machinemxy    时间: 2011-11-7 16:34
DeathKing 发表于 2011-11-7 00:20
参见VX指导手册:RPG Maker VX -> 地图 -> 通行设定

這個……我使用了,感覺沒用啊。然後測試了一下,好像無論如何,他的值都是TRUE。請問會是哪裡出問題了么?
作者: DeathKing    时间: 2011-11-7 23:01
machinemxy 发表于 2011-11-7 16:34
這個……我使用了,感覺沒用啊。然後測試了一下,好像無論如何,他的值都是TRUE。請問會是哪裡出問題了么 ...

经过测试,脚本是没有问题的。

如果在你的工程里不适用,请检查一下B层图块的通行度设定(图以B层的某树为例)


树端(x=10,y=4)为☆,树根(x=11,y=5)为×


坐标可以在工具的状态栏的右边部分获得,而不是所谓的“实际X坐标”和“实际Y坐标”


注意,这个脚本只会检查对应X,Y地区的B图层的图块通行度设定!
作者: machinemxy    时间: 2011-11-8 11:03
DeathKing 发表于 2011-11-7 23:01
经过测试,脚本是没有问题的。

如果在你的工程里不适用,请检查一下B层图块的通行度设定(图以B层的某树 ...

……嗯,謝謝你的熱心解答,我回去再測試看看
作者: DeathKing    时间: 2011-11-8 13:35
machinemxy 发表于 2011-11-8 11:03
……嗯,謝謝你的熱心解答,我回去再測試看看

不,其实你没有错。VX还有一个默认机能,是用B图层的第一个图块(就是打星号那个)填充整个B图层,因此如果不是特殊设置指定区域为X,都可以通行。

因此,如果想要实现你的想法就会变得十分困难。
作者: machinemxy    时间: 2011-11-8 16:44
DeathKing 发表于 2011-11-8 13:35
不,其实你没有错。VX还有一个默认机能,是用B图层的第一个图块(就是打星号那个)填充整个B图层,因此如 ...

……感覺還是有可能的嘛~舉例來說,比如在樹蔭下面可以隱藏,那麼可以判定,如果那個地方的地圖元件代碼是多少多少,則返回true,這樣也行的通吧?
作者: DeathKing    时间: 2011-11-9 12:06
  1. tile_id = @map.data[x, y, 1]          # 获取元件 ID
复制代码





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