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

Project1

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

[已经解决] 如何判断1号事件是否接触到角色正在播放的动画

[复制链接]

Lv2.观梦者

梦石
0
星屑
505
在线时间
340 小时
注册时间
2008-8-13
帖子
526
跳转到指定楼层
1
发表于 2010-7-3 06:51:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 ProfesstionR 于 2010-7-5 13:52 编辑

ACT写范围...不好控制
所以,如何判断1号事件是否接触到角色正在播放的动画
就是象素接触,动画里透明的算没碰到,不透明的1号事件接触一点点都算碰到

这怎么写?
- - 你无视我就行了
Temperament can not be proud to imitate supreme.

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2010-6-26
帖子
292
2
发表于 2010-7-3 08:38:21 | 只看该作者
不知道LZ是不是这个意思..LZ可以把1号事件调并行处理,然后用坐标判断与主角的距离,如果在主角攻击范围内,而主角又按了攻击建或者是什么健,那就执行事件内容,不用按健的话就直接执行内容也可以...不知道能不能帮你....
板子呀板子
回复 支持 反对

使用道具 举报

Lv1.梦旅人

剑仙·影羽

梦石
0
星屑
172
在线时间
224 小时
注册时间
2010-3-20
帖子
1580
3
发表于 2010-7-3 09:44:56 | 只看该作者
建议LZ先用RPGXP地图编辑中每一格的长度,然后再画图上精确确定攻击动画中
攻击的场合与被攻击的场合的坐标距离长短,拼成动画,
这样的话攻击动画的最远距离到达的一定是怪物的前面而不是穿过去
然后按LS的话照办

——至今为止,谁也没能分析出他们为什么会因为说了这些话而死。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

剑仙·影羽

梦石
0
星屑
172
在线时间
224 小时
注册时间
2010-3-20
帖子
1580
4
发表于 2010-7-3 09:46:24 | 只看该作者
LS 的方法具体应用的话我给你个教程:
假设我们要做一个如下图的攻击:
○=主角
●=攻击范围
 ●
○●●
 ●

//攻击时,才呼叫事件判断
操作变数:[0001:1x]代入,主角Y座标
操作变数:[0002:1y]代入,主角X座标
操作开关:[0001:攻击中]设为 开 //开关是用作避面不在攻击的时候被判断为击中
条件分歧:主角面向上 //向前攻击要判断主角方向
操作变数:[0002:1y]加,1 //通过计算得出攻击范围
操作变数:[0003:2x]代入,变数[0001]的值
操作变数:[0004:2y]代入,变数[0002]的值
操作变数:[0004:2y]加,1
飞往指定标记:1号
:分歧结束
条件分歧:主角面向上
操作变数:[0002:1y]减,1
操作变数:[0003:2x]代入,变数[0001]的值
操作变数:[0004:2y]代入,变数[0002]的值
操作变数:[0004:2y]减,1
建立记号:1号
操作变数:[0005:3x]代入,变数[0001]的值
操作变数:[0005:3x]减,1
操作变数:[0006:3y]代入,变数[0002]的值
操作变数:[0007:4x]代入,变数[0001]的值
操作变数:[0007:4x]加,1
操作变数:[0008:4y]代入,变数[0002]的值
:分歧结束
条件分歧:主角面向左
操作变数:[0001:1x]减,1
操作变数:[0003:2x]代入,变数[0001]的值
操作变数:[0004:2y]代入,变数[0002]的值
操作变数:[0003:2x]减,1
飞往指定标记:2号
:分歧结束
条件分歧:主角面向上
操作变数:[0001:1x]加,1
操作变数:[0003:2x]代入,变数[0001]的值
操作变数:[0004:2y]代入,变数[0002]的值
操作变数:[0003:2x]加,1
建立记号:2号
操作变数:[0005:3x]代入,变数[0001]的值
操作变数:[0006:3y]代入,变数[0002]的值
操作变数:[0006:3y]减,1
操作变数:[0007:4x]代入,变数[0001]的值
操作变数:[0008:4y]代入,变数[0002]的值
操作变数:[0008:4y]加,1
:分歧结束
等待:0.3秒 //调整攻击之间的时间,和让怪物有时间去"看清楚"自己是否被击中
操作开关:[0001:攻击中]设为 关

