3D_in_2D.gd 920 B

12345678910111213141516171819202122232425262728293031323334353637
  1. extends Node2D
  2. # Member variables
  3. var viewport = null
  4. var sprite = null
  5. var viewport_sprite = null
  6. # variables for the sprite animation
  7. const MAX_FRAME_FOR_SPRITE = 4
  8. const FRAME_SWITCH_TIME = 0.2
  9. var frame_switch_timer = 0
  10. func _ready():
  11. viewport = get_node("Viewport")
  12. sprite = get_node("Sprite")
  13. viewport_sprite = get_node("Viewport_Sprite")
  14. # Assign the sprite's texture to the viewport texture
  15. viewport.set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME)
  16. # Let two frames pass to make sure the screen was captured
  17. yield(get_tree(), "idle_frame")
  18. yield(get_tree(), "idle_frame")
  19. viewport_sprite.texture = viewport.get_texture()
  20. set_process(true)
  21. # Simple frame based animation
  22. func _process(delta):
  23. frame_switch_timer += delta
  24. if frame_switch_timer >= FRAME_SWITCH_TIME:
  25. frame_switch_timer -= FRAME_SWITCH_TIME
  26. sprite.frame += 1
  27. if sprite.frame > MAX_FRAME_FOR_SPRITE:
  28. sprite.frame = 0