สอนสร้างเอฟเฟกต์พลิกหน้าหนังสือใน JavaFX 

JavaFX สามารถสร้างเอฟเฟกต์พลิกหน้าหนังสือที่เหมือนกับการพลิกหน้ากระดาษจริงได้ แต่ต้องใช้การพัฒนาแบบกำหนดเอง เนื่องจาก JavaFX ไม่มีฟีเจอร์ที่รองรับเอฟเฟกต์นี้โดยตรง เราสามารถสร้างเอฟเฟกต์นี้ได้โดยใช้การรวมกันของการแปลง 2D และ 3D พร้อมกับการสร้างแอนิเมชันและการเรนเดอร์


ขั้นตอนการสร้างเอฟเฟกต์พลิกหน้าหนังสือ

  1. แบ่งหน้าออกเป็นสองส่วน

    • แบ่งหน้าออกเป็น "ซีกซ้าย" และ "ซีกขวา"
    • ใช้ Canvas หรือ ImageView เพื่อแสดงเนื้อหาของแต่ละซีก
  2. ใช้การแปลง 3D

    • ใช้การแปลงแบบ Rotate เพื่อจำลองการเคลื่อนไหวของการพลิก
    • ใช้ PerspectiveCamera ของ JavaFX ร่วมกับการหมุนเพื่อเพิ่มความสมจริงในมุมมอง 3D
  3. เพิ่มแอนิเมชัน

    • ใช้ Timeline หรือ KeyFrame เพื่อสร้างการหมุนที่ค่อยๆ เปลี่ยนแปลง
    • กำหนดแกนและมุมการหมุนอย่างเหมาะสมเพื่อให้ดูเหมือนการพลิกหน้าจริง
  4. เพิ่มเงาในระหว่างการพลิก

    • เพิ่มเอฟเฟกต์ไล่เฉดสี (gradient) หรือวัตถุโปร่งแสงเพื่อสร้างเงา
    • อัปเดตตำแหน่งเงาให้เคลื่อนไหวไปพร้อมกับหน้าที่พลิก
  5. แสดงเนื้อหาหน้าและหลังของกระดาษ

    • ให้ด้านหลังของหน้าที่พลิกแสดงเนื้อหาของหน้าถัดไป
    • ด้านหน้าจะแสดงเนื้อหาของหน้าปัจจุบัน

ตัวอย่างโค้ดพื้นฐาน

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import javafx.util.Duration;

public class BookPageFlip extends Application {
    @Override
    public void start(Stage primaryStage) {
        StackPane root = new StackPane();
        Rectangle leftPage = new Rectangle(200, 300, Color.LIGHTGRAY);
        Rectangle rightPage = new Rectangle(200, 300, Color.WHITE);

        // วางตำแหน่งของหน้าซีกซ้ายและขวา
        leftPage.setTranslateX(-100);
        rightPage.setTranslateX(100);

        // เพิ่มกล้อง 3D
        PerspectiveCamera camera = new PerspectiveCamera();
        Scene scene = new Scene(root, 600, 400, true);
        scene.setCamera(camera);

        // เพิ่มการหมุน 3D สำหรับการพลิก
        Rotate flipRotation = new Rotate(0, Rotate.Y_AXIS);
        rightPage.getTransforms().add(flipRotation);

        // สร้างแอนิเมชันการพลิกหน้า
        Timeline flipAnimation = new Timeline(
            new KeyFrame(Duration.ZERO, e -> flipRotation.setAngle(0)),
            new KeyFrame(Duration.seconds(1), e -> flipRotation.setAngle(-180))
        );
        flipAnimation.setCycleCount(Timeline.INDEFINITE);
        flipAnimation.setAutoReverse(true);

        root.getChildren().addAll(leftPage, rightPage);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Page Flip Effect");
        primaryStage.show();

        flipAnimation.play();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

การปรับปรุงเพิ่มเติม

  • เนื้อหาแบบไดนามิก: ใช้ Canvas หรือ ImageView เพื่อแสดงเนื้อหาจริงของแต่ละหน้า
  • การโต้ตอบ: เพิ่ม event handler เพื่อให้ผู้ใช้สามารถพลิกหน้าได้โดยการลากหรือคลิก
  • การเคลื่อนไหวที่ลื่นไหล: ใช้ interpolator เพื่อให้แอนิเมชันพลิกหน้าดูลื่นไหล
  • โมเดล 3D: หากต้องการความสมจริงมากขึ้น สามารถใช้ไลบรารี 3D ของ JavaFX หรือเครื่องมือภายนอกเช่น Blender

ตัวอย่างนี้เป็นการสาธิตแนวคิดพื้นฐานและสามารถปรับแต่งเพิ่มเติมได้ตามความต้องการของคุณ!

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

จากสมศรี 422R สู่หุ่นยนต๋ในยุค llm