关于在godot游戏引擎的里实现非阻塞式延迟运行代码(类似wait函数)

func wait(sec):
	var frame = sec * Engine.get_iterations_per_second()
	if Engine.get_idle_frames() % int(frame) == 0:
		return true
	else:
		return false
func attack(pos_to):
	var zidan = ZiDan.instance()
	zidan.position = zi
	var dir = zidan.position.direction_to(pos_to)
	add_child(zidan)
	zidan.look_at(target)
	zidan.set_action("attack_player",dir)
	times += 1 
	print(times)
	pass

func _process(delta):
	print(Engine.get_idle_frames())
	if wait(0.5):
		print("延迟1秒执行")
		attack(target)

原理很简单,游戏引擎每秒默认60fps,那么比如说你要在游戏对象的主循环生命周期进行延迟处理逻辑的话,判断总帧数就行了

2秒就是2*60=120帧 用总帧数除余固定帧数是否为0判断是不是第几秒. 你可以把延迟函数放到if函数的下一级运算.

这样就实现了运行逻辑时既能产生间隔的运行子逻辑,又不影响上层主循环, 因为要是用计时器或者其他协成或者线程这种技术,搞不好就容易让游戏对象看起卡卡的, 影响游戏体验.

猜你喜欢

转载自blog.csdn.net/weixin_43539313/article/details/127174647