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

Project1

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

[已经解决] 事件与事件接触的问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
70
在线时间
87 小时
注册时间
2005-12-9
帖子
25
跳转到指定楼层
1
发表于 2009-8-24 20:37:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 worseworst 于 2009-8-25 09:29 编辑

我想做出这样的效果:
条件分歧:事件1与事件2接触
………………
分歧结束

由于这个分歧需要在不同的事件里用很多次,我不想用“事件坐标代入变量”的方法,觉得很麻烦,于是仿照默认的脚本创建了一个新的函数

这是在game_event 里的:
  1. def check_event_trigger_touch(x, y)
  2.     # 事件执行中的情况下
  3.     if $game_system.map_interpreter.running?
  4.       return
  5.     end
  6.     # 目标为 [与事件接触] 以及和主角坐标一致的情况下
  7.     if @trigger == 2 and x == $game_player.x and y == $game_player.y
  8.       # 除跳跃中以外的情况、启动判定就是正面的事件
  9.       if not jumping? and not over_trigger?
  10.         start
  11.       end
  12.     end
  13.   end
复制代码
这是我自己定义的函数:
  1. class Game_Event < Game_Character
  2. def a(event_id1,event_id2)
  3.     # 事件执行中的情况下
  4.     if $game_system.map_interpreter.running?
  5.       return
  6.     end
  7.     # 目标为 [与事件接触] 以及和主角坐标一致的情况下
  8.     if $game_map.events[event_id1].x == $game_map.events[event_id2].x and $game_map.events[event_id1].y == $game_map.events[event_id2].y
  9.       # 除跳跃中以外的情况、启动判定就是正面的事件
  10.       if not jumping? and not over_trigger?
  11.         return 1
  12.       end
  13.     else
  14.       return 2
  15.     end
  16.   end
  17. end
复制代码
然后我在事件里这样设置:

执行的时候说我有语法错误。请问错误出在哪里呢?或者有什么更好的方法达到目的呢?谢谢
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-6
帖子
217
2
发表于 2009-8-24 23:36:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
87 小时
注册时间
2005-12-9
帖子
25
3
 楼主| 发表于 2009-8-25 00:57:39 | 只看该作者
唉,我是脚本盲……话说回来真是谢谢楼上拉,现在没有语法错误了。
那说说新的问题,在“事件开始条件”那里有个“与事件接触”,就是对方跑过来接近角色也能引发事件。我就想能不能用条件分歧,如果事件1(我把它的移动规则改为接近事件2了)跑到事件2(不移动的)那里,就执行下面的内容。但是如果按照上面的脚本,事件1就只会跑到事件2旁边,而不会执行条件分歧下面的内容,就是说定义的新函数的值取不到1,也就是说
“if $game_map.events[event_id1].x == $game_map.events[event_id2].x and $game_map.events[event_id1].y == $game_map.events[event_id2].y”这个条件不能达到,可是默认的脚本里面是“if @trigger == 2 and x == $game_player.x and y == $game_player.y”,形式应该差不多的(应该跟那个trigger没有关系的),却没有达到想要的效果。
请问还需要在新脚本里加些什么内容呢?
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-6
帖子
217
4
发表于 2009-8-25 06:47:48 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
87 小时
注册时间
2005-12-9
帖子
25
5
 楼主| 发表于 2009-8-25 08:13:06 | 只看该作者
本帖最后由 worseworst 于 2009-8-25 09:27 编辑

恩,问题解决了,太感谢拉
不过if那里要加上括号,应该是
if (($game_map.events[event_id1].x == x1) or
       ($game_map.events[event_id1].x == x2)) and
       (($game_map.events[event_id1].y == y1) or
       ($game_map.events[event_id1].y == y2))

让我再问一个问题
系统默认的脚本没有这样写,是不是因为在game_character 3 里面类似有下面红色的句子?
#--------------------------------------------------------------------------
  # ● 向下移动
  #     turn_enabled : 本场地位置更改许可标志
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    # 面向下
    if turn_enabled
      turn_down
    end
    # 可以通行的场合
    if passable?(@x, @y, 2)
      # 面向下
      turn_down
      # 更新坐标
      @y += 1
      # 增加步数
      increase_steps
    # 不能通行的情况下
    else
      # 接触事件的启动判定
      check_event_trigger_touch(@x, @y+1)
    end
  end




----------------------------------------------------------
我这几天不在家,还是先结贴好了,谢谢楼上热情的回答~~~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-6
帖子
217
6
发表于 2009-8-25 13:18:03 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
87 小时
注册时间
2005-12-9
帖子
25
7
 楼主| 发表于 2009-8-26 10:22:30 | 只看该作者
恩恩,谢拉,不过我在使用的时候发现问题了,事件1在事件2的右下方也能执行分歧内容,于是我就改了一下,改成:
  1. # 求得事件1与事件2之间坐标的差
  2.     sx = $game_map.events[event_id1].x - $game_map.events[event_id2].x
  3.     sy = $game_map.events[event_id1].y - $game_map.events[event_id2].y
  4.     # 求得差的绝对值
  5.     abs_sx = sx > 0 ? sx : -sx
  6.     abs_sy = sy > 0 ? sy : -sy
  7.     # 当事件1在事件2旁边时,即:
  8.     #   1
  9.     #  121
  10.     #   1
  11.     if abs_sx + abs_sy == 1
  12.         return 1
复制代码
这样好像更简单。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-6 17:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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