感觉beginstep和endstep不够用啊! 怎么办?
gamemaker吧
全部回复
仅看楼主
level 8
anheimfb
楼主
最近做游戏发现个问题:
我要做的游戏每个对象必须有个代码执行顺序:
移动控制—攻击判定—物理效果—视角震动和跟随
但是 beginstep,step,endstep只能划分出3个顺序。
求大家出出主意
2014年09月30日 10点09分
1
level 9
jimmy939553081
不怎么懂你的意思……使用alarm可以吗?或者设置变量attack,在step每秒+1,当attack为某个值的时候执行代码,这就可以省掉beginstep和endstep了
2014年09月30日 11点09分
2
anheimfb
是挺难解释的 就是我想要同一桢里每个对象的代码有4个部分,所有对象的第一个部分代码执行完之后,执行第2部分代码,然后第3个,这样往后推。如果都放在step里的话就不会有这样的顺序,而是每个对象的代码执行完才行。所以要用到beginstep,endstep。
2014年09月30日 12点09分
level 13
-世界-
只能曲线救国了,把房间帧数调大,不同帧执行不同操作
2014年09月30日 12点09分
3
anheimfb
啊 确实是个办法,帧数调大真书会对游戏有什么影响吗? 我自己想到的是把执行代码都放到一个对象里,不过那样估计会很乱
2014年09月30日 12点09分
blovestorm
回复 anheimfb :这绝对不是好办法。
2014年09月30日 16点09分
level 13
-世界-
或者,这样,每个物体4个阶段,事件分别用User 0、User 1、User 2、User 3。
然后创建一个没有精灵的物体,step动作里面写
with (all)
{event_user(0)}
with (all)
{event_user(1)}
……
2014年09月30日 12点09分
4
anheimfb
额 感觉with不好用,比如with里有个变量a+=1.如果有n个实例的话,就会变成a+=n的效果,一前碰到过这种情况,现在我轻易不敢在with里用a+=1 这种形式了。也不知是不是我不会用with
2014年09月30日 12点09分
-世界-
回复 anheimfb :你如果用with(obj){a+=1}的话,效果每个obj的a值都会分别加1。这时候就不必写成with(obj){obj.a+=1}了
2014年09月30日 13点09分
anheimfb
回复 无限震撼 :你看看我上次发的问题贴吧,有关with的。也许就能明白我的意思了。with(obj){a+=1}是会随实例增加变化的,with(obj){obj.a+=1}的意思好象是只有第一个实例有效果。。 这是连接
https://tieba.baidu.com/p/3282341293?pid=57117210684&cid=0#57117210684
2014年09月30日 13点09分
anheimfb
看到楼下的回复,发现自己对with的用法一开始确实有些不了解,收回对上面有关with的评论
2014年10月01日 04点10分
吧务
level 12
blovestorm
LZ不妨说说你的需求。
可能实现方式不够理想。
2014年09月30日 16点09分
5
level 8
anheimfb
楼主
恩 我也觉得可能是思路走错方向了 最近在模仿dnf那种横版pk游戏,
我写了
1,一个移动控制的 script,
2,一个添加了z轴和重力的script,
3,接下来就是攻击判定。攻击之后会有浮空和后退,还有显示一段时间被击动作的精灵的效果
然后每个人物都会有这两个script和攻击判定
先说这3个部分的顺序:
肯定是要beginstep, 控制script。
step, 攻击判定(或者说攻击效果)。
endstep, z轴和重力的script(也就是一点物理效果)。
解释一下:如果同一帧里,攻击判定在控制script前。就会出现攻击效果还没结束就可以移动 的情况。
如果同一帧里, z轴和重力的script不在最后面, 就会出现后一帧出现上一帧的物 理效果的情况。
然后就是视角的跟随和一些屏幕震动的特效,
这个也要放到最最后执行,要不也会出现迟一帧才跟随和震动的情况。
这里说明一下:视角我另做了个视角的对象,和上3个部分不同,不是放在人物里。
如果我最后添加视角的对象,然后把代码放到endstep里,也可以实现视角代码最后执行。
这样就可以正好解决我现在的问题了,
但是以后我可能会多加一些功能进去,到时可能就需要不止这4个部分了。
2014年10月01日 00点10分
6
anheimfb
@blovestorm
2014年10月01日 00点10分
anheimfb
如果有需要我可以把我的exe文件传一下
2014年10月01日 00点10分
anheimfb
把思路写了一遍之后,突然感觉也许我可以设一个变量beaten,被攻击过程beaten=1,攻击结束之后beaten=0。然后人物只有在beaten=0的情况下移动,也许这样能行?但是细想想还是可能会有1帧的偏差
2014年10月01日 00点10分
anheimfb
补充一下,我的有关攻击的代码是用with的,比如with(obj_body){if (x-other.x>0)hspeed=-5}
2014年10月01日 00点10分
level 8
anheimfb
楼主
这样做有点像汇编语言里的jump
我顺便再问一个问题,攻击人物的时候人物的精灵突然透明了,
经检测不是sprite_index的问题,
不是depth的问题,
攻击效果还在,就是看不到精灵,
而且攻击几十次才会出现这情况,概率很小,怎么回事呢?
@blovestorm
2014年10月01日 02点10分
7
anheimfb
忘了说 也不是透明度的问题 透明度一直是1,没变过
@blovestorm
2014年10月01日 02点10分
blovestorm
回复 anheimfb :其他实例都删除,只剩下攻击人物实例试试看
2014年10月01日 03点10分
anheimfb
回复 blovestorm :额 试了,但是要看什么?没什么特别的啊
2014年10月01日 03点10分
anheimfb
回复 blovestorm :话说这种情况你想到什么可能的原因了?我猜是不是跳过了被攻击人物的draw事件,怎么跳过的呢?
2014年10月01日 04点10分
level 7
亮透透
你如果确实想划分很多不同的顺序的话,可以专门建立一个控制用的obj,然后在step里面分为很多步骤,每一步都with其他的物体做相应的操作……
2014年10月01日 02点10分
8
anheimfb
恩 这个也许可以解决,帮我看下7楼的另一个问题,那个搞不懂了
2014年10月01日 02点10分
亮透透
回复 anheimfb :7楼这个猜不出来…… 你可以试着在debug里面跟踪一下这个人物obj的状态,看下相关数值什么的……
2014年10月01日 02点10分
anheimfb
回复 亮透透 :哦
2014年10月01日 02点10分
level 8
anheimfb
楼主
我知道,这里的other是指的用with的对象
看这个截图
@blovestorm
2014年10月01日 02点10分
9
blovestorm
other在with里没有任何意义,根本就不是指其他实例。自己调试看看吧。
2014年10月01日 03点10分
anheimfb
回复 blovestorm :我游戏里两个技能都是这样用的,没有用碰撞检测函数,靠的是这种范围判定,里面用了other..
2014年10月01日 03点10分
blovestorm
回复 anheimfb :我认为这个other不仅仅指的是你with所指的对象。你可以测试看看。
2014年10月01日 03点10分
anheimfb
回复 blovestorm :哦,这样吗 到是真没试过,现在只做了两个人物
2014年10月01日 03点10分
level 8
anheimfb
楼主
还是说个朴素的栗子吧,比如with(obj){y+=1}.直接这样写的话,如果有n个obj实例,就会变成y+=n..怎么改好 @blovestorm
2014年10月01日 03点10分
10
blovestorm
不要把with(obj){y+=1}.放到本对象里。放到另一个对象,例如obj_a里面就可以了。
2014年10月01日 03点10分
anheimfb
回复 blovestorm :哦 真的是这样,按照你上次给我讲的帖子,也就是说在别的obj里。比如说with执行到b1的时候,b2,b2的y都没有+1。帖子连接
https://tieba.baidu.com/p/3282341293?pid=57117210684&cid=0#57117210684
2014年10月01日 03点10分
anheimfb
回复 blovestorm :这回,我算是彻底明白了,刚才又加了n个objct_a.y+=1就又变成y+=n了。 原来是这个原因不能把with放到本身的对象里,是和调用with的实例的数量有关系。
2014年10月01日 03点10分
1