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

Project1

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

[原创发布] 第三种切格方法(32×32 --> 16×16)

 关闭 [复制链接]

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

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

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

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

x
……貌似是我研究的第三种16×16的方法了。不过这个还有更多的挖掘潜力。

简单说,其实只要把每次走1格改为走0.5格就行了:

  #--------------------------------------------------------------------------
  # ● 向下移动
  #     turn_enabled : 本场地位置更改许可标志
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    # 面向下
    if turn_enabled
      turn_down
    end
    # 可以通行的场合
    if passable?( @x,  @y, 2)
      # 面向下
      turn_down
      # 更新坐标
      if self.is_a?(Game_Player)
        @y += 0.5
      else
        @y += 1
      end

      # 增加步数
      increase_steps
    # 不能通行的情况下
    else
      # 接触事件的启动判定
      check_event_trigger_touch( @x,  @y+1)
    end
  end



这里用一个条件分歧来判断角色和NPC,当然也可以不做判断。

但是这样处理后有两个问题:

1、通行,对0.5格的判断会出错
2、事件触发,不容易对准。其实和通行是一个问题
3、角色站的位置不好。

关于2的解决方法和1完全一样,这里仅仅看看1的解决:

在def passable?里面,把原来的new_x,new_y修改为:
    if d == 6 and (x - x.to_i >= 0.5)
      new_x = x + 1
    elsif d == 4 and (x - x.to_i <= 0.4)
      new_x = x - 1
    else
      new_x = x
    end
    if d == 2 and (y - y.to_i >= 0.5)
      new_y = y + 1
    elsif d == 8 and (y - y.to_i <= 0.4)
      new_y = y - 1
    else
      new_y = y
    end
    new_x = new_x.to_i
    new_y = new_y.to_i

这样就可以判断是在原来的32×32格中走,还是该做行走的passable判定(0.5是判定;0.4那个是为了如果你打算切得更细,比如每一步走0.3步用)。

根据默认的passable,当在“主角所处格”移动时,一律return false,这里修改为:

    # 主角的坐标与移动目标坐标一致的情况下
    if $game_player.x == new_x and $game_player.y == new_y and !self.is_a?(Game_Player)
      # 穿透为 ON
      unless $game_player.through
        # 自己的图形是角色的情况下
        if @character_name != ""
          # 不能通行
          return false
        end
      end
    end

就可以了。



关于3、角色站位不好的问题,在以前的综合系统里面都没解决过,现在看,其实只要在Spriteset_Character里面进行修改:
        self.ox = @cw / 2 + 8
        self.oy = @ch + 12

这个+8和+12就是调整位置了……

这样就行了……手感大增……



经过测试:BUG无数 - -b
原因:默认图块的优先级错误。

所以又是一个只能用于双远景图或者类似方法制作的游戏中的东西……仅供开阔思路好了。

              [本贴由 叶舞枫 于 2007-4-28 12:58:30 进行了编辑]

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

2
 楼主| 发表于 2006-10-15 13:35:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
……貌似是我研究的第三种16×16的方法了。不过这个还有更多的挖掘潜力。

简单说,其实只要把每次走1格改为走0.5格就行了:

  #--------------------------------------------------------------------------
  # ● 向下移动
  #     turn_enabled : 本场地位置更改许可标志
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    # 面向下
    if turn_enabled
      turn_down
    end
    # 可以通行的场合
    if passable?( @x,  @y, 2)
      # 面向下
      turn_down
      # 更新坐标
      if self.is_a?(Game_Player)
        @y += 0.5
      else
        @y += 1
      end

      # 增加步数
      increase_steps
    # 不能通行的情况下
    else
      # 接触事件的启动判定
      check_event_trigger_touch( @x,  @y+1)
    end
  end



这里用一个条件分歧来判断角色和NPC,当然也可以不做判断。

但是这样处理后有两个问题:

1、通行,对0.5格的判断会出错
2、事件触发,不容易对准。其实和通行是一个问题
3、角色站的位置不好。

关于2的解决方法和1完全一样,这里仅仅看看1的解决:

在def passable?里面,把原来的new_x,new_y修改为:
    if d == 6 and (x - x.to_i >= 0.5)
      new_x = x + 1
    elsif d == 4 and (x - x.to_i <= 0.4)
      new_x = x - 1
    else
      new_x = x
    end
    if d == 2 and (y - y.to_i >= 0.5)
      new_y = y + 1
    elsif d == 8 and (y - y.to_i <= 0.4)
      new_y = y - 1
    else
      new_y = y
    end
    new_x = new_x.to_i
    new_y = new_y.to_i

这样就可以判断是在原来的32×32格中走,还是该做行走的passable判定(0.5是判定;0.4那个是为了如果你打算切得更细,比如每一步走0.3步用)。

根据默认的passable,当在“主角所处格”移动时,一律return false,这里修改为:

    # 主角的坐标与移动目标坐标一致的情况下
    if $game_player.x == new_x and $game_player.y == new_y and !self.is_a?(Game_Player)
      # 穿透为 ON
      unless $game_player.through
        # 自己的图形是角色的情况下
        if @character_name != ""
          # 不能通行
          return false
        end
      end
    end

就可以了。



关于3、角色站位不好的问题,在以前的综合系统里面都没解决过,现在看,其实只要在Spriteset_Character里面进行修改:
        self.ox = @cw / 2 + 8
        self.oy = @ch + 12

这个+8和+12就是调整位置了……

这样就行了……手感大增……



经过测试:BUG无数 - -b
原因:默认图块的优先级错误。

所以又是一个只能用于双远景图或者类似方法制作的游戏中的东西……仅供开阔思路好了。

              [本贴由 叶舞枫 于 2007-4-28 12:58:30 进行了编辑]

Lv1.梦旅人

《幕后素材党》

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

贵宾第1届短篇游戏比赛冠军

3
发表于 2006-10-15 14:30:04 | 只看该作者
抢个沙发就算了。{/dy}
微博ID:张永黑白鱼
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彩色的银子

梦石
0
星屑
50
在线时间
190 小时
注册时间
2006-6-13
帖子
1361

贵宾

4
发表于 2006-10-15 18:04:37 | 只看该作者
- -`||以前试过把+1改成+0.5...但是这样之后.事件执行.和通行部分都会出问题....
-.-
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2006-8-9
帖子
510
5
发表于 2006-10-15 19:23:04 | 只看该作者
..试试看~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

6
 楼主| 发表于 2006-10-16 05:36:07 | 只看该作者
以下引用神思于2006-10-15 10:04:37的发言:

- -`||以前试过把+1改成+0.5...但是这样之后.事件执行.和通行部分都会出问题....

passable还凑合,事件执行也还行,但是优先级就比较要命了
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

苹果梨

梦石
0
星屑
43
在线时间
6 小时
注册时间
2007-2-14
帖子
720
7
发表于 2007-4-29 09:00:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 18:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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