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

Project1

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

[已经解决] 求助,如何制作仿网游遇到不通行行走图继续播放?

 关闭 [复制链接]

Lv2.观梦者

梦石
0
星屑
710
在线时间
217 小时
注册时间
2011-1-26
帖子
690
跳转到指定楼层
1
发表于 2011-11-26 15:20:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 510035021 于 2011-11-26 15:20 编辑

标题表达不清,就是如何在角色遇到障碍物时, 如图,按右时,角色不再移动但是脚仍一直在动,就是事件中停止时动画的意思。

点评

- -我只会事件……另外如果不嫌弃的话四方向的我做好了,详细看我编辑后的帖子。  发表于 2011-11-26 19:47

Lv2.观梦者

梦石
0
星屑
432
在线时间
4175 小时
注册时间
2010-6-26
帖子
6474
2
发表于 2011-11-26 15:26:20 | 只看该作者
事件中点忽略不可移动场合就可以.这么简单别冤枉我刷分.

点评

还有,我的是角色  发表于 2011-11-26 16:57
我是说,如图,按右才会脚动,不按不会。  发表于 2011-11-26 16:56
潜水,专心忙活三次元工作了……
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
448
在线时间
628 小时
注册时间
2011-9-27
帖子
3996
3
发表于 2011-11-26 15:30:34 | 只看该作者
本帖最后由 小白玩家 于 2011-11-26 15:39 编辑

既然你明白停止时动画,并行处理下不就可以了,那就脚一直动了啊

2.jpg (14.43 KB, 下载次数: 0)

2.jpg

点评

我是说,如图,按右才会脚动,不按不会。待机的我自己都有,我要的不是待机  发表于 2011-11-26 16:56
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
653
在线时间
2658 小时
注册时间
2010-6-28
帖子
1361

开拓者

4
发表于 2011-11-26 19:18:19 | 只看该作者
本帖最后由 我的米呀 于 2011-11-26 19:46 编辑

这个是四面的……装在两个事件里……
- -我用不来脚本……你嫌麻烦就把这两个设成公共事件吧……或是求大牛们帮忙。

点评

很谢谢,但是真的不好  发表于 2011-11-26 20:27
有脚本的方法吗?这样要设置好多个,导致游戏太卡,而且上下左右都要一个事件。  发表于 2011-11-26 19:20

                 无从有中来,有从无中生。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
