幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2355|回复: 17

[已解决] 有什么简便的写法么?

[复制链接]

40

主题

190

帖子

1635

积分

⑥精研

●~  ●~   ●

积分
1635
发表于 2010-1-12 15:57:53 | 显示全部楼层 |阅读模式
判断:if 1~20号事件在主角的正前方6格范围之内。


正前方就是指X的坐标差为0,或者Y的坐标差为0,


我只会这么写:
  1.           for i in 1..20
  2.             x  = $game_variables[7]
  3.             y  = $game_variables[8]
  4.             x1 = $game_map.events[i].x
  5.             y1 = $game_map.events[i].y
  6.             if $game_player.direction == 2
  7.               if x == x1 and y1 - y >= 0 and y1 - y <= 6
  8.                 $game_self_switches[[$game_map.map_id,i,"E"]] = true
  9.               end
  10.             elsif $game_player.direction == 4
  11.               if y == y1 and x - x1 >= 0 and x - x1 <= 6
  12.                 $game_self_switches[[$game_map.map_id,i,"E"]] = true
  13.               end
  14.             elsif $game_player.direction == 6
  15.               if y == y1 and x1 - x >= 0 and x1 - x <= 6
  16.                 $game_self_switches[[$game_map.map_id,i,"E"]] = true
  17.               end
  18.             elsif $game_player.direction == 8
  19.               if x == x1 and y - y1 >= 0 and y - y1 <= 6
  20.                 $game_self_switches[[$game_map.map_id,i,"E"]] = true
  21.               end
  22.             end
  23.           end
复制代码
回复

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-1-12 20:32:24 | 显示全部楼层
我看明白了。。

要 同行,或者是同列。。且差距在6格或者6格之内是吧

首先。。这么多个 elsif XXX
应该用case 啊。。上厕所去。。。忍不了了
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

40

主题

190

帖子

1635

积分

⑥精研

●~  ●~   ●

积分
1635
 楼主| 发表于 2010-1-12 20:45:42 | 显示全部楼层
用case 会提高速度么?怎么个CASE法啊?
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-1-12 21:10:52 | 显示全部楼层
Game_Character中有这么一段脚本


    # 计算正面坐标
    new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
    new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)


你这个是正面6格

把 1 改成 6  -1改成 -6.。OK了。。。要善用搜索啊。。。。

可以这样
  1.     d = $game_map.events[i].direction
  2.     new_x = $game_map.events[i].x + (d == 6 ? 6 : d == 4 ? -6 : 0)
  3.     new_y = $game_map.events[i].y + (d == 2 ? 6 : d == 8 ? -6 : 0)
  4.     if x在 0到 new_x内  y 在 0到 new_y内
  5.   XXXXXXXX
  6.     end
复制代码
我没看懂你那个是要干什么的。。。变量7、8号我也不知道是什么玩意。。只能这样写了
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-1-12 21:12:22 | 显示全部楼层
if $game_player.direction == 2
elsif
elsif
end

完全可以写成
case $game_player.direction
when 2
  XX
when 4
  XXX
when 6
when 8
end
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

40

主题

190

帖子

1635

积分

⑥精研

●~  ●~   ●

积分
1635
 楼主| 发表于 2010-1-12 22:19:35 | 显示全部楼层
变量7、8号是主角的坐标,用并行事件记录的
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-1-12 22:46:05 | 显示全部楼层
  1. for i in 1..20
  2.     x  = $game_variables[7]
  3.     y  = $game_variables[8]
  4.     x1 = $game_map.events[i].x
  5.     y1 = $game_map.events[i].y
  6.     d = $game_player.direction
  7.     new_x = x + (d == 6 ? 6 : d == 4 ? -6 : 0)
  8.     new_y = y + (d == 2 ? 6 : d == 8 ? -6 : 0)
  9.     if x1 >= 0 && x1 <= new_x && y1 >= 0 && y1 <= new_y
  10.       $game_self_switches[[$game_map.map_id,i,"E"]] = true
  11.     end
  12. end
复制代码

那就应该是这个样子了
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-1-12 22:51:11 | 显示全部楼层
这样子应该可以了。。。刚一开始写反了。。。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

40

主题

190

帖子

1635

积分

⑥精研

●~  ●~   ●

积分
1635
 楼主| 发表于 2010-1-13 08:56:19 | 显示全部楼层
引用第6楼secondsen于2010-01-12 22:46发表的  :
[code] for i in 1..20
    x  = $game_variables[7]
    y  = $game_variables[8]
    x1 = $game_map.events.x
    y1 = $game_map.events.y
.......


我这个效果是当按D键的时候角色可以快速穿透正前方6格范围内的事件,但是换了这个脚本以后发现角色只能穿透下方和右方的事件,上方和左方的事件不能穿透,之前是可以的
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-1-13 09:33:17 | 显示全部楼层
搞错了个地方
  1.   for i in 1..20
  2.     x  = $game_variables[7]
  3.     y  = $game_variables[8]
  4.     x1 = $game_map.events[i].x - x
  5.     y1 = $game_map.events[i].y - y
  6.     d = $game_player.direction
  7.     new_x = (d == 6 ? 6 : d == 4 ? -6 : 0)
  8.     new_y = (d == 2 ? 6 : d == 8 ? -6 : 0)
  9.     #p new_x,new_y
  10.     if (x1 <= 0 && x1 >= new_x && y1 <= 0 && y1 >= new_y) ||
  11.       (x1 >= 0 && x1 <= new_x && y1 >= 0 && y1 <= new_y)
  12.       $game_map.events[i].through = true
  13.     else
  14.       $game_map.events[i].through = false
  15.     end
  16.   end
复制代码
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-15 11:40 , Processed in 0.024030 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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