查看: 249|回复: 2

那种需要重复执行但是每次执行后都需要暂停的逻辑怎么写

[复制链接]

3

主题

3

帖子

25

积分

新手上路

Rank: 1

积分
25
发表于 2021-2-14 21:40:24 | 显示全部楼层 |阅读模式
  1. func _process(delta):
  2.         #set_process(false)
  3.         #yield(get_tree(), "idle_frame")
  4.         print("start")
  5.         set_process(false)
  6.         yield(get_tree().create_timer(2),"timeout")
  7.         print("2s left")
  8.         set_process(true)
复制代码
我知道timer可以做,但是我需要做那种在process里面的。
这上面的代码,我觉得是存在隐藏问题的。
比如说,我有一个敌人,如果玩家在敌人的攻击范围area2d内,然后更新敌人的状态从巡逻变成攻击,然后就是在process里
if action=="攻击":
  攻击()
  暂停2秒
//之后,如果玩家还是在攻击范围内,继续重复执行上面的代码攻击 然后暂停2秒。
我知道别的编程语言有sleep()可以用,可以暂停代码运行一段时间,然后继续,不知道godot要怎么写。应该有比上面那种更好的写法。
yield(get_tree().create_timer(2.0),"timeout)
也能暂停,但是是一次性的计时器,结束以后,process下一次循环的时候就不运行暂停代码了。


回复

使用道具 举报

9

主题

25

帖子

128

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
128
发表于 2021-2-20 14:45:46 | 显示全部楼层
方法很多,你可以将所有节点添加到一个 组,每个节点使用后,process 就设置为 false 状态,然后下一回合就调用组中所有的节点,重新给他打开
回复

使用道具 举报

1

主题

2

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2021-4-26 13:39:30 | 显示全部楼层
计时器+布尔值判断
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Godot中文社区

GMT+8, 2021-5-11 16:05 , Processed in 0.143066 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2020, Godoter.top

快速回复 返回顶部 返回列表