查看: 6603|回复: 13

[原创发布] 【XP】不怎么影响原有功能的像素移动。

[复制链接]

老黄鸡

梦石
4
星屑
45739
在线时间
7952 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2011-10-1 11:51:53 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 fux2 于 2011-10-1 11:55 编辑

脚本有点蛋疼就不发了,直接上工程,然后像素移动什么的截图也看不出来= =图也不发了。
然后,8方向不适用,只写了4个方向的.
像素移动.rar (189.6 KB, 下载次数: 2073)

评分

参与人数 2星屑 +96 收起 理由
MeowSnow + 66 流石超能黄鸡
px.凤翔九天 + 30 好有爱的像素移动~

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托

(?????)

梦石
0
星屑
872
在线时间
1327 小时
注册时间
2011-7-18
回帖
3036

贵宾

发表于 2011-10-1 12:56:39 | 显示全部楼层
转角的地方是为了手感做优化么……
但是范围太过宽泛了吧……

这样当想要启动距离主角斜四方向一格的事件会有困难 =v= b
■
 ◆
↑就是这种位置关系啦 =W= 当然也不是非常困难就是了 手感问题

最好加个开关或者直接判断当主角移动速度较低时再使用(可以广泛用在某些地方的特效啊)

但是步数为0的话某些特殊情况会很麻烦吧 =3= 虽然这个鸡肋的功能用的不多就是了

地形标志测试通过 =w= 坐标获取到的是小数……
回复

使用道具 举报

梦石
0
星屑
1580
在线时间
1564 小时
注册时间
2008-7-30
回帖
4207

贵宾

发表于 2011-10-1 13:22:15 | 显示全部楼层
整体测试手感不错,XAS4本来是使用像素移动的,可是作者一直坑着……

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复

使用道具 举报

老黄鸡

梦石
4
星屑
45739
在线时间
7952 小时
注册时间
2009-7-6
回帖
13338

MZ评测员RM创作大赛01组委会开拓者贵宾

 楼主| 发表于 2011-10-1 14:12:39 | 显示全部楼层
各种压力的猫君 发表于 2011-10-1 12:56
转角的地方是为了手感做优化么……
但是范围太过宽泛了吧……

错位也可以触发事件.

点评

我是说从侧面走过去,想要转向NPC并触发事件,有可能会滑到一边去 = =  发表于 2011-10-1 14:15
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

梦石
0
星屑
50
在线时间
23 小时
注册时间
2011-8-15
回帖
42
发表于 2011-10-1 14:21:33 | 显示全部楼层
DeathKing 发表于 2011-10-1 13:22
整体测试手感不错,XAS4本来是使用像素移动的,可是作者一直坑着……

XAS本身就是比较复杂的一个系统了,再加入像素移动的话之前很多东西都要修改吧。
多浩大的工程,很期待.

评分

参与人数 1星屑 +20 收起 理由
各种压力的猫君 + 20 >V< 小黄鸡~~摸摸~

查看全部评分

0v0
回复

使用道具 举报

(?????)

梦石
0
星屑
872
在线时间
1327 小时
注册时间
2011-7-18
回帖
3036

贵宾

发表于 2011-10-11 15:49:32 | 显示全部楼层
突然想到的,能不能加入一个“移动到最邻近格子”的方法?
回复

使用道具 举报

梦石
0
星屑
211
在线时间
905 小时
注册时间
2010-9-6
回帖
3138
发表于 2011-10-24 23:47:30 | 显示全部楼层
鄙人表示,下载不完整……

点评

附件傲娇很正常,多下载几次  发表于 2011-10-25 01:01
回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2017-2-19 21:18:29 | 显示全部楼层
我试了一下。普通用还好。就是一些要修改移动速度之类的会出错。还会跑到地图外面去不见了。

点评

我经过修改后,用到了XAS里,暂时没出错。  发表于 2017-7-7 17:12
回复

使用道具 举报

梦石
0
星屑
991
在线时间
594 小时
注册时间
2012-6-3
回帖
343
发表于 2017-2-21 15:05:17 | 显示全部楼层
这么就没来,一堆大神出来了
小白狐一只~
回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2017-7-27 15:42:35 | 显示全部楼层
本帖最后由 yang1zhi 于 2017-7-27 22:50 编辑

这个脚本最大的缺点是。
移动速度很快的时候。会穿越不能穿越的图块。甚至地图外面。
      speed1 = (2**@move_speed).to_f/128
      speed2 = speed1 - speed1.to_i
      speed = speed1.to_i
      for i in 0..speed1.to_i*2
        if i == 0
          speed = speed2
        else
          speed = 0.5
          end


