gamemaker吧 关注:13,652贴子:95,200
  • 3回复贴,共1

新人关于物体的碰撞实现

取消只看楼主收藏回复

用place(x,y,obj)好还是用instance_place(x,y,obj)好
我第一次用place,效果不错,但是太慢了,且我碰到墙后就无法做其他的运动了
第二次试了试instance,结果穿墙了,有时候又不穿墙

两次代码如下。
本来录了屏,但是贴吧放不出来。
疑问:1.为什么用二方案会穿墙。
2.为什么把x+spd*h换成x后,player就一头扎进墙里出不来了
3.我没有对wall(黑块)做操作。平常你们都这么写吗吗,或者说我写的效率太低下。


IP属地:江西1楼2024-09-21 23:23回复
    好吧,被8u狠狠得拷打了
    感谢火柴哥给我推荐的教程,确实比我看文档舒服多了
    之前我是只看了碰撞,所以说问题没有解决。但现在看来,应该从头重写框架。
    模板与我的代码对比:
    1.我的想法是:利用一个表示方向的单位向量h,v做v正负号的调整,按了不同的键,hv的值不一样。但可能我写的时候比较迷糊,打错了好多东西
    2.由于不知道内置hspeed,vspeed这东西,就自定义了水平数值despd_x,spd_y。这两个我不知道效果是否一致,测试时看不出来,除了我要写x+=spd_x
    3.我想说同时按了左右键不动,用了一个else if,为什么他用(D - U)来直接解决?我的猜想:按下d,返回一个值给
    D,按下u,返回一个同样的值给U,这样能保证结果只有-1,0,1三种。
    4.将各种数据放在创建事件,一目了然,我认为这是个好习惯。目前我已知的好的规划习惯有:绘制里只放draw系列的代码,将不同功能的代码放不同的代码框,将全局的变量放入world,还有什么比较好的习惯请求补充一下
    5.固体的局限性是不能处理小于相对速度的距离,所以他用了place_free来解决。我没看懂这个函数的作用。里面(x + hspeed, y + vspeed + gravity)为什么要加上速度依旧不理解,被一笔带过了。问题:(x,y)到底指什么?加上速度,是否是因为让他的固体检测范围减少一个相对速度的大小,所以能让他看上去刚好与贴图没有缝隙。搞懂了place_free我就差不多搞懂这个碰撞了的代码了
    6.这个二段跳的实现逻辑,从else if(!jump)到jump+=1这看不明白。我的理解是:jump=0是指可以跳,此时跳跃速度为jump[1],如果不能跳,则jump=1。这里不应该是!isfirstjump吗,但这么改之后角色实现了无限跳。
    后面,_s的返回值只有0,1,都小于2,这句因该是废话,但是删掉后就会一直自动跳跃。并且isfristjump到底是怎么检测这是不是第一次跳跃的?我以为jump是检测已经跳跃了多少次,但是第二次跟这个没关系


    问的比较多,是因为确实菜到了极点,还是希望有个比较详细的说明


    IP属地:江西5楼2024-10-01 16:22
    收起回复
      此贴还没完,等我周末拿到电脑,我重新把八向移动,以及二段跳重写一遍,我想到了一个二段跳的办法


      IP属地:江西来自Android客户端7楼2024-10-09 13:07
      回复
        完美实现了,此贴终结


        IP属地:江西8楼2024-10-20 09:08
        回复