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

Project1

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

《一起来做ARPG》之四《八方步行图》

 关闭 [复制链接]

Lv1.梦旅人

月下可怜人

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

第1届短篇游戏比赛亚军

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

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

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

x
一:先设定斜四方向所需的基础方法(方向编号与小键盘数字同)。
class Game_Character

  #--------------------------------------------------------------------------
  # ● 向左下
  #--------------------------------------------------------------------------
  def turn_lower_left
    set_direction(1)
  end
  #--------------------------------------------------------------------------
  # ● 向右下
  #--------------------------------------------------------------------------
  def turn_lower_right
    set_direction(3)
  end
  #--------------------------------------------------------------------------
  # ● 向左上
  #--------------------------------------------------------------------------
  def turn_upper_left
    set_direction(7)
  end
  #--------------------------------------------------------------------------
  # ● 向右上
  #--------------------------------------------------------------------------
  def turn_upper_right
    set_direction(9)
  end

  
end


二:设立步行图数字编号与图片坐标对应关系常数。

module Standrad
  
  #八方向行走图纵向坐标基准常数
#(0点,左下,下,右下,左,回中,右,左上,上,右上)
  DIR8_Y = [0, 4, 0, 5, 1, 0, 2, 6, 3, 7]

  
end  


三:将八方向行走图纵向坐标基准常数与实际刷新行走图的方法关联起来。

class Sprite_Character < Sprite_Base
  
  DIR8_SY = Standrad::DIR8_Y
  
  def update_src_rect
    if @tile_id == 0
      index = @character.character_index
      pattern = @character.pattern < 3 ? @character.pattern : 1
      sx = (index % 4 * 3 + pattern) * @cw
      sy =  DIR8_SY[@character.direction] * @ch
      self.src_rect.set(sx, sy, @cw, @ch)
    end
  end

end

四:如图,当处于如下地形时,角色会自动滑走,致使无法调查头上岩石,增加暂时取消滑动的功能。


从人的生理习惯考虑,CTRL作为组合键比较合适,先取消掉其DEBUG穿行的功能。

Game_Player中:
  #--------------------------------------------------------------------------
  # ● 更新遇敌
  #--------------------------------------------------------------------------
  def update_encounter
    #此处被删除
    return if in_vehicle?                           # 乘座了交通工具?
    if $game_map.bush?(@x, @y)                      # 繁茂
      @encounter_count -= 2                         # 计数减少 2
    else                                            # 繁茂以外的情况
      @encounter_count -= 1                         # 计数减少 1
    end
  end

Game_Character中:
  #--------------------------------------------------------------------------
  # ● 判断可以通行
  #     x : X 坐标
  #     y : Y 坐标
  #--------------------------------------------------------------------------
  def passable?(x, y)
    x = $game_map.round_x(x)                        # 横方向循环修正
    y = $game_map.round_y(y)                        # 纵方向循环修正
    return false unless $game_map.valid?(x, y)      # 地图外?
    return true if @through                         # 穿越 ON?
    return false unless map_passable?(x, y)         # 地图不能通行?
    return false if collide_with_characters?(x, y)  # 与角色冲突?
    return true                                     # 可以通行
  end

最后全方向移动脚本中的偏向行走的方法中将添加CTRL控制方法。
  #--------------------------------------------------------------------------
  # ● 偏向判断     
  #--------------------------------------------------------------------------
  def dir_fact(x1, y1, x2, y2, d1, d2)
      return if Input.press?(Input::CTRL)
      dir = 0
      dir +=1 if passable?(x1, y1)            
      dir +=2 if passable?(x2, y2)            
      if dir > 0  
         return (rand(10) > 4 ? move_dir(d1) : move_dir(d2)) if dir == 3
         return move_dir(d2) if dir == 2
         return move_dir(d1) if dir == 1
      end   
  end


五:还差一步就完工了,此时会发现当角色处于角落无法斜方向转向,修改一下斜方向行走的方法即可,以向下以及左下移动为例,其他方向同。

  def all_move_down(turn_ok = true)
    turn_down if turn_ok
    if passable?(@x, @y+1)                  # 可以通过
      @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) # 判断接触的事件启动
         @move_failed = true
         return
      end  
      dir_fact(@x+1, @y+1, @x-1, @y+1, 3, 1)     
    end
  end

  def all_move_lower_left  
    if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
       (passable?(@x-1, @y) and passable?(@x-1, @y+1))
       turn_lower_left unless @direction_fix
      @x -= 1
      @y += 1
      increase_steps
      @move_failed = false
else
  #禁止无法移动场合下的非法转向
      turn_lower_left if !@direction_fix and Input.dir8 == 1
      @move_failed = true
    end
  end


结束。
纵然千里外,我等雁归来。
头像被屏蔽

Lv1.梦旅人 (禁止发言)

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

使用道具 举报

Lv1.梦旅人

月下可怜人

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

第1届短篇游戏比赛亚军

3
 楼主| 发表于 2008-10-14 07:06:56 | 只看该作者
以下引用約束于2008-10-13 23:03:47的发言:

美兽君的ARPG袭击行动第二波~~

> <  ARPG的话…我不是多对他有爱呢……

不过,很强大就是了,要做这个的话


所以,加油~


谢谢,只是我时间不大宽裕,大概一周更新一次吧。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

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

使用道具 举报

Lv1.梦旅人

月下可怜人

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

第1届短篇游戏比赛亚军

5
 楼主| 发表于 2008-10-14 07:13:23 | 只看该作者
以下引用約束于2008-10-13 23:11:07的发言:

那个 姬文翔找你……

问你你上次跟他说的事……


睡了,明日若有时间我会找他,谢谢你。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-8-4
帖子
608
6
发表于 2008-10-14 07:19:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

7
发表于 2008-10-14 22:55:06 | 只看该作者
我觉得ARPG的难度比较高……

仅指玩的难度……呵呵……话说……18号之后还能上网吗?
有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-4 16:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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