我贴上我做的修改
[pre lang="ruby"]class Game_Character
  alias:md:move_down
  def move_down(turn_enabled = true,bot=true)
  kz = [0,0]
        #不能移动的情况
        if defined? self.battler.agi == nil
    #解除逃跑
    self.battler.remove_state(29)
         # 睡眠
         return  if self.battler.states.include?(90)
         #害怕
         return  if self.battler.states.include?(91)
         #待命
         return  if self.battler.states.include?(6)
    return  if $game_temp.cast_time > 0 and self.is_a?(Game_Player)
    return   if @cold_countsf > 0
    #大型尺寸移动接触
    if XAS_BA_ENEMY::BODY_SQUARE.include?(self.battler.id) and
     not XAS_BA_ENEMY::BODY_SQUARE_QH.include?(self.battler.id)
    kz = [-XAS_BA_ENEMY::BODY_SQUARE[self.battler.id],XAS_BA_ENEMY::BODY_SQUARE[self.battler.id]]
  end
  end
    unless bot
      speed1 = (2**@move_speed).to_f/128
      speed2 = speed1 - speed1.to_i
      speed = speed1.to_i
      for i in 0..speed1.to_i*2
        if i == 0
          speed = speed2
        else
          speed = 0.5
          end

      if passable?(@x.to_i, (@y+speed).to_i, 2)
        if @x.to_i != @x
         
          tongxing = true
          for i in kz
            next unless $game_map.valid?((@x+0.9+i).to_i, (@y+speed).to_i)
            unless passable?((@x+0.9+i).to_i,(@y+speed).to_i, 2)
              tongxing = false
            end
          end
          if $game_map.valid?((@x+0.9).to_i, (@y+speed).to_i)
          unless passable?((@x+0.9).to_i,(@y+speed).to_i, 2)
              tongxing = false
            end
            end
          if tongxing == true
            turn_down if turn_enabled
            @y += speed
            
     #     if passable?((@x+0.9).to_i,(@y+speed).to_i, 2)
          else
            if passable?((@x-0.1).to_i,(@y+speed).to_i, 2)
        #    unless check_event_trigger_touch(@x.to_i+1, (@y+speed).to_i+1)
              @y = (@y+speed).to_i
              @x -= speed
              turn_down if turn_enabled
            else
              turn_down if turn_enabled
            end
          end
        else
         
            tongxing = true
          for i in kz
             next unless $game_map.valid?((@x+0.9+i).to_i, (@y+speed).to_i)
            unless passable?((@x+0.9+i).to_i,(@y+speed).to_i, 2)
              tongxing = false
            end
          end
          if $game_map.valid?((@x+0.9).to_i, (@y+speed).to_i)
          unless passable?((@x+0.9).to_i,(@y+speed).to_i, 2)
              tongxing = false
            end
            end
          if tongxing == true
          turn_down if turn_enabled
          @y += speed
        end
        end
      else
     #   if passable?((@x+0.9).to_i,(@y+speed).to_i, 2)
     if passable?((@x+1).to_i,(@y+speed).to_i, 2)
     #     unless check_event_trigger_touch(@x.to_i, (@y+speed).to_i+1)
            @y = (@y+speed).to_i
            @x += speed
            turn_down if turn_enabled
      #    else
      #      turn_down if turn_enabled
      #      @y = (@y+speed).to_i
       #   end
        else
          turn_down if turn_enabled
          @y = (@y+speed).to_i
          check_event_trigger_touch(@x.to_i, @y.to_i+1)
        end
      end
      end
    else
      md(turn_enabled)
    end
  end

  alias:ml:move_left
  def move_left(turn_enabled = true,bot=true)
  kz = [0,0]
        #不能移动的情况
        if defined? self.battler.agi == nil
    #解除逃跑
    self.battler.remove_state(29)
         # 睡眠
         return  if self.battler.states.include?(90)
         #害怕
         return  if self.battler.states.include?(91)
         #待命
         return  if self.battler.states.include?(6)
    return  if $game_temp.cast_time > 0 and self.is_a?(Game_Player)
    return   if @cold_countsf > 0
    #大型尺寸移动接触
    if XAS_BA_ENEMY::BODY_SQUARE.include?(self.battler.id) and
     not XAS_BA_ENEMY::BODY_SQUARE_QH.include?(self.battler.id)
    kz = [-XAS_BA_ENEMY::BODY_SQUARE[self.battler.id]*0.9,XAS_BA_ENEMY::BODY_SQUARE[self.battler.id]*0.9]
  end
  end

    unless bot
      speed1 = (2**@move_speed).to_f/128
      speed2 = speed1 - speed1.to_i
      speed = speed1.to_i
      for i in 0..speed1.to_i
        if i == 0
          speed = speed2
        else
          speed = 0.5
          end

      if passable?((@x-speed+0.9).to_i,@y.to_i, 4)
        if @y.to_i != @y
          tongxing = true
          if $game_map.valid?((@x-speed+0.9-kz[0].abs).to_i,(@y+0.9).to_i)
          unless passable?((@x-speed+0.9-kz[0].abs).to_i,(@y+0.9).to_i, 4)
              tongxing = false
            end
            end
          if $game_map.valid?((@x-speed+0.9-kz[0].abs).to_i,(@y+0.9-kz[0].abs).to_i)
          unless passable?((@x-speed+0.9-kz[0].abs).to_i,(@y+0.9-kz[0].abs).to_i, 4)
              tongxing = false
            end
            end
          if tongxing == true
            
  #        if passable?((@x-speed+0.9).to_i,(@y+0.9).to_i, 4)
            turn_left if turn_enabled
            @x -= speed
          else
            if passable?((@x-speed+0.9).to_i,(@y-0.1).to_i, 4)
        #    unless check_event_trigger_touch(@x.to_i-1, @y.to_i+1)
              @x = @x.to_i
              @y -= speed
              turn_left if turn_enabled
            else
              turn_left if turn_enabled
            end
          end
        else
          tongxing = true
          if $game_map.valid?((@x-speed+0.9-kz[0].abs).to_i,(@y+0.9).to_i)
          unless passable?((@x-speed+0.9-kz[0].abs).to_i,(@y+0.9).to_i, 4)
              tongxing = false
            end
            end
          if $game_map.valid?((@x-speed+0.9-kz[0].abs).to_i,(@y+0.9-kz[0].abs).to_i)
          unless passable?((@x-speed+0.9-kz[0].abs).to_i,(@y+0.9-kz[0].abs).to_i, 4)
              tongxing = false
            end
            end
          if tongxing == true
            
          turn_left if turn_enabled
          @x -= speed
        else
          @x = @x.to_i
        end
        end
      else
      #  if passable?((@x-speed+0.9).to_i,(@y+0.9).to_i, 4)
       if passable?((@x-speed+0.9).to_i,(@y+1).to_i, 4)
     #     unless check_event_trigger_touch(@x.to_i-1, @y.to_i)
            @x = @x.to_i
            @y += speed
            turn_left if turn_enabled
     #     else
      #      turn_left if turn_enabled
      #      @x = @x.to_i
     #     end
        else
          turn_left if turn_enabled
          @x = @x.to_i
          check_event_trigger_touch(@x.to_i-1, @y.to_i)
        end
      end
      end
    else
      ml(turn_enabled)
    end
  end

  alias:mr:move_right
  def move_right(turn_enabled = true,bot=true)
  kz = [0,0]
        #不能移动的情况
        if defined? self.battler.agi == nil
    #解除逃跑
    self.battler.remove_state(29)
         # 睡眠
         return  if self.battler.states.include?(90)
         #害怕
         return  if self.battler.states.include?(91)
         #待命
         return  if self.battler.states.include?(6)
    return  if $game_temp.cast_time > 0 and self.is_a?(Game_Player)
    return   if @cold_countsf > 0
    #大型尺寸移动接触
    if XAS_BA_ENEMY::BODY_SQUARE.include?(self.battler.id) and
     not XAS_BA_ENEMY::BODY_SQUARE_QH.include?(self.battler.id)
    kz = [-XAS_BA_ENEMY::BODY_SQUARE[self.battler.id]*0.9,XAS_BA_ENEMY::BODY_SQUARE[self.battler.id]*0.9]
  end
  end

    unless bot
      speed1 = (2**@move_speed).to_f/128
      speed2 = speed1 - speed1.to_i
      speed = speed1.to_i
      for i in 0..speed1.to_i
        if i == 0
          speed = speed2
        else
          speed = 0.5
          end

      if passable?((@x+speed).to_i,@y.to_i, 6)
        if @y.to_i != @y
         
          tongxing = true
          if $game_map.valid?((@x+speed+kz[0].abs).to_i,(@y+0.9).to_i)
          unless passable?((@x+speed+kz[0].abs).to_i,(@y+0.9).to_i, 6)
              tongxing = false
            end
            end
          if $game_map.valid?((@x+speed+kz[0].abs).to_i,(@y+0.9-kz[0].abs).to_i)
          unless passable?((@x+speed+kz[0].abs).to_i,(@y+0.9-kz[0].abs).to_i, 6)
              tongxing = false
            end
            end
          if tongxing == true
            
      #    if passable?((@x+speed).to_i,(@y+0.9).to_i, 6)
            turn_right if turn_enabled
            @x += speed
          else
           if passable?((@x+speed).to_i,(@y-0.1).to_i, 6)
       #     unless check_event_trigger_touch((@x+speed).to_i+1, @y.to_i+1)
              @x = (@x+speed).to_i
              @y -= speed
              turn_right if turn_enabled
            else
              @x = (@x+speed).to_i
              turn_right if turn_enabled
            end
          end
        else
         
          tongxing = true
          if $game_map.valid?((@x+speed+kz[0].abs).to_i,(@y+0.9).to_i)
          unless passable?((@x+speed+kz[0].abs).to_i,(@y+0.9).to_i, 6)
              tongxing = false
            end
            end
          if $game_map.valid?((@x+speed+kz[0].abs).to_i,(@y+0.9-kz[0].abs).to_i)
          unless passable?((@x+speed+kz[0].abs).to_i,(@y+0.9-kz[0].abs).to_i, 6)
              tongxing = false
            end
            end
          if tongxing == true
            
          turn_right if turn_enabled
          @x += speed
        else
          turn_right if turn_enabled
          @x = @x.to_i
        end
        end
      else
    #    if passable?((@x+speed).to_i,(@y+0.9).to_i, 6)
         if passable?((@x+speed).to_i,(@y+1).to_i, 6)
    #      unless check_event_trigger_touch((@x+speed).to_i+1, @y.to_i)
            @x = (@x+speed).to_i
            @y += speed
      #      turn_right if turn_enabled
     #     else
     #       @x = (@x+speed).to_i
    #        turn_right if turn_enabled
     #     end
        else
          turn_right if turn_enabled
          @x = (@x+speed).to_i
          check_event_trigger_touch(@x.to_i+1, @y.to_i)
        end
      end
      end
    else
      mr(turn_enabled)
    end
  end

  alias:mu:move_up
  def move_up(turn_enabled = true,bot=true)
  kz = [0,0]
        #不能移动的情况
        if defined? self.battler.agi == nil
    #解除逃跑
    self.battler.remove_state(29)
         # 睡眠
         return  if self.battler.states.include?(90)
         #害怕
         return  if self.battler.states.include?(91)
         #待命
         return  if self.battler.states.include?(6)
    return  if $game_temp.cast_time > 0 and self.is_a?(Game_Player)
    return   if @cold_countsf > 0
    #大型尺寸移动接触
    if XAS_BA_ENEMY::BODY_SQUARE.include?(self.battler.id) and
     not XAS_BA_ENEMY::BODY_SQUARE_QH.include?(self.battler.id)
    kz = [-XAS_BA_ENEMY::BODY_SQUARE[self.battler.id],XAS_BA_ENEMY::BODY_SQUARE[self.battler.id]]
  end
  end
    unless bot
      speed1 = (2**@move_speed).to_f/128
      speed2 = speed1 - speed1.to_i
      speed = speed1.to_i
      for i in 0..speed1.to_i
        if i == 0
          speed = speed2
        else
          speed = 0.5
          end
      if passable?(@x.to_i, (@y-speed+0.9).to_i, 8)
        if @x.to_i != @x
         
          tongxing = true
          for i in kz
            next unless $game_map.valid?((@x+0.9+i).to_i, (@y-speed+0.9-i.abs).to_i)
            unless passable?((@x+0.9+i).to_i,(@y-speed+0.9-i.abs).to_i, 8)
              tongxing = false
            end
          end
          if $game_map.valid?((@x+0.9).to_i, (@y-speed+0.9-kz[0].abs).to_i)
          unless passable?((@x+0.9).to_i,(@y-speed+0.9-kz[0].abs).to_i, 8)
              tongxing = false
            end
            end
          if tongxing == true
            
       #   if passable?((@x+0.9).to_i,(@y-speed+0.9).to_i, 8)
            turn_up if turn_enabled
            @y -= speed
          else
          if  passable?((@x-0.1).to_i,(@y-speed+0.9).to_i, 8)
      #      unless check_event_trigger_touch(@x.to_i+1, @y.to_i-1)
              @y = @y.to_i
              @x -= speed
              turn_up if turn_enabled
            else
              turn_up if turn_enabled
            end
          end
        else
         
          tongxing = true
          for i in kz
            next unless $game_map.valid?((@x+0.9+i).to_i, (@y-speed+0.9-i.abs).to_i)
            unless passable?((@x+0.9+i).to_i,(@y-speed+0.9-i.abs).to_i, 8)
              tongxing = false
            end
          end
          if $game_map.valid?((@x+0.9).to_i, (@y-speed+0.9-kz[0].abs).to_i)
          unless passable?((@x+0.9).to_i,(@y-speed+0.9-kz[0].abs).to_i, 8)
              tongxing = false
            end
            end
          if tongxing == true
          turn_up if turn_enabled
          @y -= speed
        else
          turn_right if turn_enabled
          @y = @y.to_i
        end
        end
      else
      #  if passable?((@x+0.9).to_i,(@y-speed+0.9).to_i, 8)
       #   unless check_event_trigger_touch(@x.to_i, @y.to_i-1)
       #     @y = @y.to_i
       #     @x += speed
       #     turn_up if turn_enabled
       #   else
        #    turn_up if turn_enabled
            if passable?((@x+1).to_i,(@y-speed+0.9).to_i, 8)
              @x += speed
        #    elsif passable?((@x-0.9).to_i-1,(@y-speed+0.9).to_i, 8)
        #      @x -= speed
        #      else
            @y = @y.to_i
        #    end
      #    end
        else
          turn_up if turn_enabled
          @y = @y.to_i
          check_event_trigger_touch(@x.to_i, @y.to_i-1)
        end
      end
      end
    else
      mu(turn_enabled)
    end
    @y = 10 if @y < 10 and $game_switches[32] == true
  end
  