145
在线时间
698 小时
注册时间
2009-11-15
帖子
538
5
发表于 2011-11-27 07:30:34 | 只看该作者
改好了,如下所示,直接覆盖掉Game_Player
  1. #==============================================================================
  2. # ■ Game_Player //Swen.Hr(2719358)修改
  3. #------------------------------------------------------------------------------
  4. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  5. # 本类的实例请参考 $game_player。
  6. #==============================================================================

  7. class Game_Player < Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # ● 常量
  10.   #--------------------------------------------------------------------------
  11.   CENTER_X = (320 - 16) * 4   # 画面中央的 X 坐标 * 4
  12.   CENTER_Y = (240 - 16) * 4   # 画面中央的 Y 坐标 * 4
  13.   #--------------------------------------------------------------------------
  14.   # ● 可以通行判定
  15.   #     x : X 坐标
  16.   #     y : Y 坐标
  17.   #     d : 方向 (0,2,4,6,8)  ※ 0 = 全方向不能通行的情况判定 (跳跃用)
  18.   #--------------------------------------------------------------------------
  19.   def passable?(x, y, d)
  20.     # 求得新的坐标
  21.     new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  22.     new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  23.     # 坐标在地图外的情况下
  24.     unless $game_map.valid?(new_x, new_y)
  25.       # 不能通行
  26.       return false
  27.     end
  28.     # 调试模式为 ON 并且 按下 CTRL 键的情况下
  29.     if $DEBUG and Input.press?(Input::CTRL)
  30.       # 可以通行
  31.       return true
  32.     end
  33.     super
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 以画面中央为基准设置地图的显示位置
  37.   #--------------------------------------------------------------------------
  38.   def center(x, y)
  39.     max_x = ($game_map.width - 20) * 128
  40.     max_y = ($game_map.height - 15) * 128
  41.     $game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
  42.     $game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 向指定的位置移动
  46.   #     x : X 坐标
  47.   #     y : Y 坐标
  48.   #--------------------------------------------------------------------------
  49.   def moveto(x, y)
  50.     super
  51.     # 自连接
  52.     center(x, y)
  53.     # 生成遇敌计数
  54.     make_encounter_count
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 增加步数
  58.   #--------------------------------------------------------------------------
  59.   def increase_steps
  60.     super
  61.     # 不是强制移动路线的场合
  62.     unless @move_route_forcing
  63.       # 增加步数
  64.       $game_party.increase_steps
  65.       # 步数是偶数的情况下
  66.       if $game_party.steps % 2 == 0
  67.         # 检查连续伤害
  68.         $game_party.check_map_slip_damage
  69.       end
  70.     end
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 获取遇敌计数
  74.   #--------------------------------------------------------------------------
  75.   def encounter_count
  76.     return @encounter_count
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 生成遇敌计数
  80.   #--------------------------------------------------------------------------
  81.   def make_encounter_count
  82.     # 两种颜色震动的图像
  83.     if $game_map.map_id != 0
  84.       n = $game_map.encounter_step
  85.       @encounter_count = rand(n) + rand(n) + 1
  86.     end
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 刷新
  90.   #--------------------------------------------------------------------------
  91.   def refresh
  92.     # 同伴人数为 0 的情况下
  93.     if $game_party.actors.size == 0
  94.       # 清除角色的文件名及对像
  95.       @character_name = ""
  96.       @character_hue = 0
  97.       # 分支结束
  98.       return
  99.     end
  100.     # 获取带头的角色
  101.     actor = $game_party.actors[0]
  102.     # 设置角色的文件名及对像
  103.     @character_name = actor.character_name
  104.     @character_hue = actor.character_hue
  105.     # 初始化不透明度和合成方式
  106.     @opacity = 255
  107.     @blend_type = 0
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 同位置的事件启动判定
  111.   #--------------------------------------------------------------------------
  112.   def check_event_trigger_here(triggers)
  113.     result = false
  114.     # 事件执行中的情况下
  115.     if $game_system.map_interpreter.running?
  116.       return result
  117.     end
  118.     # 全部事件的循环
  119.     for event in $game_map.events.values
  120.       # 事件坐标与目标一致的情况下
  121.       if event.x == @x and event.y == @y and triggers.include?(event.trigger)
  122.         # 跳跃中以外的情况下、启动判定是同位置的事件
  123.         if not event.jumping? and event.over_trigger?
  124.           event.start
  125.           result = true
  126.         end
  127.       end
  128.     end
  129.     return result
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 正面事件的启动判定
  133.   #--------------------------------------------------------------------------
  134.   def check_event_trigger_there(triggers)
  135.     result = false
  136.     # 事件执行中的情况下
  137.     if $game_system.map_interpreter.running?
  138.       return result
  139.     end
  140.     # 计算正面坐标
  141.     new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  142.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  143.     # 全部事件的循环
  144.     for event in $game_map.events.values
  145.       # 事件坐标与目标一致的情况下
  146.       if event.x == new_x and event.y == new_y and
  147.          triggers.include?(event.trigger)
  148.         # 跳跃中以外的情况下、启动判定是正面的事件
  149.         if not event.jumping? and not event.over_trigger?
  150.           event.start
  151.           result = true
  152.         end
  153.       end
  154.     end
  155.     # 找不到符合条件的事件的情况下
  156.     if result == false
  157.       # 正面的元件是计数器的情况下
  158.       if $game_map.counter?(new_x, new_y)
  159.         # 计算 1 元件里侧的坐标
  160.         new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  161.         new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  162.         # 全事件的循环
  163.         for event in $game_map.events.values
  164.           # 事件坐标与目标一致的情况下
  165.           if event.x == new_x and event.y == new_y and
  166.              triggers.include?(event.trigger)
  167.             # 跳跃中以外的情况下、启动判定是正面的事件
  168.             if not event.jumping? and not event.over_trigger?
  169.               event.start
  170.               result = true
  171.             end
  172.           end
  173.         end
  174.       end
  175.     end
  176.     return result
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 接触事件启动判定
  180.   #--------------------------------------------------------------------------
  181.   def check_event_trigger_touch(x, y)
  182.     result = false
  183.     # 事件执行中的情况下
  184.     if $game_system.map_interpreter.running?
  185.       return result
  186.     end
  187.     # 全事件的循环
  188.     for event in $game_map.events.values
  189.       # 事件坐标与目标一致的情况下
  190.       if event.x == x and event.y == y and [1,2].include?(event.trigger)
  191.         # 跳跃中以外的情况下、启动判定是正面的事件
  192.         if not event.jumping? and not event.over_trigger?
  193.           event.start
  194.           result = true
  195.         end
  196.       end
  197.     end
  198.     return result
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 画面更新
  202.   #--------------------------------------------------------------------------
  203.   def update
  204.     # 本地变量记录移动信息
  205.     last_moving = moving?
  206.     # 移动中、事件执行中、强制移动路线中、
  207.     # 信息窗口一个也不显示的时候
  208.     unless moving? or $game_system.map_interpreter.running? or
  209.            @move_route_forcing or $game_temp.message_window_showing
  210.       # 如果方向键被按下、主角就朝那个方向移动
  211.       #--------------------------------------
  212.       #Swen.Hr(2719358)修改处
  213.       #--------------------------------------
  214.       case Input.dir4
  215.       when 2
  216.         @step_anime=true
  217.         move_down
  218.       when 4
  219.         @step_anime=true
  220.         move_left
  221.       when 6
  222.         @step_anime=true
  223.         move_right
  224.       when 8
  225.         @step_anime=true
  226.         move_up
  227.       else
  228.         @step_anime=false
  229.       end
  230.       #--------------------------------------
  231.       #修改结束
  232.       #--------------------------------------
  233.     end
  234.     # 本地变量记忆坐标
  235.     last_real_x = @real_x
  236.     last_real_y = @real_y
  237.     super
  238.     # 角色向下移动、画面上的位置在中央下方的情况下
  239.     if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
  240.       # 画面向下卷动
  241.       $game_map.scroll_down(@real_y - last_real_y)
  242.     end
  243.     # 角色向左移动、画面上的位置在中央左方的情况下
  244.     if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
  245.       # 画面向左卷动
  246.       $game_map.scroll_left(last_real_x - @real_x)
  247.     end
  248.     # 角色向右移动、画面上的位置在中央右方的情况下
  249.     if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
  250.       # 画面向右卷动
  251.       $game_map.scroll_right(@real_x - last_real_x)
  252.     end
  253.     # 角色向上移动、画面上的位置在中央上方的情况下
  254.     if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
  255.       # 画面向上卷动
  256.       $game_map.scroll_up(last_real_y - @real_y)
  257.     end
  258.     # 不在移动中的情况下
  259.     unless moving?
  260.       # 上次主角移动中的情况
  261.       if last_moving
  262.         # 与同位置的事件接触就判定为事件启动
  263.         result = check_event_trigger_here([1,2])
  264.         # 没有可以启动的事件的情况下
  265.         if result == false
  266.           # 调试模式为 ON 并且按下 CTRL 键的情况下除外
  267.           unless $DEBUG and Input.press?(Input::CTRL)
  268.             # 遇敌计数下降
  269.             if @encounter_count > 0
  270.               @encounter_count -= 1
  271.             end
  272.           end
  273.         end
  274.       end
  275.       # 按下 C 键的情况下
  276.       if Input.trigger?(Input::C)
  277.         # 判定为同位置以及正面的事件启动
  278.         check_event_trigger_here([0])
  279.         check_event_trigger_there([0,1,2])
  280.       end
  281.     end
  282.   end
  283. end
复制代码

点评

谢谢  发表于 2011-11-27 13:59
只需要改一个方法,有必要把整个类都写上么。  发表于 2011-11-27 09:30
考上三级了!
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 06:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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