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

Project1

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

[已经解决] 角色停止时动画

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3631
在线时间
1892 小时
注册时间
2010-6-19
帖子
1211
跳转到指定楼层
1
发表于 2014-9-3 09:11:04 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
下面这段脚本放在Game_Character里的话,角色的图形会自动变化,效果就像事件里NPC的【停止时动画】的效果一样。
  1. alias add_update_xdrs update
  2.   def update
  3.       @step_anime = true
  4.       add_update_xdrs
  5.    end
复制代码
现在想把他放到Scene_Menu里,但是就出现alias add_update_xdrs update这句错误。有办法解决吗。

点评

我放到Game_Character里,角色在地图上直接显示【停止时动画】,我现在改了打开菜单,可以看到NPC【停止时动画】的效果,可角色却不行,所以要弄这个  发表于 2014-9-3 18:28
为什么要放到Menu里呢?  发表于 2014-9-3 18:09

评分

参与人数 1星屑 +35 收起 理由
︶ㄣ牛排ぶ + 35 认可答案

查看全部评分

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9418
在线时间
2749 小时
注册时间
2008-9-5
帖子
3544

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

6
发表于 2014-9-4 13:10:45 | 只看该作者
本帖最后由 cinderelmini 于 2014-9-4 14:38 编辑

原理参考Scene_Map,
在Scene_Menu里建立了一个地图活动块,
(其实如果你用的是同个方式在Scene_Menu里显示地图的话那就是一样的了。)
然后update它,需要注意的事,update的时候,

  1. $game_map.update
  2. $game_player.update
  3. $game_system.update
  4. $game_screen.update
复制代码
这些变量都是要更新的,不然是没有动态效果的。

在Game_Character里加入了你上面那个让主角踏步的脚本后,
在Main前insert下面这段脚本,就能在菜单主界面Scene_menu里让地图的所有元素都动起来了。
但需要注意的是,即使菜单打开,角色还是可以操作的,
在这个过程中触发的NPC事件会在退出菜单后执行。
  1. class Scene_Menu
  2.   # ☆ 建立地图活动块
  3.   def create_screen
  4.     @screen = Spriteset_Map.new
  5.   end
  6.   # ☆ 释放地图
  7.   def dispose_screen
  8.     @screen.dispose
  9.   end
  10.   # ☆ 主处理
  11.   alias main_old main
  12.   def main
  13.     create_screen
  14.     main_old
  15.     dispose_screen
  16.   end
  17.   # ☆ 更新地图活动块
  18.   def update_screen
  19.     # 地图和角色等更新
  20.     $game_map.update
  21.     $game_player.update
  22.     # 系统 (计时器)、画面刷新
  23.     $game_system.update
  24.     $game_screen.update
  25.     @screen.update
  26.   end
  27.   # ☆ 画面更新
  28.   alias :org_update :update
  29.   def update
  30.     update_screen
  31.     org_update
  32.   end
  33. end
复制代码
如果你已经建立了地图活动块,
那么请参照自己建立的那个地图活动块变量名,在下面这段里修改变量名。
  1. class Scene_Menu
  2.   # ☆ 更新地图活动块
  3.   def update_screen
  4.     # 地图和角色等更新
  5.     $game_map.update
  6.     $game_player.update
  7.     # 系统 (计时器)、画面刷新
  8.     $game_system.update
  9.     $game_screen.update
  10.     @你已经建立的地图活动块名字.update
  11.   end
  12.   # ☆ 画面更新
  13.   alias :org_update :update
  14.   def update
  15.     update_screen
  16.     org_update
  17.   end
  18. end
复制代码
其他的Scene同理。




分割线



要不移动的话,稍微有点麻烦~
首先找到
  1. Game_Player
复制代码
脚本,
然后在里面找到
  1. def update
  2.     # 本地变量记录移动信息
  3.     last_moving = moving?
  4.     # 移动中、事件执行中、强制移动路线中、
  5.     # 信息窗口一个也不显示的时候
  6.     unless moving? or $game_system.map_interpreter.running? or
  7.            @move_route_forcing or $game_temp.message_window_showing
  8.       # 如果方向键被按下、主角就朝那个方向移动
  9.       case Input.dir4
  10.       when 2
  11.         move_down
  12.       when 4
  13.         move_left
  14.       when 6
  15.         move_right
  16.       when 8
  17.         move_up
  18.       end
  19.     end
复制代码
这里,需要在移动的操作中加上Scene的当前状态的判定,
比如在条件里加上Scene处于菜单Scene的情况的话,就是:
  1.    # 移动中、事件执行中、强制移动路线中、
  2.     # 信息窗口一个也不显示的时候
  3.     unless moving? or $game_system.map_interpreter.running? or
  4.            @move_route_forcing or $game_temp.message_window_showing or $scene.is_a?(Scene_Menu)
复制代码
注意最后一个“or”后面的内容,需要添加其他Scene的话就自行在后面再加or,
句式语法是一样的。



分割线


刚想了一下,发现菜单中触发事件的情况也可以避免,
先在
  1. Game_Player
复制代码
里找到:

  1.     # 不在移动中的情况下
  2.     unless moving?
  3.       # 上次主角移动中的情况
  4.       if last_moving
  5.         # 与同位置的事件接触就判定为事件启动
  6.         result = check_event_trigger_here([1,2])
  7.         # 没有可以启动的事件的情况下
  8.         if result == false
  9.           # 调试模式为 ON 并且按下 CTRL 键的情况下除外
  10.           unless $DEBUG and Input.press?(Input::CTRL)
  11.             # 遇敌计数下降
  12.             if @encounter_count > 0
  13.               @encounter_count -= 1
  14.             end
  15.           end
  16.         end
  17.       end
  18.       # 按下 C 键的情况下
  19.       if Input.trigger?(Input::C)
  20.         # 判定为同位置以及正面的事件启动
  21.         check_event_trigger_here([0])
  22.         check_event_trigger_there([0,1,2])
  23.       end
  24.     end
复制代码
在这前面一行,插入一句
  1. return unless $scene.is_a?(Scene_Map)
复制代码
就能成功避免触发了事件返回地图时执行事件了。

点评

太感谢了!  发表于 2014-9-4 15:53
已编辑新内容。  发表于 2014-9-4 14:23
有没办法,使角色不能移动,只显示动态  发表于 2014-9-4 13:48

评分

参与人数 1梦石 +1 收起 理由
︶ㄣ牛排ぶ + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3631
在线时间
1892 小时
注册时间
2010-6-19
帖子
1211
5
 楼主| 发表于 2014-9-4 06:44:52 | 只看该作者
chd114 发表于 2014-9-4 06:22
Menu里面显示的好像是战斗图你用一个行走图才有效果的停止时动画做什么 ...

请看图。。。。。。。。。。。。。。

未标题-1.jpg (261.93 KB, 下载次数: 15)

未标题-1.jpg
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2014-9-4 06:22:35 | 只看该作者
Menu里面显示的好像是战斗图你用一个行走图才有效果的停止时动画做什么
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
3
发表于 2014-9-3 22:07:36 | 只看该作者
一般我都会使用变量和矩形描绘的方法
变量小于四加一,如果等于五,带入值为一
描绘时高除四,宽也除四同时乘该变量
当然都是在update里
通俗的不能再通俗了呢
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv1.梦旅人

派大星

梦石
0
星屑
195
在线时间
2133 小时
注册时间
2011-9-18
帖子
2652
2
发表于 2014-9-3 18:39:23 | 只看该作者
需要实现角色停止时动画的话,可以使用设置移动路线。

点评

可以尝试公共事件  发表于 2014-9-3 19:25
问题是打开菜单的时候,事件不能执行的,我现在弄的是打开菜单之后,可以看到NPC行动,但是角色图片缺刷新不了,  发表于 2014-9-3 19:22
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 09:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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