end



class Game_Event < Game_Character
    def check_event_trigger_touch(x, y)
    # 事件执行中的情况下
    if $game_system.map_interpreter.running?
      return
    end
    # 目标为 [与事件接触] 以及和主角坐标一致的情况下
   # if @trigger == 2 and x == $game_player.x and y == $game_player.y
    if @trigger == 2 and  ($game_player.x+0.5).between?(x-0.5,x+1.5) and ($game_player.y+0.5).between?(y,y+1.5)
      # 除跳跃中以外的情况、启动判定就是正面的事件
      if not jumping? #and not over_trigger?
        start
      end
    end
  end
  def check_event_trigger_auto
    # 目标为 [与事件接触] 以及和主角坐标一致的情况下
    if @trigger == 2 and ($game_player.x+0.5).between?(@x-0.5,@x+1.5) and ($game_player.y+0.5).between?(@y,@y+1.5)
      # 除跳跃中以外的情况、启动判定就是同位置的事件
      if not jumping? #and over_trigger?
        start
      end
    end
    # 目标是 [自动执行] 的情况下
    if @trigger == 3
      start
    end
  end

end


class Game_Player < Game_Character

  def check_event_trigger_here(triggers)
    result = false
    if $game_system.map_interpreter.running?
      return result
    end
    x = $game_variables[138]["x"]
    y = $game_variables[138]["y"]
   
    for event in $game_map.events.values
      next  if (event.x+0.5).between?(x-0.5,x+1.5) and (event.y+0.5).between?(y,y+1.5) and
      (event.name == "传送" or event.name.include?("陷阱"))
      if (event.x+0.5).between?(@x-0.5,@x+1.5) and (event.y+0.5).between?(@y,@y+1.5) and triggers.include?(event.trigger)
        if not event.jumping? #and event.over_trigger?
          event.start
          result = true
        end
      end
    end
    return result
  end

  def check_event_trigger_there(triggers)
    result = false
    if $game_system.map_interpreter.running?
      return result
    end
    new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
    new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
    for event in $game_map.events.values
      if (event.x+0.5).between?(new_x-0.5,new_x+1.5) and (event.y+0.5).between?(new_y,new_y+1.5) and triggers.include?(event.trigger)
        if not event.jumping? #and not event.over_trigger?
          event.start
          result = true
        end
      end
    end
    return result
  end[/pre]

点评

若干年前的彩笔脚本就不要吐槽了……  发表于 2017-7-27 22:42
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部