查看: 4819|回复: 13

[已经解决] 如何实现强制向上移动的同时能控制左右?

[复制链接]
梦石
0
星屑
50
在线时间
29 小时
注册时间
2013-1-13
回帖
9
发表于 2013-7-14 17:28:25 来自手机 | 显示全部楼层 |阅读模式

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

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

×
用事件移动人物的话事件必须执行完毕人物才能再次受控,我想做一个强制向上移动并且能手动控制左右的效果
梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2013-7-14 17:29:06 | 显示全部楼层
是角色直接斜着走路?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
50
在线时间
29 小时
注册时间
2013-1-13
回帖
9
 楼主| 发表于 2013-7-14 18:07:04 | 显示全部楼层
chd114 发表于 2013-7-14 17:29
是角色直接斜着走路?

嗯。。。差不多吧,我想实现的效果是像飞行射击游戏一样地图自动卷动,人物固定在中间但可以左右移动
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

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

那不就是8方向脚本吗···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
50
在线时间
29 小时
注册时间
2013-1-13
回帖
9
 楼主| 发表于 2013-7-14 18:12:53 | 显示全部楼层
chd114 发表于 2013-7-14 18:08
那不就是8方向脚本吗···

八方向脚本不是斜着移动吗?我是想让人物一直保持移动,只能控制左右平移
回复

使用道具 举报

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
回帖
111
发表于 2013-7-14 19:22:26 | 显示全部楼层
复制角色图中面朝上的部分,覆盖掉其面朝左右下的部分
然后你就发现你的任何移动都看起来角色是面朝上的移动

飞行射击类游戏,就这样改动一下就够了,至少我认为。也是最方便的改动
1
回复

使用道具 举报

砂上描绘的愿想<

梦石
15
星屑
4156
在线时间
5078 小时
注册时间
2012-1-15
回帖
4362

开拓者贵宾短篇七成年组亚军剧作品鉴家

发表于 2013-7-14 19:29:22 | 显示全部楼层
0 0 模模糊糊记得好像《小丑馆3》的游戏关底就是一个这样的设计,不过那是VX游戏……
无明病目虚空见花月 睁眼梦不绝
回复

使用道具 举报

梦石
0
星屑
50
在线时间
29 小时
注册时间
2013-1-13
回帖
9
 楼主| 发表于 2013-7-14 19:42:10 | 显示全部楼层
asdwds 发表于 2013-7-14 19:22
复制角色图中面朝上的部分,覆盖掉其面朝左右下的部分
然后你就发现你的任何移动都看起来角色是面 ...


问题是我要的是实际在移动,而不是一直向上
我要做的就是主角不停地向上跑,停不下来

点评

强制移动的方法已经回复了,请察看4-86  发表于 2013-7-17 18:32
回复

使用道具 举报

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
回帖
111
发表于 2013-7-14 22:41:33 | 显示全部楼层
本帖最后由 asdwds 于 2013-7-14 23:18 编辑
lllzjsj 发表于 2013-7-14 19:42
问题是我要的是实际在移动,而不是一直向上
我要做的就是主角不停地向上跑,停不下来 ...


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

下面第一个是在开关2打开时,玩家将不能上下走。下面第二个是通过设置$game_player.upx和upy从而让其每帧都位移
[pre lang="ruby" line="1"]#==============================================================================
# ■ Game_CharacterBase
#------------------------------------------------------------------------------
#  管理地图人物的基本类。是所有地图人物类的共通父类。拥有坐标、图片等基本信息。
#==============================================================================
class Game_CharacterBase
  #--------------------------------------------------------------------------
  # ● 径向移动
  # 用不了alias,所以请注意插入的位置
  #--------------------------------------------------------------------------
  def move_straight(d, turn_ok = true)
    @move_succeed = passable?(@x, @y, d)
    if @move_succeed && onlyRL?(d)  #就这里改动了
      set_direction(d)
      @x = $game_map.round_x_with_direction(@x, d)
      @y = $game_map.round_y_with_direction(@y, d)
      @real_x = $game_map.x_with_direction(@x, reverse_dir(d))
      @real_y = $game_map.y_with_direction(@y, reverse_dir(d))
      increase_steps
    elsif turn_ok &&
      set_direction(d)
      check_event_trigger_touch_front
    end
  end
  #--------------------------------------------------------------------------
  # ● 判断是否是往左或右移动 并且是只能左右的情况
  #   在这里设定的是 $game_switches[2]== true 时是只能左右,
  #  随意更改[]内数字,只要记得在限定左右时,开关操作-打开[]开关就可以了
  #--------------------------------------------------------------------------
  def onlyRL?(d)
    if $game_switches[2] == true
      if d == 2 or d == 8
        return false
      end
    end
    return true
  end
end[/pre]

下面第二个是通过设置$game_player.upx和upy从而让其每帧都位移
        [pre lang="ruby" line="1"]#==============================================================================
# ■ Game_CharacterBase
#------------------------------------------------------------------------------
#  管理地图人物的基本类。是所有地图人物类的共通父类。拥有坐标、图片等基本信息。
#==============================================================================

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor   :upy                        # y 每帧增长的y
  attr_accessor   :upx                        # x 每帧增长的y
  attr_accessor   :upover                     # 强制位移终止
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias init initialize
  def initialize
    init
    @upx = 0
    @upy = 0
    @upover = false
  end
  #--------------------------------------------------------------------------
  # ● 由方向键移动
  #--------------------------------------------------------------------------
  def move_by_input
    return if !movable? || ($game_map.interpreter.running? and (@upy == 0 and @upx == 0) ) #多加了一个条件
   #若觉得条件太长,改成@uping的true/false变量,一旦使用强制移动就打开,不使用就false
    move_straight(Input.dir4) if Input.dir4 > 0
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
#  没有使用alias,请注意插入的位置
#--------------------------------------------------------------------------
  def update
    last_real_x = @real_x - @upx
    last_real_y = @real_y - @upy
    last_moving = moving?
    move_by_input
    super
    update_scroll(last_real_x, last_real_y)
    if @upy != 0
      @y = $game_map.round_y( @y + @upy)
      @real_y = @y
    end
    if @upx != 0        # 这是X轴强制移动的部分,单独和x有关的,基本都是
      @x = $game_map.round_x( @x + @upx)
      @real_x = @x
    end
    if @upover == true
      @x = @x.to_i  # to_i改成整数,否则将会因为小数而无法触发事件
      @y = @y.to_i
      @upover = false
    end
    update_vehicle
    update_nonmoving(last_moving) unless moving?
    @followers.update
  end
end[/pre]

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 感谢帮忙

查看全部评分

1
回复

使用道具 举报

梦石
0
星屑
50
在线时间
54 小时
注册时间
2013-1-3
回帖
111
发表于 2013-7-14 22:47:41 | 显示全部楼层
本帖最后由 asdwds 于 2013-7-14 22:50 编辑


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

任何BUG,希望能告诉我,另外有可能和Game_Player的脚本冲突,请注意位置和前后关系
1
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部