Project1

标题: 怎么样判断角色面前的地形标志 [打印本页]

作者: 知世之眼    时间: 2009-4-28 06:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: tommay    时间: 2009-4-28 06:08
好奇下LZ想要做成什么效果?还有,打算怎么调用?
作者: 知世之眼    时间: 2009-4-28 06:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 亿万星辰    时间: 2009-4-28 06:12
这问题好像在哪里看到过来的……似乎是QQ群里来着……

如果说,你知道通过脚本来获取当前角色脚下的地形标记的话,那么你自然就会判断角色面前的那格的了。

所以,我来告诉你如何自己从已知的线索中查找答案。

通过对“Interpreter 4”中查找“地形标记”得到一个结果,可以看到,事件操作中的获取地形标记是通过这样的方法获得的:
character.terrain_tag

那么character是什么?
character = get_character(@parameters[4])

接着来,get_character又是做什么的?
全局搜索“get_character”,在Interpreter 2中找到定义部分,原来是获取一个事件对象的。

那character.terrain_tag中的terrain_tag又是什么样的?
全局搜索“def terrain_tag”,找到两处,显然,Game_Character 1 中的是我们需要的。
return $game_map.terrain_tag(@x, @y)
原来最终还是调用了Game_Map中的terrain_tag方法。

至此根据以上的过程,可以证明:
$game_map.terrain_tag(x, y)
获取的是坐标(x, y)处的地形标记。 [LINE]1,#dddddd[/LINE]系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
作者: 知世之眼    时间: 2009-4-28 06:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: 亿万星辰    时间: 2009-4-28 06:22
排排坐吃果果,挨着一个个来就是了
作者: 知世之眼    时间: 2009-4-28 06:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: 紫苏    时间: 2009-4-28 06:31
以下引用知世之眼于2009-4-27 22:29:40的发言:

那样的话不是要在并行事件里写上很多个判断?没有更方便的方式吗(地图很大)?
如果我设定X=角色当前X坐标 Y=角色当前Y坐标 然后判断角色面前地形标志可行吗?

判断角色的四种朝向,比如向南时:
$game_map.terrain_tag(x, y + 1)
向东时:
$game_map.terrain_tag(x + 1, y)
依此类推~
作者: 亿万星辰    时间: 2009-4-28 06:36
一次可以下若干个鱼钩么??
作者: 知世之眼    时间: 2009-4-28 06:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: tommay    时间: 2009-4-28 06:51
这种不可以用for吗?阵列嘛
作者: 知世之眼    时间: 2009-4-28 06:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: 亿万星辰    时间: 2009-4-28 07:00
其实我不太明白你到底要地形标记判断什么,是判断是否为水,还是要判断是否有鱼,不过事实上,你只需要判断钓鱼时下钩的那一个点即可。
作者: 知世之眼    时间: 2009-4-28 07:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: 668RPG    时间: 2009-4-28 07:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: tommay    时间: 2009-4-28 07:23
LS,咳咳,应该不是LZ要的效果~
我也觉得太简单了
作者: 知世之眼    时间: 2009-4-28 07:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: 668RPG    时间: 2009-4-28 07:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: 亿万星辰    时间: 2009-4-28 15:09
判断是否为水的话,比如说角色对着某处按下C键后只对角色面对的那1点进行地形标记的判断即可。
作者: TERENCE    时间: 2009-4-28 17:17
##############################################
首先先必须知道些东西......

$game_player.x 角色当下 de X座標
$game_player.y 角色当下 de Y座標

$game_player.direction 指的是角色当下面向的方位

789
4X6 ← 面向方位的值
123

$game_map.terrain_tag(x, y) 地形标志的值

##############################################
这里给个大概的思路(并非完整版),LZ可以从这里思考:

X = $game_player.x
Y = $game_player.y

if $game_player.direction == 8
  return $game_map.terrain_tag(X, Y-1)
end

if $game_player.direction == 4
  return $game_map.terrain_tag(X-1, Y)
end

if $game_player.direction == 6
  return $game_map.terrain_tag(X+1, Y)
end

if $game_player.direction == 2
  return $game_map.terrain_tag(X, Y+1)
end
作者: 亿万星辰    时间: 2009-4-28 18:47
  1.   def face_terrain
  2.     return $game_map.terrain_tag($game_player.x + ((10 - $game_player.direction) % 6 - 2) / 2, ((5 - $game_player.direction) - ((5 - $game_player.direction) / (5 - $game_player.direction).abs) * 1) / 2 + $game_player.y)
  3.   end
复制代码

找了好久才找到以前写的一个方法……
用于替代楼上的那个分歧判断。
作者: tommay    时间: 2009-4-28 19:01
亿万前辈好,其实从数学角度小弟觉得这种是纯粹的数学游戏,其实完全没有必要,而且根本看不懂。这仅仅是从数学角度,不知道程序上是不是这种方法比:
case $game_player.direction
    when 2
    when 4
    when 6
    when 8
end
有更加高的效率呢?

以上拙见,前辈见笑了
作者: 亿万星辰    时间: 2009-4-28 19:35
还是case的效率高一些,那串算式里的括号用的太多,会导致效率下降
作者: TERENCE    时间: 2009-4-29 04:50
嗯嗯~~能用case当然更好,本人只是提供思路而已

利用纯事件 跟 这些脚本语句 的组合 也能做出LZ想要的效果




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