幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: secondsen

[个人创意] 摒弃按格子移动,VX的像素移动

[复制链接]

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-8-20 09:49:16 | 显示全部楼层
8.20更新:修正不同优先级的事件无法重叠的BUG,重写了远离主角的方法
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

7

主题

373

帖子

6346

积分

⑦老手

积分
6346
发表于 2009-8-20 22:13:35 | 显示全部楼层
解决了是吧?最近饭局较多,有空看看。。。
[url=http:\\\\agmer.lunqun.com]AGM制作者论坛[/url]
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-8-20 22:52:44 | 显示全部楼层
饭局???这么幸福。。。。。

当然是解决了之后来更新的
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

7

主题

373

帖子

6346

积分

⑦老手

积分
6346
发表于 2009-8-21 21:40:25 | 显示全部楼层
幸福?要掏钱的。。。 鲍鱼自助,不过上得太慢了
[url=http:\\\\agmer.lunqun.com]AGM制作者论坛[/url]
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-8-22 11:46:06 | 显示全部楼层
不是别人请客的么。。。OTZ。。。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

7

主题

373

帖子

6346

积分

⑦老手

积分
6346
发表于 2009-8-23 20:54:51 | 显示全部楼层
AA...
感觉鲍鱼上得很慢,快走的时候才上。。。
[url=http:\\\\agmer.lunqun.com]AGM制作者论坛[/url]
回复 支持 反对

使用道具 举报

1

主题

3

帖子

26

积分

②入门

积分
26
发表于 2009-8-25 23:32:05 | 显示全部楼层
新人报道,哇哇,太好了
我正好在做个ARPG
正好需要这样的像素移动
我这样的RHP就不客气了
(raise hand party - 传说中的伸手党)
还有在这个论坛发现了多个动画播放和动画播放延迟的脚本
我正为我的ARPG动画叠加问题烦呢
还有版主居然把系统藏在最后面第9页帖子
不过再长的帖子长不过我的手

