这是我的代码:(只是为了让你知道我是一个初学者,我这周才开始,尽管我确实了解其他语言和游戏引擎)
func _on_Area2D_area_entered(area):
get_parent().get_node("Level 1/Area2D/Flag").rotation_degrees += 1
Run Code Online (Sandbox Code Playgroud)
我试图实现的是,玩家游戏对象将查看它是否在旗帜的区域中,如果是,旗帜就会旋转。
我不确定问题出在哪里。我认为它可能在第二行。如果我的设置错误,我在下面提供了屏幕截图。我查看了有关同一主题的其他密切问题,但他们没有回答我的问题。
“玩家”游戏对象是带有包含检测(如果位于二维区域)的脚本的游戏对象。
如果要检查Area2D运行时是否正确定位,请启用“调试”->“可见碰撞形状”。
如果要检查是否_on_Area2D_area_entered正在运行,请添加断点(或使用打印)。
您收到错误了吗?
如果没有Node,此表达式将在运行时导致错误:
get_parent().get_node("Level 1/Area2D/Flag")
Run Code Online (Sandbox Code Playgroud)
如果您希望能够检查,可以使用get_node_or_null和is_instance_valid。
由于您没有提到任何错误,我猜该方法没有运行。
如果该方法未运行,最有可能的罪魁祸首是 - 我猜测给定方法的名称 - 您连接了信号"area_entered"但打算连接"body_entered"信号。
当另一个人进入时,该"area_entered"信号将触发。但我在你的场景树中只看到一个。另一方面,当a (例如,,)进入时,将触发。无论哪种情况,您都会获得作为方法参数输入的内容。Area2DArea2DArea2D"body_entered"PhysicsBody2DStaticBody2DKinematicBody2DRigidBody2DArea2D
可能无法检测到您想要的内容的其他原因包括和Area2D没有交集以及被禁用。collision_layercollision_maskmonitoring
并消除一些可能的误解:
"area_entered"和触发,而不是它们在其中的每一帧。所以不是旋转动画。"body_entered"Area2DPhysicsBody2DArea2Drotation_degrees += 1if body == self:。对于通过搜索到达这里的人,我想链接一个类似的案例:敌人不受子弹影响。还有我对如何设置物理节点的完整解释。
| 归档时间: |
|
| 查看次数: |
3713 次 |
| 最近记录: |