Chức năng nới lỏng là gì?


15

Tôi tìm thấy trang web tuyệt vời này để phát triển trò chơi và nó có một danh sách các chức năng nới lỏng:

nhập mô tả hình ảnh ở đây

Mặc dù trang web chứa một mô tả về những gì họ làm, nhưng nó đi qua đầu tôi. Chức năng nới lỏng là gì và chúng được sử dụng để làm gì?

Cập nhật

Tôi đã tìm thấy một ví dụ tốt hơn về chính các chức năng từ mã nguồn của Phaser.io . Các chức năng này đơn giản hơn nhiều so với các câu trả lời ở đây sẽ đề xuất. Họ chỉ lấy một tham số k,. Là một phần của câu trả lời, tôi muốn biết cách sử dụng chúng.


2
Một thuật ngữ quan trọng liên quan là tweening. Xem thêm video này youtube.com/watch?v=Fy0aCDmgnxg nơi bạn có thể thấy tác dụng của chức năng tweening và nới lỏng là rất lớn!
Roy T.

Câu trả lời:


13

Các chức năng dễ dàng được sử dụng để nội suy, thường (nhưng không nhất thiết) trong chuyển động hoạt hình / động học. Nội suy tuyến tính (lerp) là một cái gì đó bạn có thể đã nghe nói đến. Giả sử bạn lerp một khuôn mặt cười từ góc này sang góc khác (theo hình ảnh của bạn). Điều này có nghĩa là mặt cười sẽ di chuyển với vận tốc ổn định từ điểm A đến điểm B. Nếu bạn áp dụng điều này cho chuyển động của chi, nó sẽ trông rất robot và không tự nhiên - các thiết bị truyền động / động cơ mà robot sử dụng, thực hiện theo cách này. Rõ ràng, tay chân con người di chuyển theo một cách rất khác. Và hầu hết các chuyển động mà bạn sẽ thấy trong tự nhiên sẽ có các đường cong chuyển động thú vị, thay vì vận tốc ổn định, không thay đổi được thấy trong phép nội suy tuyến tính.

Nhập nới lỏng. Chuyển động dễ dàng có nghĩa là vận tốc không phải là hằng số. Điều này đạt được là nhìn thực tế hơn. Quan sát mọi người, quan sát các loài động vật khác nhau, xem thực vật uốn mình trong gió hoặc thậm chí cách mưa rơi thay đổi hướng trong một ngày đầy gió. Quan sát vận tốc của một quả bóng khi bạn ném nó lên không trung và quay trở lại lần nữa. Xem chuyển động của một dây đàn guitar khi bạn gảy nó. Mỗi loại chuyển động này có một đường cong khác nhau mô tả vận tốc.

Tôi khuyên bạn nên chơi với GSAP trực tuyến của GreenSock để cảm nhận về những loại đường cong nới lỏng khác nhau tạo ra về mặt chuyển động. Đó là một trong những điều cần có thời gian và thực hành để ánh xạ một đường cong có tên cụ thể theo loại chuyển động bạn tưởng tượng. Nhưng một khi bạn đã nắm được những điều cơ bản, bạn sẽ có rất nhiều niềm vui.

PS Như tôi đã nói, nới lỏng không chỉ được sử dụng cho hoạt hình. Nó có thể được sử dụng để quét âm thanh, để thực hiện chuyển động của xương ở mức logic / mô hình hoặc bất cứ điều gì khác mà bạn có thể nghĩ về điều đó có thể cần sự thay đổi trơn tru cụ thể theo thời gian.


1
btw Easing là slide thứ hai trong liên kết GreenSock. Sử dụng menu thả xuống trên slide để kiểm tra các chức năng nới lỏng khác nhau.
jhocking

8

Hàm nới lỏng cho phép bạn nội suy các giá trị từ giá trị này sang giá trị khác trong một khoảng nhất định bằng cách sử dụng một thứ gọi là "hàm nới lỏng". Đây là các hàm được thiết kế để lấy một giá trị và tại bất kỳ điểm nào trong khoảng thời gian, xuất giá trị tại một thời điểm nhất định.

Điều này có thể được giải thích tốt nhất bằng cách xem một đoạn mã:

// simple linear tweening - no easing, no acceleration


Math.linearTween = function (t, b, c, d) {
    return c*t/d + b;
};

@t là thời gian hiện tại (hoặc vị trí) của tween. Đây có thể là giây hoặc khung, bước, giây, ms, bất cứ điều gì - miễn là đơn vị giống như được sử dụng trong tổng thời gian

@b là giá trị bắt đầu của tài sản.

@c là sự thay đổi giữa giá trị đầu và đích của tài sản.

@d là tổng thời gian của tween.