//怪物与攻击重迭判定,在怪物事件定期并列执行
操作变数:[0009:怪物x]代入,这个事件Y座标
操作变数:[0010:怪物y]代入,这个事件Y座标
条件分歧:开关[0001:攻击中]为 开
条件分歧:变数[0009:怪物x]为V[0001]相同
条件分歧:变数[0010:怪物y]为V[0002]相同
(怪物被击中)
:分歧结束
:分歧结束
条件分歧:变数[0009:怪物x]为V[0003]相同
条件分歧:变数[0008:怪物y]为V[0004]相同
(怪物被击中)
:分歧结束
:分歧结束
条件分歧:变数[0009:怪物x]为V[0005]相同
条件分歧:变数[0010:怪物y]为V[0006]相同
(怪物被击中)
:分歧结束
:分歧结束
条件分歧:变数[0009:怪物x]为V[0007]相同
条件分歧:变数[0010:怪物y]为V[0008]相同
(怪物被击中)
:分歧结束
:分歧结束

怪物攻击主角的命中判断也是这样做,只不过是相反。

——至今为止,谁也没能分析出他们为什么会因为说了这些话而死。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
505
在线时间
340 小时
注册时间
2008-8-13
帖子
526
5
 楼主| 发表于 2010-7-3 10:02:41 | 只看该作者
- - 你无视我就行了
Temperament can not be proud to imitate supreme.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
6
发表于 2010-7-4 02:30:32 | 只看该作者
http://rpg.blue/forum.php?mod=vi ... &extra=page%3D3

参考这贴,不是简单几句脚本就能解决的
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
505
在线时间
340 小时
注册时间
2008-8-13
帖子
526
7
 楼主| 发表于 2010-7-4 06:40:39 | 只看该作者
本帖最后由 ProfesstionR 于 2010-7-4 06:43 编辑

XP动画的象素接触该怎么检测,我会写象素接触,但我不知道怎么才能读取动画里正在播放那一贞的长和宽...以及X,Y
- - 你无视我就行了
Temperament can not be proud to imitate supreme.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
8
发表于 2010-7-4 09:07:10 | 只看该作者
id = 1
frame_id = 0
cell_index = 0
data_index = 1
p $data_animations[id].frames[frame_id].
cell_data[cell_index, data_index]

id = 动画编号(从 1 开始)
frame_id = 帧编号(从 0 开始)
cell_index = 单元编号(从 0 开始)
data_index 的范围是 0..7,表示单元的各信息(0:式样、1:X 座标,2:Y 座标,3:放大率,4:旋转角度,5:左右反转,6:不透明度,7:合成方式)。式样是 Maker 显示的号码减去 1 的数字。-1 意味着该单元缺如。

从开始播放动画时检测碰撞,每帧刷新,宽度和高度是通过放大率决定的,100% 时是 192 * 192
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
505
在线时间
340 小时
注册时间
2008-8-13
帖子
526
9
 楼主| 发表于 2010-7-4 11:36:42 | 只看该作者
本帖最后由 ProfesstionR 于 2010-7-4 12:10 编辑

紫苏大..能写具体点吗.....如何读取角色正在播放的动画ID以及正在播放那一贞,还有X号动画第Y贞的单元总数?
- - 你无视我就行了
Temperament can not be proud to imitate supreme.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
10
发表于 2010-7-4 12:28:47 | 只看该作者
本帖最后由 紫苏 于 2010-7-4 12:31 编辑

# 锁定 1 号事件,下面的 0 是事件编号 - 1
spr = $scene.instance_eval("@spriteset").
  instance_eval("@character_sprites")[0]
ani = spr.instance_eval("@_animation")
dur = spr.instance_eval(
"@_animation_duration")

if(ani) # 如果当前正在播放动画
p ani.id, # 动画 ID
  ani.frame_max - dur # 当前帧
end

有了当前正在播放的帧的数据,就可以用楼上上的方法获取动画的数据

以上仅针对地图中的动画,战斗中另有循环动画,则不是这样写的了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-6 15:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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