반응형

트윈을 사용해 캐릭터를 이동해 보자.

 

씬에 스프라이트를 생성하고 스크립트를 추가한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using Godot;
 
public partial class control : Sprite2D
{
    // Called when the node enters the scene tree for the first time.
    public override void _Ready()
    {
    }
 
    // Called every frame. 'delta' is the elapsed time since the previous frame.
    public override void _Process(double delta)
    {
        // IsMouseButtonPressed()는 짧게 한 번 클릭해도 여러번 True를 반환 할 수 있다.
        // 정확히 한 번만 호출되어야 한다면 Input.IsActionJustPressed()를 사용하자.
        if (Input.IsMouseButtonPressed(MouseButton.Left))
        {
            Tween tween = CreateTween().SetParallel(true);
            // SetParallel(true) 다음에 추가되는 트위너들은 모두 동시에 실행된다.
                        
            tween.TweenProperty(this"rotation_degrees"903.0f).AsRelative();
            // 클릭 한 번에 IsMouseButtonPressed()가 여러번 true를 반환하기 때문에
            // 90도 이상 회전하는 것처럼 보일 수 있다.
            // Asrelative()가 없다면 월드 좌표계 90도로 회전하고 더 이상 회전하지 않는다.
 
            tween.TweenProperty(this"position", GetGlobalMousePosition(),
                3.0f).SetTrans(Tween.TransitionType.Elastic).SetEase(Tween.EaseType.Out);
            // Godot Object 인수로 this 대신 GetNode("/root/Sprite2D") 또는
            // GetNode("../Sprite2D")를 넣을 수 있다.
 
            //tween.TweenCallback(Callable.From(()=>GD.Print("Finished."))).SetDelay(1.0f);
            tween.TweenCallback(Callable.From(Lastcall)).SetDelay(3.0f);
            // 임의의 함수(Lastcall)를 호출한다. SetDelay()로 트위너의 동작이 모두 끝난 후
            // 호출되도록 할 수 있다.
        }
    }
 
    public void Lastcall()
    {
        GD.Print("Finished.");
    }
}
 

 

 

Tween을 사용해 이동하는 코드를 작성한다.

 

 

 

※ 참고

Tween

 

반응형
Posted by J-sean
:
반응형

Tweening을 적용해 보자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import pygame
import pytweening
 
pygame.init()
pygame.display.set_caption("Super fun game development")
screen = pygame.display.set_mode((640480))
clock = pygame.time.Clock()
running = True
 
player = pygame.image.load("player.png").convert()
player.set_colorkey(player.get_at((00)))
player_size = (player.get_width()*1.5, player.get_height()*1.5)
player = pygame.transform.scale(player, player_size)
player_pos = player.get_rect()
player_pos.center = (screen.get_width()/2-200, screen.get_height()/2)
 
= 0
# pytweening 인수
 
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            running = False
    
    n += 0.005
    if n > 1:
        n = 0
 
    dx = int(pytweening.easeInOutBounce(n) * 400)
    #dx = int(pytweening.easeInOutElastic(n) * 400)
    # 최종적으로 400 픽셀 이동. (0 <= n <= 1)
        
    screen.fill("black")
    screen.blit(player, (player_pos.left+dx, player_pos.top))
        
    pygame.display.flip()
    clock.tick(60)
 
pygame.quit()
 

 

 

easeInOutBounce

 

easeInOutElastic

 

반응형
Posted by J-sean
: