Mundarija:

Jismoniy o'yin boshqaruvchisini yaratish: 10 qadam (rasmlar bilan)
Jismoniy o'yin boshqaruvchisini yaratish: 10 qadam (rasmlar bilan)

Video: Jismoniy o'yin boshqaruvchisini yaratish: 10 qadam (rasmlar bilan)

Video: Jismoniy o'yin boshqaruvchisini yaratish: 10 qadam (rasmlar bilan)
Video: Mana haqiqiy javob qanday bo'lishi kerak !!! #motivatsiya #kino #shaxsiyrivojlanish #shaxsiy 2024, Noyabr
Anonim
Jismoniy o'yin boshqaruvchisini yaratish
Jismoniy o'yin boshqaruvchisini yaratish
Jismoniy o'yin boshqaruvchisini yaratish
Jismoniy o'yin boshqaruvchisini yaratish

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

Atrofga sakrash!
Atrofga sakrash!

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

Pedlarni ulash
Pedlarni ulash
Pedlarni ulash
Pedlarni 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

Yorug'likni ochish fantastik
Yorug'likni ochish fantastik

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

Ishlamoqda!
Ishlamoqda!

Birinchi o'yinim uchun men noutbukni yon tomonga burib, shunday o'ynadim.

9 -qadam: xonani tayyorlash

Xonani tayyorlash
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: