godot - Godot 3.3.2:刷新查询时无法更改此状态。使用 call_deferred() 或 set_deferred() 来改变监控状态(错误)
问题描述
我正在开发的游戏,我的角色可以杀死敌人,但是当敌人死亡时,他们不会丢失碰撞框,当我运行游戏并杀死敌人时,标题中出现错误。
整个敌人代码粘贴在下面:
extends KinematicBody2D
const GRAVITY = 10
const SPEED = 30
const FLOOR = Vector2(0, -1)
var velocity = Vector2()
var direction = 1
var is_dead = false
func _ready():
pass
func dead():
is_dead = true
velocity = Vector2(0, 0)
$AnimatedSprite.play("dead")
$CollisionShape2D.disabled = true
$Timer.start()
func _physics_process(delta):
if is_dead == false:
velocity.x = SPEED * direction
if direction == 1:
$AnimatedSprite.flip_h = false
else:
$AnimatedSprite.flip_h = true
$AnimatedSprite.play("walk")
velocity.y += GRAVITY
velocity = move_and_slide(velocity, FLOOR)
if is_on_wall():
direction = direction * -1
$RayCast2D.position.x *= -1
if $RayCast2D.is_colliding() == false:
direction = direction * -1
$RayCast2D.position.x *= -1
func _on_Timer_timeout():
queue_free()
如果有人能解决这个问题,那就太好了,因为我想不通。
解决方案
据我所知※,解决方案是使用set_deferred
禁用碰撞形状:
$CollisionShape2D.set_deferred("disabled", true)
※:问题标题中的错误只会发生在disabled
、monitorable
、mode
或的变化中one_way_collision
。而且我只disabled
在代码中看到。编辑:对于我在网上找到的内容,它也可能在冲突期间添加或删除节点。
推荐阅读
- sql - 如何连接具有多个关系的 2 个表
- kotlin - 如何使用反射动态转换数组以匹配函数的参数?
- html - 纯 CSS scroll-snap 仅适用于 body 作为容器
- python - 当我将 csv 文件加载到 jupyter notebook(使用 python 和 pandas)时,为什么列未对齐?
- php - 升级到 PHP 7 后会话不工作
- javascript - 在悬停css上定位多个元素
- node.js - 在 React-native 应用程序中使用 Axios 访问此资源错误消息需要完全身份验证
- xcode - 在 AppleScript 中运行带有参数的命令行工具
- java - Java:输入自动格式时,Selenium Webdriver 无法 sendKeys()
- angular6 - 将 nativescript 添加到 Angular 6 项目引发无法找到项目错误的构建目标