Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Windows memiliki pena digital yang didukung lama yang memungkinkan pengguna berinteraksi dengan perangkat mereka secara alami, langsung dan untuk mengekspresikan kreativitas mereka melalui pengalaman menulis dan menggambar yang kaya menggunakan tinta digital.
Dengan Windows 11, kemampuan baru sedang diperkenalkan yang membuat pengalaman pena digital semakin alami dan menarik: Saat menggunakan pena yang mendukung "umpan balik haptik", pengguna benar-benar dapat merasakan pena mereka berinteraksi secara taktil dengan antarmuka pengguna (UI) aplikasi.
Nota
Jika mengacu pada fitur baru ini, "haptic" digunakan di seluruh API pengembang dan dokumentasi terkait, sementara "taktil" adalah nama yang mudah dipaparkan kepada pengguna untuk mengatur preferensi umpan balik di Pengaturan Windows.
Pengalaman umpan balik haptic yang didukung dalam Windows 11 mencakup umpan balik tulisan tangan dan umpan balik interaksi:
- Umpan balik penintaan mensimulasikan nuansa berbagai jenis alat tulis atau gambar (seperti pena, penanda, pensil, penyorot, dan sebagainya) melalui getaran berkelanjutan saat pena bersentuhan dengan layar. Secara default, platform Windows Ink mendukung umpan balik haptik untuk semua alat menggambar (topik ini mencakup cara memberikan solusi penintaan kustom di luar yang didukung oleh Windows Tinta).
- Umpan balik interaksi, di sisi lain, adalah umpan balik langsung berdasarkan tindakan pengguna utama seperti mengarahkan mouse ke atas atau mengklik tombol, menanggapi penyelesaian tindakan, atau untuk menarik perhatian pengguna.
Biasanya, lima langkah diperlukan untuk sepenuhnya mendukung umpan balik haptik:
- Mendeteksi input pena.
- Tentukan apakah pena dan perangkat saat ini mendukung umpan balik haptik dan, jika demikian, fitur umpan balik haptik apa yang didukungnya.
- Tentukan sinyal umpan balik haptik untuk dikirim.
- Kirim umpan balik haptik.
- Menghentikan umpan balik haptik
Mendeteksi input pena
Untuk mendeteksi dan mengisolasi input pena, Anda harus terlebih dahulu mendaftar untuk peristiwa PointerEntered lalu memeriksa apakah PointerDeviceType adalah pena.
Kode berikut menunjukkan cara memeriksa jenis perangkat penunjuk dalam peristiwa PointerEntered. Untuk contoh ini, jika input bukan dari pena, kami hanya mengembalikan dari penanganan aktivitas. Jika tidak, kami memeriksa kemampuan pena dan mengonfigurasi umpan balik haptik.
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
...
// If the current Pointer device is not a pen, exit.
if (e.Pointer.PointerDeviceType != PointerDeviceType.Pen)
{
return;
}
...
}
Menentukan dukungan untuk umpan balik haptik
Tidak semua pena dan digitizer mendukung umpan balik haptik, dan pena yang melakukannya tidak harus mendukung semua fitur umpan balik haptik yang dijelaskan dalam topik ini. Dengan demikian, penting untuk secara terprogram mengonfirmasi fitur mana yang didukung oleh pena aktif.
Dalam kelanjutan dari contoh sebelumnya, kami menunjukkan cara memeriksa apakah pena aktif mendukung umpan balik haptik.
Kami pertama kali mencoba mengambil objek PenDevice dari PointerId saat ini. Jika PenDevice tidak dapat diperoleh, kami hanya menghentikan penanganan peristiwa.
Jika PenDevice diperoleh, kami menguji apakah perangkat tersebut mendukung properti SimpleHapticsController. Jika tidak, kita hanya kembali dari pengendali acara.
// Attempt to retrieve the PenDevice from the current PointerId.
penDevice = PenDevice.GetFromPointerId(e.Pointer.PointerId);
// If a PenDevice cannot be retrieved based on the PointerId, it does not support
// advanced pen features, such as haptic feedback.
if (penDevice == null)
{
return;
}
// Check to see if the current PenDevice supports haptic feedback by seeing if it
// has a SimpleHapticsController.
hapticsController = penDevice.SimpleHapticsController;
if (hapticsController == null)
{
return;
}
SimpleHapticsController yang diambil dalam contoh sebelumnya digunakan dalam contoh berikutnya untuk mengkueri kemampuan haptik dan untuk mengirim/menghentikan umpan balik haptik.
Nota
Jika Anda membangun aplikasi dengan Windows App SDK, Anda dapat menggunakan interop PenDevice (PenDeviceInterop.FromPointerPoint(PointerPoint)) untuk mengakses sistem PenDevice.
private void InputObserver_PointerEntered(PointerInputObserver sender, PointerEventArgs args)
{
var penDevice = PenDeviceInterop.PenDeviceFromPointerPoint(args.CurrentPoint);
}
Bagian berikut menjelaskan fitur umpan balik yang harus didukung pena haptic, serta yang bersifat opsional. Jenis umpan balik haptik yang diperlukan biasanya dapat digunakan sebagai alternatif alih-alih fitur opsional.
Bentuk gelombang penintaan
Gelombang tinta berjalan terus-menerus saat pena bersentuhan dengan layar, dan berusaha mensimulasikan rasa berbagai alat tulis dan gambar.
| Feature | Deskripsi | Diperlukan / Opsional |
|---|---|---|
| Bentuk gelombang InkContinous | Mensimulasikan nuansa penintaan dengan pena titik bola fisik. Ini adalah alternatif default ketika gelombang penintaan tidak didukung oleh pena haptik. | Required |
| Bentuk gelombang BrushContinuous | Sinyal haptik berkelanjutan saat pengguna memilih sikat sebagai alat penintaan. | Fakultatif |
| Bentuk gelombang ChiselMarkerContinuous | Sinyal haptik berkelanjutan saat pengguna memilih penanda/penyorot pahat sebagai alat penintaan. | Fakultatif |
| Bentuk gelombang EraserContinuous | Sinyal haptik berkelanjutan saat pengguna memilih penghapus sebagai alat penintaan. | Fakultatif |
| Bentuk gelombang GalaxyContinuous (dokumentasi HID dan panduan implementasi mengacu pada bentuk gelombang ini sebagai SparkleContinuous) |
Sinyal haptik berkelanjutan untuk alat tinta khusus, seperti kuas multi-warna. | Fakultatif |
| Bentuk gelombang MarkerContinuous | Sinyal haptik berkelanjutan saat pengguna memilih penanda sebagai alat penintaan. | Fakultatif |
| Bentuk gelombang PencilContinuous | Sinyal haptik berkelanjutan saat pengguna memilih pensil sebagai alat penintaan. | Fakultatif |
Bentuk gelombang interaksi
Gelombang interaksi biasanya singkat (pengecualian dicatat dalam tabel berikut), umpan balik langsung yang dihasilkan sesuai permintaan untuk mengonfirmasi aksi utama seperti menghover atau mengklik tombol, menanggapi penyelesaian aksi, atau menarik perhatian pengguna.
| Feature | Deskripsi | Diperlukan / Opsional |
|---|---|---|
| Klik bentuk gelombang | Umpan balik suara singkat "klik". Ini adalah cadangan bawaan bila gelombang interaksi yang dipilih oleh aplikasi tidak kompatibel dengan pena haptic. | Required |
| Bentuk gelombang kesalahan | Sinyal kuat untuk memperingatkan pengguna bahwa tindakan gagal, atau telah terjadi kesalahan. | Fakultatif |
| Bentuk gelombang hover | Menunjukkan bahwa pengguna telah mulai mengarahkan kursor ke elemen UI interaktif. | Fakultatif |
| Tekan untuk melihat bentuk gelombang | Menunjukkan kapan pengguna menekan elemen UI interaktif dalam tindakan bertahap (lihat Rilis). | Fakultatif |
| Bentuk gelombang rilis | Menunjukkan kapan pengguna melepaskan elemen UI interaktif dalam aksi bertahap (lihat Tekan). | Fakultatif |
| Bentuk gelombang keberhasilan | Sinyal kuat untuk memperingatkan pengguna bahwa tindakan berhasil. | Fakultatif |
| Bentuk gelombang BuzzContinuous | Sensasi berdengung berkelanjutan. | Fakultatif |
| Bentuk gelombang RumbleContinuous | Sensasi gemuruh berkelanjutan. | Fakultatif |
Kustomisasi umpan balik haptik
Beberapa pena haptik dapat mendukung kustomisasi berikut.
| Feature | Deskripsi | Diperlukan / Opsional |
|---|---|---|
| Intensitas | Mengatur intensitas sinyal haptik. | Fakultatif |
| Jumlah Putar | Mengulangi sinyal haptik beberapa kali. | Fakultatif |
| Interval Jeda Pemutaran Ulang | Mengatur waktu antara setiap pemutaran berulang sinyal haptik. | Fakultatif |
| Durasi Putar | Mengatur interval waktu saat sinyal haptik diputar. | Fakultatif |
Periksa dukungan pengaturan kustom
Untuk memeriksa dukungan Intensitas, Jumlah Putar, Jeda Pemutaran Ulang, dan Durasi Pemutaran, gunakan properti SimpleHapticsController berikut:
Kirim dan hentikan umpan balik haptik terkait tinta
Gunakan metode SendHapticFeedback dari objek SimpleHapticsController untuk meneruskan bentuk gelombang penintaan ke pena pengguna. Metode ini mendukung passing dalam bentuk gelombang atau bentuk gelombang dengan nilai intensitas yang disesuaikan (lihat Menyesuaikan umpan balik haptik).
Panggil SendHapticFeedback dan masukkan gelombang haptic inking untuk mengonfigurasi agar pena mulai memainkan gelombang tersebut segera setelah ujung pena menyentuh permukaan layar. Bentuk gelombang akan terus diputar sampai pena diangkat atau StopFeedback dipanggil, mana yang terjadi terlebih dahulu. Sebaiknya lakukan ini di penanganan aktivitas PointerEntered untuk elemen tempat Anda ingin haptics dimainkan. Misalnya, aplikasi dengan implementasi penintaan kustom akan melakukan ini dalam metode "PointerEntered" pada kanvas penintaannya.
Untuk mendapatkan gelombang tinta yang diinginkan, Anda harus mengulangi proses pada koleksi SupportedFeedback dari SimpleHapticsController, memastikan bahwa ia didukung oleh pena aktif.
Jika tidak didukung, Anda dapat memilih untuk tidak memutar apa pun sama sekali, atau kembali ke bentuk gelombang InkContinuous karena dijamin didukung.
Dalam contoh berikut, kami mencoba mengirim bentuk gelombang BrushContinuous (tetapi kembali ke InkContinuous jika BrushContinuous tidak didukung).
SimpleHapticsControllerFeedback currentWaveform;
// Attempt to set the currentWaveform to BrushContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.BrushContinuous)
{
currentWaveform = waveform;
}
}
// If currentWaveform is null, it was not in the SupportedFeedback collection, so instead set
// the waveform to InkContinuous.
if (currentWaveform == null)
{
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.InkContinuous)
{
currentWaveform = waveform;
}
}
}
// Send the currentWaveform
hapticsController.SendHapticFeedback(currentWaveform);
Penting bagi Anda untuk juga mematikan umpan balik haptik ketika pointer terkait meninggalkan elemen yang Anda daftarkan untuk umpan balik haptik. Jika tidak, bentuk gelombang akan terus mencoba untuk bermain di pena aktif.
Nota
Beberapa pena dapat secara opsional menghentikan efek haptik ketika pena keluar dari jangkauan layar. Namun, tidak diperlukan semua pena untuk melakukan ini, sehingga aplikasi harus selalu secara eksplisit menghentikan umpan balik haptik seperti yang dijelaskan di sini.
Untuk menghentikan umpan balik haptik pada elemen, mendaftarkan peristiwa PointerExited pada elemen yang sama tempat Anda mendaftarkan handler PointerEntered yang memberikan sinyal haptik. Dalam penangan kejadian keluar tersebut, panggil StopFeedback seperti yang ditunjukkan di sini.
hapticsController.StopFeedback();
Mengirim dan menghentikan umpan balik interaksi
Mengirim umpan balik interaksi sangat mirip dengan mengirim umpan balik pena digital.
Gunakan metode SendHapticFeedback dari objek SimpleHapticsController untuk meneruskan bentuk gelombang interaksi ke pena pengguna. Metode ini mendukung passing dalam bentuk gelombang atau bentuk gelombang dengan nilai intensitas yang disesuaikan (lihat Menyesuaikan umpan balik haptik).
Panggil SendHapticFeedback dan masukkan bentuk gelombang penintaan untuk mengonfigurasi pena agar memainkan bentuk gelombang tersebut secara langsung berdasarkan interaksi tertentu dalam aplikasi Anda (alih-alih saat ujung pena menyentuh layar untuk umpan balik penintaan).
Saat menggunakan salah satu bentuk gelombang Interaksi non-berkelanjutan, tidak perlu melakukan panggilan StopFeedback yang sesuai. Anda masih perlu memanggil StopFeedback untuk bentuk gelombang Interaksi berkelanjutan.
Nota
Mengirim bentuk gelombang interaksi ketika bentuk gelombang penintaan sedang dimainkan akan mengganggu bentuk gelombang penintaan untuk sementara. Gelombang penintaan akan berlanjut ketika gelombang interaksi berhenti.
Untuk mengambil bentuk gelombang interaksi yang diinginkan, Anda harus melakukan iterasi melalui koleksi SupportedFeedback dari SimpleHapticsController, memastikannya didukung oleh pena aktif.
Jika tidak didukung, Anda dapat memilih untuk tidak memutar apa pun sama sekali atau menggunakan kembali bentuk gelombang Click, karena dijamin didukung.
Dalam contoh berikut, kami mencoba mengirimkan gelombang Kesalahan, tetapi akan beralih ke klik jika kesalahan tidak didukung.
SimpleHapticsControllerFeedback currentWaveform;
// Attempt to set the currentWaveform to BrushContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Error)
{
currentWaveform = waveform;
}
}
// If currentWaveform is null, it was not in the SupportedFeedback collection, so instead set
// the waveform to Click.
if (currentWaveform == null)
{
foreach (var waveform in hapticsController.SupportedFeedback)
{
if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click)
{
currentWaveform = waveform;
}
}
}
// Send the currentWaveform.
hapticsController.SendHapticFeedback(currentWaveform);
Menyesuaikan umpan balik haptik
Ada tiga cara untuk menyesuaikan umpan balik haptik. Yang pertama didukung oleh umpan balik Penintaan dan Interaksi, sedangkan yang kedua dan ketiga hanya didukung oleh umpan balik Interaksi.
Sesuaikan intensitas umpan balik relatif terhadap pengaturan intensitas sistem maksimum. Untuk melakukan ini, Anda harus terlebih dahulu memeriksa untuk memastikan bahwa SimpleHapticsController mendukung pengaturan intensitas lalu memanggil SendHapticFeedback dengan nilai yang diinginkan
Intensity.if (hapticsController.IsIntensitySupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click) { double intensity = 0.75; hapticsController.SendHapticFeedback(waveform, intensity); } } }Ulangi sinyal haptik beberapa kali. Untuk melakukan ini, Anda harus terlebih dahulu memeriksa untuk memastikan bahwa SimpleHapticsController mendukung pengaturan intensitas lalu memanggil SendHapticFeedbackForPlayCount dengan nilai hitungan yang diinginkan. Anda juga dapat mengatur intensitas dan interval jeda pemutaran ulang.
Nota
Jika SimpleHapticsController tidak mendukung pengaturan intensitas atau interval jeda pemutaran ulang, nilai yang disediakan akan diabaikan.
if (hapticsController.IsPlayCountSupported && hapticsController.IsIntensitySupported && hapticsController.IsReplayPauseIntervalSupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.Click) { double intensity = 0.75; int playCount = 3; System.TimeSpan pauseDuration = new System.TimeSpan(1000000); hapticsController.SendHapticFeedbackForPlayCount(currentWaveform, intensity, playCount, pauseDuration); } } }Atur durasi sinyal haptik. Untuk melakukan ini, Anda harus terlebih dahulu memeriksa untuk memastikan bahwa SimpleHapticsController mendukung pengaturan durasi pemutaran lalu memanggil SendHapticFeedbackForDuration dengan nilai interval waktu yang diinginkan. Anda juga dapat mengatur intensitas.
Nota
Jika SimpleHapticsController tidak mendukung pengaturan intensitas, nilai yang disediakan akan diabaikan.
if (hapticsController.IsPlayDurationSupported && hapticsController.IsIntensitySupported) { foreach (var waveform in hapticsController.SupportedFeedback) { if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.RumbleContinuous) { double intensity = 0.75; System.TimeSpan playDuration = new System.TimeSpan(5000000); hapticsController.SendHapticFeedbackForDuration(currentWaveform, intensity, playDuration); } } }
Examples
Lihat sampel haptik Pena untuk contoh kerja fungsionalitas berikut:
- Dapatkan SimpleHapticsController dari input pena: Beralih dari PointerId ke PenDevice ke SimpleHapticsController (memerlukan pena berkemampuan haptik dan perangkat yang mendukung fungsi pena).
- Periksa kemampuan haptik pena: SimpleHapticsController mengekspos properti untuk kemampuan perangkat keras pena, termasuk IsIntensitySupported, IsPlayCountSupported, SupportedFeedback, dan sebagainya.
- Memulai dan menghentikan umpan balik haptik: Gunakan metode SendHapticFeedback dan StopFeedback dengan tepat.
- Memicu umpan balik haptik: Umpan balik untuk umpan balik penintaan dan umpan balik interaksi.