Mundarija:
- Ta'minotlar
- 1 -qadam: atrofga sakrab chiqing
- 2 -qadam: tagliklarni ulash
- 3 -qadam: Fantastik nurni o'chirish
- 4 -qadam: Kodni ishga tushirish
- 5 -qadam: O'yinni moslashtirish
- 6 -qadam: O'yinchi o'tish kodini o'zgartirish
- 7 -qadam: chiqishni o'zgartirish
- 8 -qadam: u ishlaydi
- 9 -qadam: xonani tayyorlash
- 10 -qadam: Hammasi tugadi
Video: Jismoniy o'yin boshqaruvchisini yaratish: 10 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:25
Nintendo Wii ishga tushirilganda, o'yinchilarni xohlagan o'yinida ochko to'plash uchun divandan chiqib ketishga, sakrashga, raqsga tushishga va chayqalishga undashdi. Wii -ni qurishda keskin o'rganish egri chizig'i mavjud bo'lsa -da, kerakli vaqtda bosim o'tkazgichlariga jismoniy sakrash orqali o'yinni boshqarishga imkon beradigan maxsus qurilmani yaratish oson.
Bu ko'rsatma men "Space Bounce" o'yinini (https://marquisdegeek.com/spacebounce/ saytida https://github.com/MarquisdeGeek/SpaceBounce havolasida o'ynab o'ynash mumkin) jismoniy boshqaruvchidan qanday foydalanganimni ko'rsatadi.
Ta'minotlar
- Arduino
- Ikkita bosimli gilamcha (meniki Maplin edi
- Bosim tagligi uchun ikkita rezistor (100 K, lekin ko'pchiligi yaxshi)
- Ikkita LED (ixtiyoriy)
- LEDlar uchun ikkita rezistor (100 K, lekin ko'pchiligi yaxshi. Shuningdek ixtiyoriy)
- Noutbuk
1 -qadam: atrofga sakrab chiqing
Men sakrash interfeysini loyihalashdan boshladim va o'yinni ko'rib chiqqach, ikkita to'shakka ega bo'lish uning asosiy g'oyasini eng yaxshi ifoda etishini tushundim. Ya'ni, chap devorda ushlab turish tuyg'usini taqlid qilish uchun siz chap to'shakda turasiz va kerakli vaqtda o'ng to'shakka o'tasiz va sizning ekrandagi belgingiz ham shunday qiladi.
2 -qadam: tagliklarni ulash
Shunday qilib, men ikkita taglik sotib oldim va ishga kirishdim. Bu erda ko'rsatilgan bosim paspaslari men topgan eng sodda (va eng arzon!), Har biri 10 funtdan. Ularda to'rtta sim bor, ulardan ikkitasi oddiy kalit kabi ishlaydi: gilamchada turganingizda aloqa o'rnatiladi va sakraganingizda u uziladi. Men buni asosiy zanjir bilan Arduino -ga berdim.
3 -qadam: Fantastik nurni o'chirish
Bu ishladi, lekin unchalik ilhomlantirmadi. Shunday qilib, men har bir bosim matining holatini ko'rsatish uchun bir nechta LEDlarni qo'shdim.
LEDlar o'yinni o'ynashi shart emas, lekin ularni kontaktlarning zanglashiga qo'shib, men hozirgi holat qanday bo'lganini bilib oldim. Shuning uchun, agar o'yin to'g'ri javob bermasa, men muammo sxemada, Arduino dasturiy ta'minotida yoki o'yin mantig'ida bo'lsa, men hal qila olardim.
4 -qadam: Kodni ishga tushirish
Asl o'yin JavaScript -da bo'lganligi sababli, men bosim matining holatidagi o'zgarishlarni tinglaydigan va ma'lumotlarni veb -rozetkalar orqali o'yin mijoziga yuboradigan NodeJS dasturini yozishga qaror qildim.
Birinchidan, Arduino -ga standart firmata -ni o'rnating, shunda biz kompyuterda tugun serverini ishga tushiramiz va Arduino -dan holat o'zgarishini tinglash uchun Johnny Five kutubxonasidan foydalanamiz. Keyin o'yin tarkibiga xizmat ko'rsatish uchun Express -ni qo'shing.
Butun server kodi quyidagicha ko'rinadi:
const express = talab ("ekspress");
const ilovasi = express (); const http = talab ('http'); const server = http.createServer (ilova); const io = talab ('socket.io'). tinglash (server); const arduino = talab ('arduino-nazoratchi'); server.listen (3000, function () {console.log ('Serverni tezkor tinglash…');}); app.use ('/', express.static ('ilova')); const besh = talab ("johnny-besh"); const taxtasi = yangi besh. Board ({repl: false}); board.on ("tayyor", function () {yashil = yangi besh. Led (5); qizil = yangi besh.. Pin (3); io.on ('ulanish', funktsiya (soket) {console.log ('Biz bog'langanmiz!'); LetLeft = false; lastRight = false; err, val) => {if (val) {green.on ();} else {green.off ();} if (val! == lastLeft) {lastLeft = val; let state = {side: 'left', davlat: val? 'pastga': 'yuqoriga'} socket.emit ('arduino:: holat', JSON.stringify (holat), {for: 'hamma'});}}) besh. Pin.read (o'ngda), (err, val) => {if (val) {red.on ();} else {red.off ();} // if (val! == lastRight) {lastRight = val; let state = {side: 'o'ng', holat: val? 'pastga': 'yuqoriga'} socket.emit ('arduino:: holat', JSON.stringify (holat), {uchun: 'hamma'});}})}); });
Va bilan boshqariladi:
tugun server.js
5 -qadam: O'yinni moslashtirish
Birinchi muammo interfeys edi; Agar o'tish mumkin bo'lsa, qanday qilib ijro etish tugmachasini "bosish" mumkin? Men buni boshqa tugmalarni yo'q qilish orqali hal qildim! O'yinchi sakraganda, "yuqoriga" hodisasini tinglab, qolgan tugmani ishga tushirishim mumkin.
soket = io (); socket.on ('arduino:: holat', funktsiya (msg) {let data = JSON.parse (msg); if (data.state === 'up') {// biz sakrayapmiz!}});
Bu erdan men o'yinga kira oldim va o'tirgichlarni yanada qiziqarli narsalarga - o'yinning o'ziga ishlata oldim.
6 -qadam: O'yinchi o'tish kodini o'zgartirish
Bu safar men har bir yostiq bilan alohida shug'ullanishim kerak va o'yinchining oyog'i yostiqdan chiqib ketganda, belgi sakrashni boshlashi kerak edi. Ekrandagi personajning mina milidan o'tishi uchun vaqt o'yinchining bir tomondan yon tomonga sakrash vaqtidan uzunroq. Bu yaxshi narsa, chunki bu o'yinchiga muvozanatni tiklashga, oyoqlarini tekshirishga va o'yinchining ekranda sakrashini kuzatishga imkon beradi. Agar bunday bo'lmaganida, men o'yinchini sekinlashtirgan bo'lardim.
soket = io ();
socket.on ('arduino:: holat', funktsiya (msg) {
ma'lumotlar = JSON.parse bo'lsin (msg); if (data.side === 'chap' && data.state === 'yuqoriga') {// biz chap tomondan sakrayapmiz}});
7 -qadam: chiqishni o'zgartirish
Kirish mexanizmi ishlayotganda, men chiqish ustida ishlashim kerak edi. O'yin planshet yoki telefonda yaxshi o'ynaydi, chunki u ekranni to'ldiradi. Ammo, siz atrofga sakrayotganingizda, ko'rish juda kichik, shuning uchun ekrandagi o'yin maydonini kattalashtirish kerak. Ko'p!
Afsuski, barcha grafik aktivlarni kengaytirish juda ko'p vaqt talab qiladigan vazifadir. Shunday qilib, men aldadim! O'yin sichqonchaning X, Y pozitsiyasini yoki teginish hodisasini tushunishi shart emasligi sababli, men butun tuvalni qayta o'lchamoqchiman!
Bu CSS va JavaScript-ni buzishni o'z ichiga oladi, shuning uchun mavjud HTML5 tuval ob'ekti to'liq ekranli ishlaydi.
Bundan tashqari, o'yin portret rejimida o'ynaladi, bu biz tuvalni 90 gradusga burish uchun kerak bo'lgan ekranli ko'chmas mulkdan maksimal darajada foydalanishni anglatadi.
#SGXCanvas {
pozitsiya: mutlaq; z-indeks: 0; aylantirish: aylantirish (-90 daraja); transformatsiya kelib chiqishi: yuqori o'ng; kengligi: avtomatik; }
8 -qadam: u ishlaydi
Birinchi o'yinim uchun men noutbukni yon tomonga burib, shunday o'ynadim.
9 -qadam: xonani tayyorlash
Jismoniy boshqaruvchini yaratish - bu safarning boshlanishi, oxiri emas. Qolgan jismoniy bo'shliqni hisobga olish kerak.
Birinchidan, bosimli paspaslar, siz ularga tushganingizda, erga qarab harakatlanardi. Bu ikki tomonlama yopishqoq prokladkalar yordamida osonlikcha o'rnatildi. Ular yaxshi ishlaydi, lekin, ehtimol, juda ko'p aşınmaya bardosh bera olmaydi.
Keyinchalik, noutbuk biroz ahmoq ko'rinadi, bu sizni o'yinning o'zidan chalg'itadi. Shunday qilib, zaldagi televizor "qarzga olingan" va mahalliy MakerSpace -ga olib borilgan, u erda devorga o'rnatilib ulangan.
Kelgusida o'yinchini boshqarishi uchun bosim o'tkazgichlariga oyoq izlarini qo'shish yaxshi bo'lardi (ehtimol, Neil Armstrongning birinchi oy bosmasi!). Bundan tashqari, televizor uchun yaxshiroq korpus va atrof -muhit hissi qo'shadi. Balki sizda ko'p vaqt va bo'sh joy bo'lganlar, mina milidan yiqilishning klostrofobik tuyg'usiga taqlid qilib, gilamchalarning har ikki tomoniga qo'yilgan qog'ozdan yasalgan toshli tosh yasashlari mumkin!
10 -qadam: Hammasi tugadi
Va u erda sizda bor. Asl o'yinni takomillashtiradigan va uni o'ynab turganda sizni ushlab turadigan oson kunlik loyiha!
Bu ishlarning bir qismini kamaytirish uchun siz asl o'yinda ishlatiladigan tugmachalarni to'g'ridan -to'g'ri taqlid qiladigan Makey Makey -dan foydalanishingiz mumkin. Ammo bu o'quvchi uchun mashq sifatida qoldirilgan:)
Barcha kodlar Space Bounce repo -dagi maxsus bo'limda joylashgan:
Tavsiya:
Arduino MIDI boshqaruvchisini yaratish: 9 qadam (rasmlar bilan)
Arduino MIDI boshqaruvchisini yaratish: Bu ko'rsatma dastlab o'z blogimda 2020 yil 28 -iyunda chop etilgan, men elektronikani o'z ichiga olgan narsalarni qurishni yaxshi ko'raman va men har doim Arduino -dan foydalanib biror narsa qurishni xohlardim. MIDI tekshiruvi.
Deyarli har qanday o'yin boshqaruvchisini qanday tozalash kerak: 5 qadam
Deyarli har qanday o'yin boshqaruvchisini qanday tozalash kerak: Menda Raspberry Pi emulyatori uchun ishlatiladigan Logitech Dual Action -ning bir nechta kontrolleri bor, men yaqinda Instructable -ni yuklayman. bir yildan ortiq), tugmalarning aksariyati
Kompyuter o'yin stolini yaratish: 14 qadam (rasmlar bilan)
Kompyuter o'yin stolini yaratish: Salom bolalar, men o'z g'orim uchun o'yin stolini qurmoqchi edim, har qanday oddiy stol kesmaydi, bu stol asosan saqlash uchun qurilgan, men hamma joyda javon borligini yoqtirmayman, shuning uchun hamma narsa shunday bo'linmalarda saqlanadi. Bu qismning 1 -qismi
O'yin bosimiga sezgir prokladkalar (raqamli o'yin maydonchalari uchun - va boshqalar): 11 qadam (rasmlar bilan)
O'yin bosimiga sezgir prokladkalar (raqamli o'yin maydonchalari uchun - va boshqalar): Bu sizga raqamli o'yinchoqlar yoki o'yinlar yaratish uchun ishlatilishi mumkin bo'lgan bosim sezgir yostiq yasashni ko'rsatadigan ko'rsatma. U katta kuchga sezgir rezistor sifatida ishlatilishi mumkin va o'ynoqi bo'lsa ham, undan jiddiy loyihalarda foydalanish mumkin edi
Qanday qilib ko'chma o'yin tizimini yaratish kerak: 39 qadam (rasmlar bilan)
Qanday qilib ko'chma o'yin tizimini yaratish kerak: Hech qachon o'zingiz yoqtirgan o'yin tizimini o'ynashni xohlagan joyingizda o'ylab ko'rganmisiz? Ishonchim komilki, sizda bor. Ushbu qo'llanmadan so'ng siz Nintendo ko'ngilochar tizimini "portablizlash" ni o'rganishingiz mumkin. Bu yo'riqnomada men sizga hamma narsani o'rgataman