Project1

标题: 第三种切格方法(32×32 --> 16×16) [打印本页]

作者: 柳柳    时间: 2006-10-15 13:35
标题: 第三种切格方法(32×32 --> 16×16)
……貌似是我研究的第三种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 进行了编辑]
作者: 柳柳    时间: 2006-10-15 13:35
标题: 第三种切格方法(32×32 --> 16×16)
……貌似是我研究的第三种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 进行了编辑]
作者: 张永    时间: 2006-10-15 14:30
抢个沙发就算了。{/dy}
作者: 神思    时间: 2006-10-15 18:04
- -`||以前试过把+1改成+0.5...但是这样之后.事件执行.和通行部分都会出问题....
作者: 叼烟的男孩    时间: 2006-10-15 19:23
..试试看~
作者: 柳柳    时间: 2006-10-16 05:36
以下引用神思于2006-10-15 10:04:37的发言:

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

passable还凑合,事件执行也还行,但是优先级就比较要命了
作者: gpra8764    时间: 2007-4-29 09:00
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1