飘过~~~~我轻轻的飘走~~~~~~
等版主完成的ARPG系统好了,我会回来~回来~来(回音)
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-9-19 09:16:46 | 显示全部楼层
其实我很想快点完成  ABS 的。。。但是  技能多了  太难写了。。。。。我本来想用  数据库的形式,但是有些技能比较特殊,只能用脚本写。。。OTZ要人命了,我就需要不停的更改数据库,或者说是完善数据库。。。正在华丽的书写技能和状态。。。。需要很长的时间
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-9-19 09:17:38 | 显示全部楼层
另外就是  技能的图标 状态的图标  都是我自己做。。。我本来美工就一窍不通可能快得起来么
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

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

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2009-11-8 10:37:26 | 显示全部楼层
  1. def passable_down?
  2.     return [-1,-1] if @through or debug_through?       # 穿越 ON?
  3.     distance = 2 ** @move_speed   # 变换移动速度与移动距离
  4.     distance *= 2 if dash?        # 跑步状态时移动速度加倍
  5.     real_y_min = real_r_y
  6.     real_y_max = real_y_min + distance
  7.     block = nil
  8.     l = @real_x - 384
  9.     r = @real_x + 384
  10.     if self.is_a?(Game_Event)
  11.       event = $game_player
  12.       if pix_collide_with_characters?(event)
  13.         if event.real_y >= real_y_min && event.real_y < real_y_max
  14.           if event.real_x > @real_x - 256 && event.real_x < @real_x + 256
  15.             block = [event.real_x,event.real_y]
  16.             if block[1] == @real_y + 256
  17.               if event.real_x > @real_x + 128
  18.                 r = event.real_x if event.real_x < r
  19.               elsif event.real_x < @real_x - 128
  20.                 l = event.real_x if event.real_x > l
  21.               else
  22.                 return [-2,-2]
  23.               end
  24.             end
  25.           end
  26.         end
  27.       end
  28.     end
  29.     for event in $game_map.events.values
  30.       if pix_collide_with_characters?(event) && self != event
  31.         if event.real_y >= real_y_min && event.real_y < real_y_max
  32.           if event.real_x > @real_x - 256 && event.real_x < @real_x + 256
  33.             if block
  34.               if event.real_y < block[1]
  35.                 block[0] = event.real_x
  36.                 block[1] = event.real_y
  37.               elsif event.real_y == @real_y + 256
  38.                 block[0] = event.real_x
  39.                 block[1] = event.real_y
  40.                 if event.real_x > @real_x + 128
  41.                   r = event.real_x if event.real_x < r
  42.                 elsif event.real_x < @real_x - 128
  43.                   l = event.real_x if event.real_x > l
  44.                 else
  45.                   return [-2,-2]
  46.                 end
  47.               end
  48.             else
  49.               block = [event.real_x,event.real_y]
  50.               if block[1] == @real_y + 256
  51.                 if event.real_x > @real_x + 128
  52.                   r = event.real_x if event.real_x < r
  53.                 elsif event.real_x < @real_x - 128
  54.                   l = event.real_x if event.real_x > l
  55.                 else
  56.                   return [-2,-2]
  57.                 end
  58.               end
  59.             end
  60.           end
  61.         end
  62.       end
  63.     end
  64.     if @real_y % 256 == 0 || 256 - @real_y % 256 < distance
  65.       if block
  66.         if @real_y % 256 == 0
  67.           y = (@real_y / 256 + 1) * 256
  68.         else
  69.           y = (@real_y / 256 + 2) * 256
  70.         end
  71.         if block[1] >= y
  72.           x = @real_x / 256
  73.           y = @real_y / 256 + 1
  74.           if @real_y % 256 != 0
  75.             y = y + 1
  76.           end
  77.           if @real_x % 256 == 0
  78.             if !map_passable?(x, y)
  79.               block[0] = x * 256
  80.               block[1] = y * 256
  81.               if y * 256 == @real_y + 256
  82.                 return [-2,-2]
  83.               end
  84.             end
  85.           else
  86.             if !map_passable?(x, y)
  87.               block[0] = x * 256
  88.               block[1] = y * 256
  89.               if !map_passable?(x + 1, y)
  90.                 return [-2,-2] if y * 256 == @real_y + 256
  91.               end
  92.               if y * 256 == @real_y + 256
  93.                 if x * 256 < @real_x - 128
  94.                   l = x * 256 if x * 256 > l
  95.                 end
  96.               end
  97.             elsif !map_passable?(x + 1, y)
  98.               block[0] = x * 256 + 256
  99.               block[1] = y * 256
  100.               if y * 256 == @real_y + 256
  101.                 if x * 256 + 256 > @real_x + 128
  102.                   r = x * 256 + 256 if x * 256 + 256 < r
  103.                 end
  104.               end
  105.             end
  106.           end
  107.         end
  108.       else
  109.         x = @real_x / 256
  110.         y = @real_y / 256 + 1
  111.         if @real_y % 256 != 0
  112.           y = y + 1
  113.         end
  114.         if @real_x % 256 == 0
  115.           if !map_passable?(x, y)
  116.             block = [x * 256,y * 256]
  117.             if y * 256 == @real_y + 256
  118.               return [-2,-2]
  119.             end
  120.           end
  121.         else
  122.           if !map_passable?(x, y)
  123.             block = [x * 256, y * 256]
  124.             if !map_passable?(x + 1, y)
  125.               return [-2,-2] if y * 256 == @real_y + 256
  126.             end
  127.           elsif !map_passable?(x + 1, y)
  128.             block = [x * 256 + 256, y * 256]
  129.           end
  130.         end
  131.       end
  132.     end
  133.     if block
  134.       if block[1] == @real_y + 256
  135.         if r - l < 512
  136.           return [-2,-2]
  137.         end
  138.       end
  139.       return block
  140.     end
  141.     return [-1,-1]
  142.   end
  143.   
  144.   def passable_left?
  145.     #return false unless $game_map.pix_valid?(dx - 31, dy)  # 地图外?
  146.     return [-1,-1] if @through or debug_through?       # 穿越 ON?
  147.     #return false unless map_passable?(x, y)         # 地图不能通行?
  148.     #return false if collide_with_characters?(x, y)  # 与角色冲突?
  149.     distance = 2 ** @move_speed   # 变换移动速度与移动距离
  150.     distance *= 2 if dash?        # 跑步状态时移动速度加倍
  151.     real_x_max = @real_x - 256
  152.     real_x_min = real_x_max - distance
  153.     block = nil
  154.     if self.is_a?(Game_Event)
  155.       event = $game_player
  156.       if pix_collide_with_characters?(event)
  157.         if event.real_x >= real_x_min && event.real_x <= real_x_max
  158.           if event.real_y > @real_y - 256 && event.real_y < @real_y + 256
  159.             block = [event.real_x,event.real_y]
  160.           end
  161.         end
  162.       end
  163.     end
  164.     for event in $game_map.events.values
  165.       if pix_collide_with_characters?(event) && self != event
  166.         if event.real_x >= real_x_min && event.real_x <= real_x_max
  167.           if event.real_y > @real_y - 256 && event.real_y < @real_y + 256
  168.             if block
  169.               if event.real_x > block[0]
  170.                 block[0] = event.real_x
  171.                 block[1] = event.real_y
  172.               end
  173.             else
  174.               block = [event.real_x,event.real_y]
  175.             end
  176.           end
  177.         end
  178.       end
  179.     end
  180.     if @real_x % 256 < distance
  181.       if block
  182.         x = @real_x / 256 * 256 - 256
  183.         if block[0] < x
  184.           x = @real_x / 256 - 1
  185.           y = @real_y / 256
  186.           if @real_y % 256 == 0
  187.             if !map_passable?(x, y)
  188.               block[0] = x * 256
  189.               block[1] = @real_y
  190.             end
  191.           else
  192.             if !map_passable?(x, y)
  193.               block[0] = x * 256
  194.               block[1] = y * 256
  195.             elsif !map_passable?(x, y + 1)
  196.               block[0] = x * 256
  197.               block[1] = y * 256 + 256
  198.             end
  199.           end
  200.         end
  201.       else
  202.         x = @real_x / 256 - 1
  203.         y = @real_y / 256
  204.         if @real_y % 256 == 0
  205.           if !map_passable?(x, y)
  206.             block = [x * 256,y * 256]
  207.           end
  208.         else
  209.           if !map_passable?(x, y)
  210.             block = [x * 256, y * 256]
  211.           elsif !map_passable?(x, y + 1)
  212.             block = [x * 256, y * 256 + 256]
  213.           end
  214.         end
  215.       end
  216.     end
  217.     return block if block
  218.     return [-1,-1]                                    # 可以通行
  219.   end
  220.   
  221.   def passable_right?
  222.     #return false unless $game_map.pix_valid?(dx - 31, dy)  # 地图外?
  223.     return [-1,-1] if @through or debug_through?       # 穿越 ON?
  224.     #return false unless map_passable?(x, y)         # 地图不能通行?
  225.     #return false if collide_with_characters?(x, y)  # 与角色冲突?
  226.     distance = 2 ** @move_speed   # 变换移动速度与移动距离
  227.     distance *= 2 if dash?        # 跑步状态时移动速度加倍
  228.     real_x_min = real_l_x + @volume * 8
  229.     real_x_max = real_x_min + distance
  230.     block = nil
  231.     if self.is_a?(Game_Event)
  232.       event = $game_player
  233.       if pix_collide_with_characters?(event)
  234.         if event.real_l_x >= real_x_min && event.real_l_x <= real_x_max
  235.           if event.real_l_y > real_l_y - 256 && event.real_l_y < real_l_y + 256
  236.             block = [event.real_x,event.real_y]
  237.           end
  238.         end
  239.       end
  240.     end
  241.     for event in $game_map.events.values
  242.       if pix_collide_with_characters?(event) && self != event
  243.         if event.real_l_x >= real_x_min && event.real_l_x <= real_x_max
  244.           if event.real_l_y > real_l_y - 256 && event.real_l_y < real_l_y + 256
  245.             if block
  246.               if event.real_l_x < block[0]
  247.                 block[0] = event.real_x
  248.                 block[1] = event.real_y
  249.               end
  250.             else
  251.               block = [event.real_x,event.real_y]
  252.             end
  253.           end
  254.         end
  255.       end
  256.     end
  257.     if @real_x % 256 == 0 || 256 - @real_x % 256 < distance
  258.       if block
  259.         if @real_x % 256 == 0
  260.           x = @real_x / 256 + 256
  261.         else
  262.           x = @real_x / 256 + 512
  263.         end
  264.         if block[0] > x
  265.           x = @real_x / 256 + 1
  266.           y = @real_y / 256
  267.           if @real_x % 256 != 0
  268.             x = x + 1
  269.           end
  270.           if @real_y % 256 == 0
  271.             if !map_passable?(x, y)
  272.               block = [x * 256, y * 256]
  273.             end
  274.           else
  275.             if !map_passable?(x, y)
  276.               block = [x * 256, y * 256]
  277.             elsif !map_passable?(x, y + 1)
  278.               block = [x * 256, y * 256 + 256]
  279.             end
  280.           end
  281.         end
  282.       else
  283.         x = @real_x / 256 + 1
  284.         y = @real_y / 256
  285.         if @real_x % 256 != 0
  286.           x = x + 1
  287.         end
  288.         if @real_y % 256 == 0
  289.           if !map_passable?(x, y)
  290.             block = [x * 256, y * 256]
  291.           end
  292.         else
  293.           if !map_passable?(x, y)
  294.             block = [x * 256, y * 256]
  295.           elsif !map_passable?(x, y + 1)
  296.             block = [x * 256, y * 256 + 256]
  297.           end
  298.         end
  299.       end
  300.     end
  301.     return block if block
  302.     return [-1,-1]                                    # 可以通行
  303.   end
  304.   
  305.   def passable_up?
  306.     #return false unless $game_map.pix_valid?(dx - 31, dy)  # 地图外?
  307.     return [-1,-1] if @through or debug_through?       # 穿越 ON?
  308.     #return false unless map_passable?(x, y)         # 地图不能通行?
  309.     #return false if collide_with_characters?(x, y)  # 与角色冲突?
  310.     distance = 2 ** @move_speed   # 变换移动速度与移动距离
  311.     distance *= 2 if dash?        # 跑步状态时移动速度加倍
  312.     real_y_max = real_l_y - 256
  313.     real_y_min = real_y_max - distance
  314.     block = nil
  315.     l = @real_x - 384
  316.     r = @real_x + 384
  317.     if self.is_a?(Game_Event)
  318.       event = $game_player
  319.       if pix_collide_with_characters?(event)
  320.         if event.real_y >= real_y_min && event.real_y <= real_y_max
  321.           if event.real_x > @real_x - 256 && event.real_x < @real_x + 256
  322.             block = [event.real_x,event.real_y]
  323.             if block[1] == @real_y - 256
  324.               if event.real_x > @real_x + 128
  325.                 r = event.real_x if event.real_x < r
  326.               elsif event.real_x < @real_x - 128
  327.                 l = event.real_x if event.real_x > l
  328.               else
  329.                 return [-2,-2]
  330.               end
  331.             end
  332.           end
  333.         end
  334.       end
  335.     end
  336.     for event in $game_map.events.values
  337.       if pix_collide_with_characters?(event) && self != event
  338.         if event.real_y >= real_y_min && event.real_y <= real_y_max
  339.           if event.real_x > @real_x - 256 && event.real_x < @real_x + 256
  340.             if block
  341.               if event.real_y > block[1]
  342.                 block[0] = event.real_x
  343.                 block[1] = event.real_y
  344.               elsif event.real_y == @real_y - 256 && block[1] == @real_y - 256
  345.                 if event.real_x > @real_x + 128
  346.                   r = event.real_x if event.real_x < r
  347.                 elsif event.real_x < @real_x - 128
  348.                   l = event.real_x if event.real_x > l
  349.               else
  350.                 return [-2,-2]
  351.                 end
  352.               end
  353.             else
  354.               block = [event.real_x,event.real_y]
  355.               if block[1] == @real_y - 256
  356.                 if event.real_x > @real_x + 128
  357.                   r = event.real_x if event.real_x < r
  358.                 elsif event.real_x < @real_x - 128
  359.                   l = event.real_x if event.real_x > l
  360.                 else
  361.                   return [-2,-2]
  362.                 end
  363.               end
  364.             end
  365.           end
  366.         end
  367.       end
  368.     end
  369.     if @real_y % 256 < distance
  370.       if block
  371.         y = @real_y / 256 * 256 - 256
  372.         if block[1] <= y
  373.           x = @real_x / 256
  374.           y = @real_y / 256 - 1
  375.           if @real_x % 256 == 0
  376.             if !map_passable?(x, y)
  377.               block[0] = @real_x
  378.               block[1] = y * 256
  379.               if y * 256 == @real_y - 256
  380.                 return [-2,-2]
  381.               end
  382.             end
  383.           else
  384.             if !map_passable?(x, y)
  385.               block[0] = x * 256
  386.               block[1] = y * 256
  387.               if !map_passable?(x + 1, y)
  388.                 return [-2,-2] if y * 256 == @real_y - 256
  389.               end
  390.               if y * 256 == @real_y - 256
  391.                 if x * 256 < @real_x - 128
  392.                   l = x * 256 if x * 256 > l
  393.                 end
  394.               end
  395.             elsif !map_passable?(x + 1, y)
  396.               block[0] = x * 256 + 256
  397.               block[1] = y * 256
  398.               if y * 256 == @real_y - 256
  399.                 if x * 256 + 256 > @real_x + 128
  400.                   r = x * 256 + 256 if x * 256 + 256 < r
  401.                 end
  402.               end
  403.             end
  404.           end
  405.         end
  406.       else
  407.         x = @real_x / 256
  408.         y = @real_y / 256 - 1
  409.         if @real_x % 256 == 0
  410.           if !map_passable?(x, y)
  411.             block = [x * 256,y * 256]
  412.             if y * 256 == @real_y - 256
  413.               return [-2,-2]
  414.             end
  415.           end
  416.         else
  417.           if !map_passable?(x, y)
  418.             block = [x * 256, y * 256]
  419.             if !map_passable?(x + 1, y)
  420.               return [-2,-2] if y * 256 == @real_y - 256
  421.             end
  422.           elsif !map_passable?(x + 1, y)
  423.             block = [x * 256 + 256, y * 256]
  424.           end
  425.         end
  426.       end
  427.     end
  428.     if block
  429.       if block[1] == @real_y - 256
  430.         if r - l < 512
  431.           return [-2,-2]
  432.         end
  433.       end
  434.       return block
  435.     end
  436.     return [-1,-1]                                    # 可以通行
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ● 向下移动
  440.   #     turn_ok : 此地可以更改朝向
  441.   #--------------------------------------------------------------------------
  442.   def move_down(turn_ok = true)
  443.     distance = 2 ** @move_speed   # 变换移动速度与移动距离
  444.     distance *= 2 if dash?        # 跑步状态时移动速度加倍
  445.     pass = passable_down?
  446.     if pass[0] == -1
  447.       @real_y += distance
  448.       turn_down
  449.       increase_steps
  450.       @move_failed = false
  451.       @moving = true
  452.     elsif pass[0] == -2
  453.       turn_down if turn_ok
  454.       @move_failed = true
  455.       @moving = false
  456.     else
  457.       if pass[1] == @real_y + 256 # 有没有紧贴障碍物
  458.         delta_x = @real_x - pass[0] # 判断左右移
  459.         if delta_x >= 128 && delta_x < 256 # 左突出,右移
  460.           pass2 = passable_right?
  461.           if pass2[0] == -1
  462.             @real_x += distance
  463.             turn_down
  464.             increase_steps
  465.             @move_failed = false
  466.             @moving = true
  467.             if @real_x > pass[0] + 256
  468.               @real_x = pass[0] + 256
  469.             end
  470.           else
  471.             @real_x = pass2[0] - 256
  472.             turn_down
  473.             increase_steps
  474.             @move_failed = false
  475.             @moving = true
  476.             #if @real_x > pass[0] + 256
  477.             #  @real_x = pass[0] + 256
  478.             #end
  479.           end
  480.         elsif delta_x <= -128 && delta_x > -256 # 右突出,左移
  481.           pass2 = passable_left?
  482.           if pass2[0] == -1
  483.             @real_x -= distance
  484.             turn_down
  485.             increase_steps
  486.             @move_failed = false
  487.             @moving = true
  488.             if @real_x < pass[0] - 256
  489.               @real_x = pass[0] - 256
  490.             end
  491.           else
  492.             @real_x = pass2[0] + 256
  493.             turn_down
  494.             increase_steps
  495.             @move_failed = false
  496.             @moving = true
  497.             #if @real_x < pass[0] - 256
  498.             #  @real_x = pass[0] - 256
  499.             #end
  500.           end
  501.         else
  502.           turn_down if turn_ok
  503.           @move_failed = true
  504.           @moving = false
  505.         end
  506.       else
  507.         @real_y = pass[1] - 256
  508.         turn_down
  509.         increase_steps
  510.         @move_failed = false
  511.         @moving = true
  512.       end
  513.     end
  514.           pix_check_event_trigger_touch(@real_x, @real_y, "down") # 判断接触的事件启动
  515.     pass.clear
  516.     pass2.clear if pass2
  517.     check("down",1)
  518.   end
  519.   #--------------------------------------------------------------------------
  520.   # ● 向左移动
  521.   #     turn_ok : 此地可以更改朝向
  522.   #--------------------------------------------------------------------------
  523.   def move_left(turn_ok = true)
  524.     distance = 2 ** @move_speed   # 变换移动速度与移动距离
  525.     distance *= 2 if dash?        # 跑步状态时移动速度加倍
  526.     pass = passable_left?
  527.     if pass[0] == -1
  528.       @real_x -= distance
  529.       turn_left
  530.       increase_steps
  531.       @move_failed = false
  532.       @moving = true
  533.     elsif pass[0] == -2
  534.       turn_left if turn_ok
  535.       @move_failed = true
  536.       @moving = false
  537.     else
  538.       if pass[0] == @real_x - 256 # 有没有紧贴障碍物
  539.         delta_y = @real_y - pass[1] # 判断上下移
  540.         if delta_y >= 128 && delta_y < 256 # 上突出,下移
  541.           pass2 = passable_down?
  542.           if pass2[0] == -1
  543.             @real_y += distance
  544.             turn_left
  545.             increase_steps
  546.             @move_failed = false
  547.             @moving = true
  548.             if @real_y > pass[1] + 256
  549.               @real_y = pass[1] + 256
  550.             end
  551.           else
  552.             @real_y = pass2[1] - 256
  553.             turn_left
  554.             increase_steps
  555.             @move_failed = false
  556.             @moving = true
  557.             #if @real_x > pass[0] + 256
  558.             #  @real_x = pass[0] + 256
  559.             #end
  560.           end
  561.         elsif delta_y <= -128 && delta_y > -256 # 下突出,上移
  562.           pass2 = passable_up?
  563.           if pass2[0] == -1
  564.             @real_y -= distance
  565.             turn_left
  566.             increase_steps
  567.             @move_failed = false
  568.             @moving = true
  569.             if @real_y < pass[1] - 256
  570.               @real_y = pass[1] - 256
  571.             end
  572.           else
  573.             @real_y = pass2[1] + 256
  574.             turn_left
  575.             increase_steps
  576.             @move_failed = false
  577.             @moving = true
  578.             #if @real_x < pass[0] - 256
  579.             #  @real_x = pass[0] - 256
  580.             #end
  581.           end
  582.         else
  583.           turn_left if turn_ok
  584.           @move_failed = true
  585.           @moving = false
  586.         end
  587.       else
  588.         @real_x = pass[0] + 256
  589.         turn_left
  590.         increase_steps
  591.         @move_failed = false
  592.         @moving = true
  593.       end
  594.     end
  595.           pix_check_event_trigger_touch(@real_x, @real_y, "left") # 判断接触的事件启动
  596.     pass.clear
  597.     pass2.clear if pass2
  598.     check("left",1)
  599.   end
  600.   #--------------------------------------------------------------------------
  601.   # ● 向右移动
  602.   #     turn_ok : 此地可以更改朝向
  603.   #--------------------------------------------------------------------------
  604.   def move_right(turn_ok = true)
  605.     distance = 2 ** @move_speed   # 变换移动速度与移动距离
  606.     distance *= 2 if dash?        # 跑步状态时移动速度加倍
  607.     pass = passable_right?
  608.     if pass[0] == -1
  609.       @real_x += distance
  610.       turn_right
  611.       increase_steps
  612.       @move_failed = false
  613.       @moving = true
  614.     elsif pass[0] == -2
  615.       turn_right if turn_ok
  616.       @move_failed = true
  617.       @moving = false
  618.     else
  619.       if pass[0] == @real_x + 256 # 有没有紧贴障碍物
  620.         delta_y = @real_y - pass[1] # 判断上下移
  621.         if delta_y >= 128 && delta_y < 256 # 上突出,下移
  622.           pass2 = passable_down?
  623.           if pass2[0] == -1
  624.             @real_y += distance
  625.             turn_right
  626.             increase_steps
  627.             @move_failed = false
  628.             @moving = true
  629.             if @real_y > pass[1] + 256
  630.               @real_y = pass[1] + 256
  631.             end
  632.           else
  633.             @real_y = pass2[1] - 256
  634.             turn_right
  635.             increase_steps
  636.             @move_failed = false
  637.             @moving = true
  638.             #if @real_x > pass[0] + 256
  639.             #  @real_x = pass[0] + 256
  640.             #end
  641.           end
  642.         elsif delta_y <= -128 && delta_y > -256 # 下突出,上移
  643.           pass2 = passable_up?
  644.           if pass2[0] == -1
  645.             @real_y -= distance
  646.             turn_right
  647.             increase_steps
  648.             @move_failed = false
  649.             @moving = true
  650.             if @real_y < pass[1] - 256
  651.               @real_y = pass[1] - 256
  652.             end
  653.           else
  654.             @real_y = pass2[1] + 256
  655.             turn_right
  656.             increase_steps
  657.             @move_failed = false
  658.             @moving = true
  659.             #if @real_x < pass[0] - 256
  660.             #  @real_x = pass[0] - 256
  661.             #end
  662.           end
  663.         else
  664.           turn_right if turn_ok
  665.           @move_failed = true
  666.           @moving = false
  667.         end
  668.       else
  669.         @real_x = pass[0] - 256
  670.         turn_right
  671.         increase_steps
  672.         @move_failed = false
  673.         @moving = true
  674.       end
  675.     end
  676.           pix_check_event_trigger_touch(@real_x, @real_y, "right") # 判断接触的事件启动
  677.     pass.clear
  678.     pass2.clear if pass2
  679.     check("right",1)
  680.   end
  681.   #--------------------------------------------------------------------------
  682.   # ● 向上移动
  683.   #     turn_ok : 此地可以更改朝向
  684.   #--------------------------------------------------------------------------
  685.   def move_up(turn_ok = true)
  686.     distance = 2 ** @move_speed   # 变换移动速度与移动距离
  687.     distance *= 2 if dash?        # 跑步状态时移动速度加倍
  688.     pass = passable_up?
  689.     if pass[0] == -1
  690.       @real_y -= distance
  691.       turn_up
  692.       increase_steps
  693.       @move_failed = false
  694.       @moving = true
  695.     elsif pass[0] == -2
  696.       turn_up if turn_ok
  697.       @move_failed = true
  698.       @moving = false
  699.     else
  700.       if pass[1] == @real_y - 256 # 有没有紧贴障碍物
  701.         delta_x = @real_x - pass[0] # 判断左右移
  702.         if delta_x >= 128 && delta_x < 256 # 左突出,右移
  703.           pass2 = passable_right?
  704.           if pass2[0] == -1
  705.             @real_x += distance
  706.             turn_up
  707.             increase_steps
  708.             @move_failed = false
  709.             @moving = true
  710.             if @real_x > pass[0] + 256
  711.               @real_x = pass[0] + 256
  712.             end
  713.           else
  714.             @real_x = pass2[0] - 256
  715.             turn_up
  716.             increase_steps
  717.             @move_failed = false
  718.             @moving = true
  719.             #if @real_x > pass[0] + 256
  720.             #  @real_x = pass[0] + 256
  721.             #end
  722.           end
  723.         elsif delta_x <= -128 && delta_x > -256 # 右突出,左移
  724.           pass2 = passable_left?
  725.           if pass2[0] == -1
  726.             @real_x -= distance
  727.             turn_up
  728.             increase_steps
  729.             @move_failed = false
  730.             @moving = true
  731.             if @real_x < pass[0] - 256
  732.               @real_x = pass[0] - 256
  733.             end
  734.           else
  735.             @real_x = pass2[0] + 256
  736.             turn_up
  737.             increase_steps
  738.             @move_failed = false
  739.             @moving = true
  740.             #if @real_x < pass[0] - 256
  741.             #  @real_x = pass[0] - 256
  742.             #end
  743.           end
  744.         else
  745.           turn_up if turn_ok
  746.           @move_failed = true
  747.           @moving = false
  748.         end
  749.       else
  750.         @real_y = pass[1] + 256
  751.         turn_up
  752.         increase_steps
  753.         @move_failed = false
  754.         @moving = true
  755.       end
  756.     end
  757.           pix_check_event_trigger_touch(@real_x, @real_y, "up") # 判断接触的事件启动
  758.     pass.clear
  759.     pass2.clear if pass2
  760.     check("up",1)
  761.   end
复制代码

替换 Character 中相应的方法。。。改了 上下两个通行。。另两个再等等吧。。。OTZ 另外更改了接触事件的启动

你可以试一试 左右两个方向和上下有什么不同
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 23:41 , Processed in 0.036761 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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