Project1

标题: 写了个坐标判断脚本,有问题 [打印本页]

作者: 666sero    时间: 2012-11-13 20:16
标题: 写了个坐标判断脚本,有问题
本帖最后由 666sero 于 2012-11-14 17:37 编辑

刚学会脚本,就写了一个用来做射击arpg,但是发现一旦超过两个敌人无论坐标都会一起“被攻击”,找到原因是因为都是(@event.id)所以都是本事件的坐标,但一时想不出如何解决。
可能不应该这样写?
  1. def aexy(eid) #用刀时判断
  2. ex = $game_map.events[eid].x
  3. ey = $game_map.events[eid].y
  4. @direction = $game_player.direction
  5. if $game_player.x==ex-1 and ey == $game_player.y
  6.   if @direction == 6
  7.     return $game_switches[2]=true
  8.   end
  9. end
  10. #如果角色在事件左方
  11. if $game_player.y==ey+1 and ex == $game_player.x
  12.   if @direction == 8
  13.     return $game_switches[2]=true
  14.   end
  15. end
  16. #事件下方
  17. if $game_player.y==ey-1 and ex == $game_player.x
  18.   if @direction == 2
  19.     return $game_switches[2]=true
  20.   end
  21. end
  22. #事件上方
  23. if $game_player.x==ex+1 and ey == $game_player.y
  24.   if @direction == 4
  25.     return $game_switches[2]=true
  26.   end
  27. end
  28. end
  29. #------------------------------------------------------
  30. def gunxy(mid) #用枪是
  31.   ex = $game_map.events[mid].x
  32.   ey = $game_map.events[mid].y
  33.   @direction = $game_player.direction
  34. #主处理↓
  35.   if ex > $game_player.x and ey == $game_player.y
  36.     if @direction == 6
  37.     return $game_switches[5]=true
  38.     end
  39.   end

  40.   if ex < $game_player.x and ey == $game_player.y
  41.     if @direction == 4
  42.     return $game_switches[5]=true
  43.     end
  44.   end

  45.   if ey > $game_player.y and ex == $game_player.x
  46.     if @direction == 2
  47.     return $game_switches[5]=true
  48.     end
  49.   end

  50.   if ey < $game_player.y and ex == $game_player.x
  51.     if @direction == 8
  52.     return $game_switches[5]=true
  53.   end
  54. end
  55. end
复制代码
敌人事件
[attach]142087[/attach]枪
dsu_plus_rewardpost_czw

mk.jpg (39.99 KB, 下载次数: 5)

mk.jpg

作者: 虾米£浪子    时间: 2012-11-14 09:06
event.id没有指定事件对象?
aexy(@event.id) 写在事件上,应该可以调用。

作者: 666sero    时间: 2012-11-14 17:40
虾米£浪子 发表于 2012-11-14 09:06
event.id没有指定事件对象?
aexy(@event.id) 写在事件上,应该可以调用。

我就是这么做的,问题是超过两个敌人就会重定义event.id
——图片应该可以看了..
作者: 沙漠点灰    时间: 2012-11-14 18:45
lz的原因不知道,不过建议用下面的脚本..若lz需要"枪"的脚本,可再次说明
RUBY 代码复制
  1. class Interpreter
  2.   Face_Event = [nil,[0,-1],[1,0],[-1,0],[0,1]]
  3.   def aexy
  4.     return false unless @event_id
  5.     [2,4,6,8].any?{|i|$game_player.direction==i and [$game_player.x-$game_map.events[@event_id].x,$game_player.y-$game_map.events[@event_id].y] == Face_Event[i/2]}
  6.   end
  7. end


作者: 666sero    时间: 2012-11-14 20:01
沙漠点灰 发表于 2012-11-14 18:45
lz的原因不知道,不过建议用下面的脚本..若lz需要"枪"的脚本,可再次说明
class Interpreter
  Face_Event = ...

非常感谢...那枪脚本要怎么写.? 另外,我又发现事件开始条件为并行处理,那怎么才能设置事件接触,角色被攻击呢?
作者: 666sero    时间: 2012-11-15 19:57
沙漠点灰 发表于 2012-11-14 18:45
lz的原因不知道,不过建议用下面的脚本..若lz需要"枪"的脚本,可再次说明
class Interpreter
  Face_Event = ...

枪能穿透没关系,我只需要一个大概的无bug脚本用来判断坐标
作者: 沙漠点灰    时间: 2012-11-16 23:21
  1. class Interpreter
  2.   def gunxy
  3.     return false unless @event_id
  4.     [2,4,6,8].any?{|i|$game_player.direction==i and [$game_player.x <=> $game_map.events[@event_id].x,$game_player.y<=>$game_map.events[@event_id].y] == Face_Event[i/2]}
  5.   end
  6. end
复制代码
没试过,可能会错




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