• Godot Best practices


    Get direction Vector

    ## forward
    transform.x
    # 手动计算, 即:将x轴(1, 0)旋转rad度数后的向量
    var rad = node.rotation
    var forward = Vector2(cos(rad), sin(rad))
    # 使用 Vector2.rotated(angle) 方法  
    # 该方法得到指定向量按angle旋转后的向量, 所以
    var forward = Vector2.right.rotated(rad)
    
    ## up, 由于 godot 中正y是朝下,通常需要取负
    -transform.y
    # 手动计算, 即:将y轴(0, 1)旋转rad度数后的向量
    var up = -Vector2(-sin(rad), cos(rad))
    # 或者
    var up = Vector2(sin(rad), -cos(rad))
    # or
    var up = Vector2.up.rotated(rad)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    Await and Unity Style Coroutine

    func coroutine(on_update: Callable, duration: float = 1):
    	var elapse_time = 0
    	while elapse_time < 1:
    		elapse_time += get_process_delta_time() / duration
    		on_update.call(elapse_time)
    		await get_tree().process_frame # 等待下一帧
    
    # normal call - 后续逻辑会在 while loop 执行一次后立刻执行
    coroutine(func(): print("do coroutine"))
    # test debug
    start
    do coroutine
    end
    do coroutine
    do coroutine
    ...
    # await call - 后续逻辑会等到 coroutine 执行完成之后才会执行
    await coroutine(func(): print("do coroutine"))
    # test debug
    start
    do coroutine
    do coroutine
    ...
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    Mouse input coordinates

    func _input(event):
    	if event is InputEventMouseButton:
    	# 坐标为 viewport coordinates
    	print("Mouse Click: ", event.position)
    	# 和上面一样也是 viewport coordinates
    	print("Mouse Click: ", get_viewport().get_mouse_position())
    	# 坐标为 CanvasLayer coordinates 或者说是场景的世界坐标
    	print("Mouse Click: ", get_global_mouse_position())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    FreeRTOS移植-教你修改portable(S3C2440、ARM9、gcc)
    计数排序法
    两种方式实现websocket获取数据库查询进度
    博客积分规则
    Springboot疫苗接种管理系统毕业设计-附源码191451
    信息检索(49):Learning Passage Impacts for Inverted Indexes
    Django+Vue中文件的上传和下载
    学生管理系统
    Java泛型:类型擦除
    二维码在区域巡查中的应用:隐患上报、巡逻巡更、管线巡查
  • 原文地址:https://blog.csdn.net/kenight/article/details/134220693