Krijimi i një kontrolluesi fizik të lojës: 10 hapa (me fotografi)
Krijimi i një kontrolluesi fizik të lojës: 10 hapa (me fotografi)
Anonim
Krijimi i një kontrolluesi fizik të lojërave
Krijimi i një kontrolluesi fizik të lojërave
Krijimi i një kontrolluesi fizik të lojërave
Krijimi i një kontrolluesi fizik të lojërave

Kur Nintendo Wii u lançua, lojtarët u inkurajuan, madje nuk u kërkua, të linin divanin dhe të kërcejnë, kërcejnë dhe luajnë në mënyrë që të marrin pikë në lojën e tyre të zgjedhur. Ndërsa ekziston një kurbë e madhe e të mësuarit në ndërtimin e Wii, është e lehtë të ndërtosh një pajisje të personalizuar që të lejon të kontrollosh një lojë duke kërcyer fizikisht mbi tamponët e presionit në kohën e duhur.

Ky udhëzues tregon se si e kam përshtatur lojën 'Space Bounce' (mund të luhet drejtpërdrejt në https://marquisdegeek.com/spacebounce/ me burimin në https://github.com/MarquisdeGeek/SpaceBounce) për të përdorur një kontrollues fizik.

Furnizimet

  • Arduino
  • Dy dyshekë me presion (të miat ishin nga Maplin
  • Dy rezistorë, për dyshekun e presionit (100 K, por shumica janë mirë)
  • Dy LED (opsionale)
  • Dy rezistorë, për LED (100 K, por shumica janë mirë. Gjithashtu opsionale)
  • Laptop

Hapi 1: Kërceni përreth

Shko Rreth!
Shko Rreth!

Fillova duke hartuar ndërfaqen e kërcimit dhe, pas rishikimit të lojës, kuptova se të kesh dy dyshekë do të shprehte më së miri idenë e saj kryesore. Kjo do të thotë, ju qëndroni në dyshemenë e majtë për të simuluar ndjenjën e mbajtjes në murin e majtë dhe, në momentin e duhur, hidheni përtej dyshemesë së djathtë, dhe personazhi juaj në ekran do të bënte të njëjtën gjë.

Hapi 2: Lidhja e Pads

Lidhja e Pads
Lidhja e Pads
Lidhja e Pads
Lidhja e Pads

Kështu që bleva dy dyshekë dhe fillova punën. Tapetat e presionit të paraqitura këtu janë më të thjeshtat (dhe më të lira!) Kam gjetur, me 10 £ secila. Ata kanë katër tela, dy prej të cilave veprojnë si një ndërprerës i thjeshtë: kur qëndroni në dyshek, bëhet një lidhje, dhe kur hidheni lart ajo prishet. Unë e futa atë në një Arduino me këtë qark bazë.

Hapi 3: Ngadalësimi i Dritës Fantastike

Përplasja e Dritës Fantastike
Përplasja e Dritës Fantastike

Punoi, por nuk ishte shumë frymëzuese. Pra, shtova disa LED për të treguar gjendjen e secilës dyshek presioni.

LED -të nuk kërkohen të luajnë lojën, por duke i shtuar ato në qark unë lehtë mund të shoh se çfarë qarku mendonte se ishte gjendja aktuale. Prandaj, nëse loja nuk reagonte saktë, unë mund të punoja nëse problemi ishte me qarkun, programin Arduino ose logjikën e lojës.

Hapi 4: Fillimi i Kodit

Duke pasur parasysh që loja origjinale ishte në JavaScript, vendosa të shkruaj një program NodeJS i cili dëgjon ndryshimet në gjendjen e shtresës së presionit dhe i dërgon të dhënat përmes rrjetave në internet te klienti i lojës.

Së pari, instaloni firmatat standarde në Arduino tuaj në mënyrë që të mund të drejtojmë një server Node në PC dhe të përdorim bibliotekën Johnny Five për të dëgjuar ndryshimet e gjendjes nga Arduino. Pastaj shtoni Express për të shërbyer përmbajtjen e lojës.

I gjithë kodi i serverit duket kështu:

const express = kërkoj ('shpreh');

const app = express (); const http = kërkoj ('http'); const server = http.createServer (aplikacioni); const io = kërkoj ('socket.io'). dëgjo (server); const arduino = kërkoj ('arduino-kontrollues'); server.listen (3000, funksioni () {console.log ('Express server duke dëgjuar …');}); app.use ('/', express.static ('app')); const pesë = kërkojnë ("johnny-five"); bord bordi = pesë të reja. Bordi ({repl: false}); bordi.on ("gati", funksioni () {le jeshile = pesë të reja. Led (5); le të kuqe = pesë të reja. Led (6); le majtas = pesë të reja. Pin (2); le të djathtë = pesë të reja. Pin (3); io.on ('lidheni', funksioni (priza) {console.log ('Ne jemi të lidhur!'); Le lastLeft = false; le lastRight = false; pesë. Pin.read (majtas, (err, val) => {if (val) {green.on ();} else {green.off ();} if (val! == lastLeft) {lastLeft = val; le gjendjen = {side: 'left', gjendja: val? 'poshtë': 'lart'} socket.emit ('arduino:: state', JSON.stringify (gjendja), {për: 'të gjithë'});}}) pesë. Pin.read (djathtas, (err, val) => {if (val) {red.on ();} tjetër {red.off ();} // if (val! == lastRight) {lastRight = val; le gjendjen = {side: 'right', state: val? 'down': 'up'} socket.emit ('arduino:: state', JSON.stringify (gjendja), {për: 'të gjithë'});}})}); });

Dhe drejtohet me:

server nyje.js

Hapi 5: Përshtatja e lojës

Problemi i parë ishte ndërfaqja; si 'klikoni' në butonin e luajtjes kur gjithçka që mund të bëni është të hidheni? Unë e zgjidha këtë duke eleminuar të gjithë butonat e tjerë! Unë pastaj mund të aktivizoj butonin e mbetur sa herë që lojtari kërcen, duke dëgjuar për secilën ngjarje 'lart'.

fole = io (); socket.on ('arduino:: gjendja', funksioni (msg) {let data = JSON.parse (msg); if (data.state === 'up') {// po kërcejmë!}});

Nga këtu unë kam qenë në gjendje të futem në lojë dhe t'i përdor pads për diçka më argëtuese - vetë lojën.

Hapi 6: Ndryshimi i Kodit të Kërcimit të Lojtarit

Këtë herë do të më duhej të merresha me secilën jastëk individualisht dhe ta bëja personazhin të fillonte të kërcente sa herë që këmba e lojtarit të largohej nga jastëku. Koha që personazhi në ekran të përshkojë boshtin e minierës është më i gjatë se koha që lojtari të hidhet nga njëra anë në tjetrën. Kjo është një gjë e mirë, pasi i jep lojtarit një shans të rimarrë ekuilibrin, të kontrollojë bazën e tij dhe të shikojë lojtarin të përfundojë kërcimin në ekran. Po të mos kishte qenë kështu, do ta ngadalësoja lojtarin.

fole = io ();

socket.on ('arduino:: gjendja', funksioni (msg) {

le të dhënat = JSON.parse (msg); nëse (data.side === 'majtas' && data.state === 'lart') {// po hidhemi lart nga ana e majtë}});

Hapi 7: Ndryshimi i daljes

Me mekanizmin e hyrjes që funksionon, më duhej të punoja në dalje. Loja luan mirë në një tabletë ose telefon, sepse mbush ekranin. Por, kur kërceni, është shumë e vogël për ta parë, kështu që zona e lojës në ekran duhet të zgjerohet. Shumë!

Fatkeqësisht, zgjerimi i të gjitha aseteve grafike është një detyrë që kërkon shumë kohë. Pra, unë mashtrova! Meqenëse loja nuk ka nevojë të kuptojë pozicionin X, Y të një klikimi të miut ose ngjarjes së prekjes, unë thjesht mund të rindërtoj të gjithë kanavacën!

Kjo përfshinte një hakim si në CSS ashtu edhe në JavaScript në mënyrë që objekti ekzistues i kanavacës HTML5 të funksionojë në ekran të plotë.

Për më tepër, loja luhet në modalitetin e portretit që nënkuptonte përdorimin maksimal të pasurive të patundshme të ekranit që na duheshin për të rrotulluar kanavacën me 90 gradë.

#SGXCanvas {

pozicioni: absolut; indeksi z: 0; transformohet: rrotullohet (-90deg); transformo-origjinën: sipër djathtas; gjerësia: auto; }

Hapi 8: Punon

Punon!
Punon!

Për lojën time të parë, unë e ktheva laptopin në anën e tij dhe luajta kështu.

Hapi 9: Përgatitja e dhomës

Përgatitja e dhomës
Përgatitja e dhomës

Ndërtimi i një kontrolluesi fizik është vetëm fillimi i udhëtimit, jo fundi. Pjesa tjetër e hapësirës fizike duhet të merret parasysh.

Së pari, dyshekët e presionit lëviznin në dysheme kur ulesh mbi to. Kjo u rregullua lehtësisht me disa jastëkë ngjitës të dyanshëm. Ata punojnë mirë, por ndoshta nuk do të mbajnë deri në një konsum shumë të madh.

Tjetra, laptopi duket pa kuptim, gjë që ju tërheq vëmendjen nga vetë loja. Pra, TV nga salloni u "huazua" dhe u çua në MakerSpace lokale, ku u pozicionua përballë murit dhe u lidh.

Në të ardhmen do të ishte mirë të shtoni gjurmë në dyshekët e presionit (ndoshta të printimit të parë të hënës të Neil Armstrong!) Për të udhëhequr lojtarin. Gjithashtu një shtresë e jashtme më e mirë për televizorin do të shtonte ndjesinë. Ndoshta ata prej jush që kanë shumë kohë dhe hapësirë mund të krijojnë një shkëmb shkëmbi prej letre, të vendosur në të dyja anët e dyshekëve, për të imituar ndjenjën klaustrofobike të rënies nga një bosht i minierës!

Hapi 10: Comshtë e Plotë

Dhe ja ku e keni. Një projekt i thjeshtë ditor që përmirëson lojën origjinale dhe ju mban në formë gjatë lojës!

Ju gjithashtu mund të përdorni një Makey Makey i cili simulon drejtpërdrejt shtypjet kryesore të përdorura në lojën origjinale, për të minimizuar disa nga kjo punë. Por kjo ka mbetur si një ushtrim për lexuesin:)

I gjithë kodi është në një degë të veçantë në repon Space Bounce: