Project1

标题: 如何实现强制向上移动的同时能控制左右? [打印本页]

作者: lllzjsj    时间: 2013-7-14 17:28
标题: 如何实现强制向上移动的同时能控制左右?
用事件移动人物的话事件必须执行完毕人物才能再次受控,我想做一个强制向上移动并且能手动控制左右的效果
作者: chd114    时间: 2013-7-14 17:29
是角色直接斜着走路?
作者: lllzjsj    时间: 2013-7-14 18:07
chd114 发表于 2013-7-14 17:29
是角色直接斜着走路?

嗯。。。差不多吧,我想实现的效果是像飞行射击游戏一样地图自动卷动,人物固定在中间但可以左右移动
作者: chd114    时间: 2013-7-14 18:08
lllzjsj 发表于 2013-7-14 18:07
嗯。。。差不多吧,我想实现的效果是像飞行射击游戏一样地图自动卷动,人物固定在中间但可以左右移动 ...

那不就是8方向脚本吗···
作者: lllzjsj    时间: 2013-7-14 18:12
chd114 发表于 2013-7-14 18:08
那不就是8方向脚本吗···

八方向脚本不是斜着移动吗?我是想让人物一直保持移动,只能控制左右平移
作者: asdwds    时间: 2013-7-14 19:22
复制角色图中面朝上的部分,覆盖掉其面朝左右下的部分
然后你就发现你的任何移动都看起来角色是面朝上的移动

飞行射击类游戏,就这样改动一下就够了,至少我认为。也是最方便的改动
作者: 迷糊的安安    时间: 2013-7-14 19:29
0 0 模模糊糊记得好像《小丑馆3》的游戏关底就是一个这样的设计,不过那是VX游戏……
作者: lllzjsj    时间: 2013-7-14 19:42
asdwds 发表于 2013-7-14 19:22
复制角色图中面朝上的部分,覆盖掉其面朝左右下的部分
然后你就发现你的任何移动都看起来角色是面 ...


问题是我要的是实际在移动,而不是一直向上
我要做的就是主角不停地向上跑,停不下来
作者: asdwds    时间: 2013-7-14 22:41
本帖最后由 asdwds 于 2013-7-14 23:18 编辑
lllzjsj 发表于 2013-7-14 19:42
问题是我要的是实际在移动,而不是一直向上
我要做的就是主角不停地向上跑,停不下来 ...


如果是要让主角一直往某个方向跑的话,可以考虑用我写的。
使用方法看下楼,有BUG请告诉我

下面第一个是在开关2打开时,玩家将不能上下走。下面第二个是通过设置$game_player.upx和upy从而让其每帧都位移
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Game_CharacterBase
  3. #------------------------------------------------------------------------------
  4. #  管理地图人物的基本类。是所有地图人物类的共通父类。拥有坐标、图片等基本信息。
  5. #==============================================================================
  6. class Game_CharacterBase
  7.   #--------------------------------------------------------------------------
  8.   # ● 径向移动
  9.   # 用不了alias,所以请注意插入的位置
  10.   #--------------------------------------------------------------------------
  11.   def move_straight(d, turn_ok = true)
  12.     @move_succeed = passable?(@x, @y, d)
  13.     if @move_succeed && onlyRL?(d)  #就这里改动了
  14.       set_direction(d)
  15.       @x = $game_map.round_x_with_direction(@x, d)
  16.       @y = $game_map.round_y_with_direction(@y, d)
  17.       @real_x = $game_map.x_with_direction(@x, reverse_dir(d))
  18.       @real_y = $game_map.y_with_direction(@y, reverse_dir(d))
  19.       increase_steps
  20.     elsif turn_ok &&
  21.       set_direction(d)
  22.       check_event_trigger_touch_front
  23.     end
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 判断是否是往左或右移动 并且是只能左右的情况
  27.   #   在这里设定的是 $game_switches[2]== true 时是只能左右,
  28.   #  随意更改[]内数字,只要记得在限定左右时,开关操作-打开[]开关就可以了
  29.   #--------------------------------------------------------------------------
  30.   def onlyRL?(d)
  31.     if $game_switches[2] == true
  32.       if d == 2 or d == 8
  33.         return false
  34.       end
  35.     end
  36.     return true
  37.   end
  38. end


下面第二个是通过设置$game_player.upx和upy从而让其每帧都位移
        
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Game_CharacterBase
  3. #------------------------------------------------------------------------------
  4. #  管理地图人物的基本类。是所有地图人物类的共通父类。拥有坐标、图片等基本信息。
  5. #==============================================================================
  6.  
  7. class Game_Player < Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor   :upy                        # y 每帧增长的y
  12.   attr_accessor   :upx                        # x 每帧增长的y
  13.   attr_accessor   :upover                     # 强制位移终止
  14.   #--------------------------------------------------------------------------
  15.   # ● 初始化对象
  16.   #--------------------------------------------------------------------------
  17.   alias init initialize
  18.   def initialize
  19.     init
  20.     @upx = 0
  21.     @upy = 0
  22.     @upover = false
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 由方向键移动
  26.   #--------------------------------------------------------------------------
  27.   def move_by_input
  28.     return if !movable? || ($game_map.interpreter.running? and (@upy == 0 and @upx == 0) ) #多加了一个条件
  29.    #若觉得条件太长,改成@uping的true/false变量,一旦使用强制移动就打开,不使用就false
  30.     move_straight(Input.dir4) if Input.dir4 > 0
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 更新画面
  34. #  没有使用alias,请注意插入的位置
  35. #--------------------------------------------------------------------------
  36.   def update
  37.     last_real_x = @real_x - @upx
  38.     last_real_y = @real_y - @upy
  39.     last_moving = moving?
  40.     move_by_input
  41.     super
  42.     update_scroll(last_real_x, last_real_y)
  43.     if @upy != 0
  44.       @y = $game_map.round_y( @y + @upy)
  45.       @real_y = @y
  46.     end
  47.     if @upx != 0        # 这是X轴强制移动的部分,单独和x有关的,基本都是
  48.       @x = $game_map.round_x( @x + @upx)
  49.       @real_x = @x
  50.     end
  51.     if @upover == true
  52.       @x = @x.to_i  # to_i改成整数,否则将会因为小数而无法触发事件
  53.       @y = @y.to_i
  54.       @upover = false
  55.     end
  56.     update_vehicle
  57.     update_nonmoving(last_moving) unless moving?
  58.     @followers.update
  59.   end
  60. end



作者: asdwds    时间: 2013-7-14 22:47
本帖最后由 asdwds 于 2013-7-14 22:50 编辑


地图上的一个事件,001:time代表你要强制位移的时间,不一定要使用001变量
002开关,是我上面的只能左右的控制开关,可以改为别的开关变量,但是脚本那里也记得改一下
我自己用,是可以的。有可能我贴脚本时,漏掉了。或者贴错了地方173
也许能写的比我写的更短,或者更有效率些,但是个人觉得够用
第一页

第二页,独立A打开条件下


任何BUG,希望能告诉我,另外有可能和Game_Player的脚本冲突,请注意位置和前后关系
作者: chd114    时间: 2013-7-14 22:52
lllzjsj 发表于 2013-7-14 18:12
八方向脚本不是斜着移动吗?我是想让人物一直保持移动,只能控制左右平移 ...

把脚本编辑器里面关于移动的部分去掉一些就行···
作者: asdwds    时间: 2013-7-14 23:22
唯一一点,我忘了给强制位移判断通行可能了
自带的键盘移动虽然不会穿过,但是强制位移会使他穿过
另外这个只是强制移动,卷动会直接跟着主角。
如果你自设卷动,主角不会因为卷动的地图边线超过自己,从而维持自己在地图边线。

另外time虽然是时间,也可以是路程的,算好路程和upx,upy的关系,就可以了
作者: asdwds    时间: 2013-7-14 23:25
chd114 发表于 2013-7-14 22:52
把脚本编辑器里面关于移动的部分去掉一些就行···

我估计他是要根据场景,角色自动移动但却不影响键盘操控
斜对角移动只是移动的补充,不能达到自动移动的效果。
作者: chd114    时间: 2013-7-16 17:06
asdwds 发表于 2013-7-14 23:25
我估计他是要根据场景,角色自动移动但却不影响键盘操控
斜对角移动只是移动的补充,不能达到自动移动的 ...

用图片背景拉伸来模拟吧···如果硬要让角色不断自己往上走的话铁定会卡爆




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