打砖块游戏求助
godot吧
全部回复
仅看楼主
level 8
九智绅士
楼主
我在小球的问题上卡了两天了
第一是小球做为挡板子物体移动时,如果被发射出去,它依然会因为挡板移动而移动,要去掉子节点重新加回来又会出现位置bug,所以这个问题暂时搁置
第二是小球的反弹,我小球是rigibody2d,它会正常发射和消灭砖块,但是他的信号是node类型,我连位置信息都拿不到更别说用向量来做反弹了,默认的bounce方法结果打不开官方文档
我实在是不知道怎么办了,甚至翻了gds的成品代码,因为版本问题我仿都仿不了,所以求助大佬们给一个思路
我是c#4.4.1版本
2025年05月26日 13点05分
1
level 8
九智绅士
楼主
砖块也是rigibody,我记得用staticbody就会没办法接收信号不好像,所以用的rigibody,挡板也是,现在小球就是光滑的直角反弹,很怪异
2025年05月26日 13点05分
2
level 8
mQwQo
呃,小球作为子节点本身就会随着父节点移动而移动,你要独立就改成独立节点。。。至于位置bug,你没说我也不好猜。
至于2,位置信息拿不到。。。呃,你给小球额外写一个脚本,让他碰撞的时候传给你左坐标就拿到位置信息了,记得传全局坐标
2025年05月26日 14点05分
3
九智绅士
好吧我再试试
2025年05月26日 14点05分
九智绅士
我给小球又加了个area2d就能调用参数是node2d的信号了,但是找不到法线😭还是最不到啊,reflect方法还被移除了
2025年05月26日 15点05分
mQwQo
@九智绅士
你要获取哪个向量的法线?
2025年05月26日 15点05分
九智绅士
@mQwQo
有入射向量,想找碰撞位置的法线,但是新版本好像把现成方法删了?
2025年05月26日 15点05分
level 8
九智绅士
楼主
@人类的大敌
老东西快来救一下吧
有入射向量,但是新版本没有现成的获取反射向量的方法了,怎么办怎么办
2025年05月26日 15点05分
4
人类的大敌
哪个版本没有?来个截图……
引擎左上角菜单栏→帮助→搜索帮助→在搜索框里输入reflect→滚动条拉到最底部,看向量类型的方法
2025年05月26日 15点05分
九智绅士
@人类的大敌
4.4.1版c#的
,还能这样看啊
2025年05月26日 15点05分
人类的大敌
@九智绅士
这反而是老版本延续下来的方式,从3时期就能这样看内置方法了(作为老登,因为在贴吧里看了几年,都把这个搜索帮助当常识了)反正我在4.4.1看到了方法,不放截图的话,只能认为在搜索帮助的界面你把右上角的“全部显示”改成了筛选。有入射向量的话,用射线检测就能拿到碰撞位置法线
2025年05月26日 16点05分
九智绅士
@人类的大敌
谢谢,完美解决了
2025年05月27日 02点05分
level 8
九智绅士
楼主
我还发现一个问题,比如rigibody节点,脚本里如果是你自己写的一个方法,参数是node2d,就不能连接信号,但如果用它现成的信号连接(如_on_body_entered),再把方法写进脚本,把参数改成node2d,就可以正常发信号,我很纳闷为什么要这样
2025年05月26日 15点05分
5
mQwQo
因为他提供的参数是node,如果你写node2d,那么就无法保证正确传递参数,因为他只保证是node,无法更进一步保证是node2d。。。大概是这样
2025年05月26日 15点05分
九智绅士
@mQwQo
可是node什么属性都没有,rigibody弄个这参数的信号干啥啊
2025年05月26日 15点05分
mQwQo
@九智绅士
保证只要是个节点就可以传递,而且他这样又不影响你使用,比如你在函数里使用(假设节点名为n)n.position,这是node2d才有的,但是他不会报错,除非一个不具有position的节点被传递进来。。。
2025年05月26日 16点05分
level 11
Dreab
2d节点子节点都是跟随父节点变化的,你要分离就得独立两个节点
对于打砖块这种游戏,小球建议用characterbody配合自计算运动来做,因为rigidbody的物理行为是很难控制的
2025年05月26日 19点05分
6
Dreab
除非你的游戏就是实际的物理模拟,而不是传统打砖块游戏
2025年05月26日 19点05分
level 2
laitao000000
小球 和 挡板 需要作为两个单独的对象添加到场景中。就像2个角色一样。
2025年05月29日 05点05分
7
1