查看: 1502|回复: 6

[已经解决] 写了个坐标判断脚本,有问题

[复制链接]
梦石
0
星屑
50
在线时间
127 小时
注册时间
2010-10-17
回帖
5
发表于 2012-11-13 20:16:11 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 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
复制代码
敌人事件
枪 ms.jpg
刀 ml.jpg
mk.jpg
梦石
0
星屑
66
在线时间
91 小时
注册时间
2012-8-15
回帖
43
发表于 2012-11-14 09:06:56 | 显示全部楼层
event.id没有指定事件对象?
aexy(@event.id) 写在事件上,应该可以调用。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
127 小时
注册时间
2010-10-17
回帖
5
 楼主| 发表于 2012-11-14 17:40:34 | 显示全部楼层
虾米£浪子 发表于 2012-11-14 09:06
event.id没有指定事件对象?
aexy(@event.id) 写在事件上,应该可以调用。

我就是这么做的,问题是超过两个敌人就会重定义event.id
——图片应该可以看了..
回复

使用道具 举报

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
回帖
638
发表于 2012-11-14 18:45:47 | 显示全部楼层
lz的原因不知道,不过建议用下面的脚本..若lz需要"枪"的脚本,可再次说明
[pre lang="ruby" line="1"]class Interpreter
  Face_Event = [nil,[0,-1],[1,0],[-1,0],[0,1]]
  def aexy
    return false unless @event_id
    [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]}
  end
end[/pre]
捕获.JPG

评分

参与人数 1梦石 +1 收起 理由
hcm + 1 认可答案

查看全部评分

>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复

使用道具 举报

梦石
0
星屑
50
在线时间
127 小时
注册时间
2010-10-17
回帖
5
 楼主| 发表于 2012-11-14 20:01:18 | 显示全部楼层
沙漠点灰 发表于 2012-11-14 18:45
lz的原因不知道,不过建议用下面的脚本..若lz需要"枪"的脚本,可再次说明
class Interpreter
  Face_Event = ...

非常感谢...那枪脚本要怎么写.? 另外,我又发现事件开始条件为并行处理,那怎么才能设置事件接触,角色被攻击呢?

点评

(续)明天lz系统地说明吧.事件攻击角色和角色攻击事件差不多,lz可以将2个的x,y对调一下就行了  发表于 2012-11-14 23:29
之所以没有写枪,因为考虑得不够全面,比如地面上是栅栏,人不能通过,但是子弹能,地面上是大山,人不能通过,子弹也是。这只能用地形标记  发表于 2012-11-14 23:26
回复

使用道具 举报

梦石
0
星屑
50
在线时间
127 小时
注册时间
2010-10-17
回帖
5
 楼主| 发表于 2012-11-15 19:57:37 | 显示全部楼层
沙漠点灰 发表于 2012-11-14 18:45
lz的原因不知道,不过建议用下面的脚本..若lz需要"枪"的脚本,可再次说明
class Interpreter
  Face_Event = ...

枪能穿透没关系,我只需要一个大概的无bug脚本用来判断坐标
回复

使用道具 举报

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
回帖
638
发表于 2012-11-16 23:21:53 | 显示全部楼层
  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
复制代码
没试过,可能会错
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部