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

Project1

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

《一起来做ARPG》之二《全方向移动》

 关闭 [复制链接]

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

跳转到指定楼层
1
发表于 2008-10-12 05:10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
为提高ARPG流畅度,有必要降低行走限制,像素移动做起来容易,可实际操作性过低,大大增加与RM数据库对接的复杂度,性价比最高仍是八方向。

一:四方向转八方向
为避免与默认系统的冲突,先将所有涉及方向移动的方法加“all_”前缀,建立全方向专用副本。
涉及方法,Game_Player类中:
all_move_by_input
all_check_event_trigger_touch
all_move_down
all_move_left
all_move_right
all_move_up
all_move_lower_left
all_move_lower_right
all_move_upper_left
all_move_upper_right


四方向改为八方向
  def all_move_by_input
    return unless movable?
    return if $game_map.interpreter.running?
    case Input.dir8
    when 1;  all_move_lower_left
    when 2;  all_move_down
    when 3;  all_move_lower_right
    when 4;  all_move_left
    #when 5;
    when 6;  all_move_right
    when 7;  all_move_upper_left      
    when 8;  all_move_up
    when 9;  all_move_upper_right

    end
  end


二:自动转向
但实际操作起来会发现移动手感较硬,我们增加滑动效果,以“all_move_down(向下移动)”为例子。
修改:
  def all_move_down(turn_ok = true)
    if passable?(@x, @y+1)                  # 可以通过
      turn_down
      @y = $game_map.round_y(@y+1)
      @real_y = (@y-1)*256
      increase_steps
      @move_failed = false      
else                                    # 下方向不可通过
  #如果存在事件优先启动。
      if all_check_event_trigger_touch(@x, @y+1) # 判断接触的事件启动
         turn_down if turn_ok
         @move_failed = true
         return
      end   
      #判断相对主角左右方向移动情况
#(dir =1:顺时针第一方向可;dir =2:顺时针第二方向可;dir =3:二方向皆可。)
      dir = 0
      dir +=1 if passable?(@x+1, @y+1)            #右下
      dir +=2 if passable?(@x-1, @y+1)            #左下
      if dir > 0
         #根据多数人右下优于左上的生理习惯,右下随机量略大于左上。
         return (rand(10) > 4 ? all_move_lower_right : all_move_lower_left) if dir == 3
         return all_move_lower_left if dir == 2
         return all_move_lower_right if dir == 1
      end      
    end
  end


其他方向更改思路完全一致,不再赘述。

三:接触事件时,移动停止。
第二步修改后,会发现,让事件非接触性启动的方式下,人物会自动绕行,这让调查事件变的很麻烦。
修改:
def all_check_event_trigger_touch(x, y)
    return false if $game_map.interpreter.running?
    result = false
    allEvents = $game_map.events_xy(x, y)
    #只要存在事件,无论是否可启动,必定为真,让移动停止。
    result = true unless allEvents.empty?

    for event in allEvents
      if [1,2].include?(event.trigger) and event.priority_type == 1
        event.start
      end
    end
    return result
  end


四:替换原来的行走刷新。
Game_Player类中
  def update
    last_real_x = @real_x
    last_real_y = @real_y
    last_moving = moving?
    #全方向移动
    all_move_by_input
    super
    update_scroll(last_real_x, last_real_y)
    update_vehicle
    update_nonmoving(last_moving)
  end


五:整理美化脚本结构,结束。

纵然千里外,我等雁归来。

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

2
发表于 2008-10-12 05:31:16 | 只看该作者
美受{/ll}你发错区了....

转移
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

3
 楼主| 发表于 2008-10-12 05:32:22 | 只看该作者
以下引用snstar2006于2008-10-11 21:31:16的发言:

美受你发错区了....

转移


VX讨论不对吗?
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-18
帖子
1423
4
发表于 2008-10-12 16:24:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

敌敌畏

梦石
0
星屑
80
在线时间
52 小时
注册时间
2008-5-12
帖子
1748
5
发表于 2008-10-12 16:42:40 | 只看该作者
這個用來改善rpg游戲的手感也可以,大行走圖在拐彎的時候


ps.rmvx做arpg=超級怨念,解決了系統還要解決手感,解決完手感還要解決卡不卡等都解決完了就是最大的坑---美工

回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-5
帖子
730
6
发表于 2008-10-13 00:25:52 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-4 15:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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