Godot 4中KinematicCollision2D获取Position报错,求适配方案
Godot版本更新导致KinematicCollision2D API报错的解决方案
报错信息:Invalid get index: Position on base: KinematicBody2D
问题场景
跟着Godot 3的教程复刻Breakout游戏,代码和教程完全一致,但因版本更新(如升级到Godot 4.x)导致API过时,触发上述报错。
相关代码片段:
_physics_process函数
if collision != null: if collision.get_collider() == player_container.player: direction = direction.bounce(collision.get_normal()) direction.x = get_x_bounce_direction(collision)
自定义函数get_x_bounce_direction
func get_x_bounce_direction(collision: KinematicCollision2D): var relative_x = collision.position.x - player_container.player.global_position.x var percentage = relative_x / player_container.player_width return (percentage - 0.5) * 2
报错原因
Godot版本升级后,KinematicCollision2D的position属性已被移除,无法直接通过collision.position访问碰撞位置,需要改用官方提供的getter方法。
修复方案
将自定义函数中的collision.position替换为collision.get_contact_position(0)(获取碰撞接触点的位置,更准确),修改后的代码如下:
func get_x_bounce_direction(collision: KinematicCollision2D): var relative_x = collision.get_contact_position(0).x - player_container.player.global_position.x var percentage = relative_x / player_container.player_width return (percentage - 0.5) * 2
补充说明:部分Godot版本中也可以使用collision.get_position()替代,但get_contact_position(0)能精准获取碰撞发生的具体触点位置,更适合Breakout游戏中计算小球反弹方向的场景。
内容的提问来源于stack exchange,提问作者Joshua Baileys
相关产品推荐
相关产品推荐