Cảm ơn, http://upshots.org/ilitiescript/jsas-under Hiểu-ease

Đây là định nghĩa của một chức năng nới lỏng tuyến tính. Vẽ đồ thị này theo thời gian theo 't' chúng ta có một đồ thị tuyến tính đơn thuần.

Được, tuyệt đấy. Chúng ta có thể sử dụng chúng để làm gì?

Bất cứ khi nào bạn có một khởi đầu và kết thúc trong tâm trí và muốn làm động chúng, bạn có thể sử dụng "chức năng tween" hoặc "nới lỏng".

Ví dụ: đây là một GIF tôi vừa chụp Angry Birds:

nhập mô tả hình ảnh ở đây

Chú ý menu trượt ra đến điểm trên màn hình, nhưng nó dừng chậm? Điều này là do một chức năng nới lỏng mà dễ dàng vào vị trí. Bạn có thể thấy những thứ đó trên web. Nếu đây là một sự dễ dàng tuyến tính, nó sẽ giống nhau trong suốt.

Âm nhạc?

Chắc chắn rồi! Nếu chúng tôi lấy giá trị của giá trị nhạc phim hiện tại của chúng tôi và nội suy nó giữa đó và 0 trên tổng số t nói, 1 giây thì âm lượng của chúng tôi sẽ dần dần biến mất trong khoảng thời gian một giây.

Đối tượng giới hạn

Ngoài ra còn có các chức năng cho phép nảy (xem: http://easings.net/#easeOutBounce ) có thể tạo ra các hiệu ứng như thế này trên một sprite mà không cần bất kỳ hệ thống vật lý nào:

nhập mô tả hình ảnh ở đây

Bạn có thể tìm thêm thông tin trên web bằng cách tìm kiếm tweening.


@tieTYT Tôi đã thêm một lời giải thích cho bạn. Những loại ví dụ sử dụng mà bạn đang tìm kiếm?
Vaughan Hilts

Xem cập nhật của tôi. Nếu bạn có thể giải thích cách sử dụng các hàm chỉ lấy klàm tham số, tôi sẽ chấp nhận câu trả lời này. Cảm ơn
Daniel Kaplan

Các hàm này không chỉ mất k. Các hàm bắt đầu sử dụng các hàm này sau đó được truyền lại cho các hàm phức tạp hơn. Bạn chỉ quan tâm đến việc thực hiện phasers?
Vaughan Hilts

Có vẻ như tất cả họ đưa ktôi. Bạn đang nhìn thấy ở đâu khác?
Daniel Kaplan

Tất cả các chức năng nới lỏng (ngoại trừ có thể là kiểu lắc 'lắc') yêu cầu tối thiểu ba tham số. Thời gian (thường là tỷ lệ giữa 0 và 1), giá trị bắt đầu và giá trị kết thúc. Đôi khi thời gian được chia thành hai tham số như thời gian hiện tại và thời lượng dễ dàng. Nếu giá trị bắt đầu và kết thúc đã được xác định (tùy thuộc vào hệ thống / thư viện nới lỏng của bạn), bạn có thể chỉ cần vượt qua thời gian, nhưng bản thân tôi không quen thuộc. Ví dụ: nếu tôi muốn giá trị trong khoảng từ 10 đến 30 ở mức 75% (3 giây trở nên dễ dàng trong 4 giây), tôi cần vượt qua 10 đến 30 và 75% (thời gian / thời gian).
Doug.McFarlane

2

Các hàm dễ dàng phục vụ để thay đổi một giá trị trong một khoảng thời gian, từ số bắt đầu sang số kết thúc.

Bạn sử dụng giá trị đó để làm động một thuộc tính của một đối tượng trong trò chơi của bạn, chẳng hạn như vị trí, góc quay, tỷ lệ, thay đổi màu sắc và các thuộc tính khác sử dụng một giá trị.

Các chức năng nới lỏng khác nhau xác định "cảm giác" của hình ảnh động hoặc cách giá trị thay đổi theo thời gian.

Trên trang web bạn đã đăng, biểu đồ hiển thị giá trị thay đổi theo thời gian từ lúc bắt đầu đến khi kết thúc, vì vậy điều đó không có nghĩa là đối tượng bạn đang hoạt hình sẽ đi theo đường đi của quả bóng trong biểu đồ.


Oh, vậy bây giờ bạn đã thay đổi câu trả lời của bạn để phản ánh của tôi! Rất tốt để thấy bạn đang học.
Kỹ sư

Câu trả lời này có vẻ giống như một tài liệu tham khảo hơn là một hướng dẫn. Tôi cần các ví dụ để hiểu rõ hơn
Daniel Kaplan

@NickWiggill không, tôi thậm chí không thấy câu trả lời của bạn cho đến bây giờ.
ino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.