好吧,被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是检测已经跳跃了多少次,但是第二次跟这个没关系
问的比较多,是因为确实菜到了极点,还是希望有个比较详细的说明