Orodha ya maudhui:

Kuunda Kidhibiti cha Mchezo wa Kimwili: Hatua 10 (na Picha)
Kuunda Kidhibiti cha Mchezo wa Kimwili: Hatua 10 (na Picha)

Video: Kuunda Kidhibiti cha Mchezo wa Kimwili: Hatua 10 (na Picha)

Video: Kuunda Kidhibiti cha Mchezo wa Kimwili: Hatua 10 (na Picha)
Video: UKIZIONA DALILI HIZI MAMA MJAMZITO BASI UTAJIFUNGUA MTOTO WA KIUME 2024, Novemba
Anonim
Kuunda Kidhibiti cha Mchezo wa Kimwili
Kuunda Kidhibiti cha Mchezo wa Kimwili
Kuunda Kidhibiti cha Mchezo wa Kimwili
Kuunda Kidhibiti cha Mchezo wa Kimwili

Wakati Nintendo Wii ilipozinduliwa wachezaji walihimizwa, hapana inahitajika, kuondoka kwenye sofa na kuruka, kucheza, na kuruka ili kupata alama kwenye mchezo wao wa kuchagua. Wakati kuna mwinuko wa kujifunza katika kujenga Wii, ni rahisi kujenga kifaa cha kawaida ambacho hukuruhusu kudhibiti mchezo kwa kuruka kwa pedi za shinikizo kwa wakati unaofaa.

Hii inaweza kufundisha jinsi nilivyobadilisha mchezo wa 'Space Bounce' (inayoweza kucheza moja kwa moja kwenye https://marquisdegeek.com/spacebounce/ na chanzo kwenye https://github.com/MarquisdeGeek/SpaceBounce) kutumia kidhibiti cha mwili.

Vifaa

  • Arduino
  • Mikeka miwili ya shinikizo (yangu ilitoka Maplin
  • Vipinga viwili, kwa kitanda cha shinikizo (100 K, lakini nyingi ni sawa)
  • LED mbili (hiari)
  • Vipimo viwili, kwa LEDs (100 K, lakini nyingi ni sawa. Pia hiari)
  • Laptop

Hatua ya 1: Rukia Karibu

Rukia Karibu!
Rukia Karibu!

Nilianza kwa kubuni kiolesura cha kuruka na, kupitia ukaguzi wa mchezo, niligundua kuwa kuwa na mikeka miwili ingeelezea wazo lake la msingi. Hiyo ni, unasimama kwenye mkeka wa kushoto kuiga hisia ya kushikilia ukuta wa kushoto na, kwa wakati unaofaa, ruka kwenye mkeka wa kulia, na mhusika wako wa skrini atafanya vivyo hivyo.

Hatua ya 2: Kuunganisha pedi

Kuunganisha pedi
Kuunganisha pedi
Kuunganisha pedi
Kuunganisha pedi

Kwa hivyo nilinunua mikeka miwili, na nikaanza kufanya kazi. Mikeka ya shinikizo iliyoonyeshwa hapa ni rahisi zaidi (na ya bei rahisi!) Nimepata, kwa $ 10 kila moja. Zina waya nne, mbili ambazo hufanya kama swichi rahisi: unaposimama kwenye mkeka, unganisho hufanywa, na unaporuka juu huvunjika. Nililisha hii ndani ya Arduino na mzunguko huu wa kimsingi.

Hatua ya 3: Kuondoa Nuru Nzuri

Kuondoa Nuru Nzuri
Kuondoa Nuru Nzuri

Ilifanya kazi, lakini haikuwa ya kutia moyo sana. Kwa hivyo, niliongeza LED zingine kuonyesha hali ya kila kitanda cha shinikizo.

LED hazihitajiki kucheza mchezo, lakini kwa kuziongeza kwenye mzunguko ningeweza kuona kwa urahisi kile mzunguko ulifikiri ilikuwa hali ya sasa. Kwa hivyo, ikiwa mchezo haukujibu kwa usahihi, ningeweza kujua ikiwa shida ilikuwa na mzunguko, programu ya Arduino, au mantiki ya mchezo.

Hatua ya 4: Kuanzia Msimbo

Kwa kuzingatia mchezo wa asili ulikuwa kwenye JavaScript, niliamua kuandika programu ya NodeJS ambayo inasikiliza mabadiliko katika hali ya kitanda cha shinikizo, na kutuma data kupitia visanduku vya wavuti kwa mteja wa mchezo.

Kwanza, weka firmata ya kawaida kwenye Arduino yako ili tuweze kuendesha seva ya Node kwenye PC na tumia maktaba ya Johnny Tano kusikiliza mabadiliko ya serikali kutoka Arduino. Kisha ongeza Express kuhudumia yaliyomo kwenye mchezo.

Nambari yote ya seva inaonekana kama hii:

const express = zinahitaji ('express');

programu ya const = express (); const http = zinahitaji ('http'); seva ya const = http.createServer (programu); const io = zinahitaji ('socket.io'). sikiliza (seva); const arduino = zinahitaji ('arduino-controller'); seva. sikiliza (3000, kazi () {console.log ('Sikiliza seva inasikiliza…');}); programu.use ('/', express.static ('app')); const tano = zinahitaji ("johnny-five"); bodi ya const = mpya tano. Bodi ({repl: false}); board.on ("tayari", kazi () {let green = new five. Led (5); let red = mpya tano. Led (6); let left = mpya tano. Pin (2); kulia = mpya tano Siri (3); err, val) => {if (val) {green.on ();} mwingine {green.off ();} ikiwa (val! == lastLeft) {lastLeft = val; let state = {side: 'left', state: val? 'down': 'up'} socket.emit ('arduino:: state', JSON.stringify (state), {for: 'everyone'});}}} tano. Pin.read (kulia, (err, val) => {if (val) {red.on ();} mwingine {red.off ();} // if (val! == lastRight) {lastRight = val; hebu hali = {upande: 'kulia', jimbo: val? 'chini': 'up'} soketi.emit ('arduino:: state', JSON.stringify (state), {for: 'everyone'});}})}); });

Na inaendeshwa na:

seva ya nodi

Hatua ya 5: Kubadilisha Mchezo

Shida ya kwanza ilikuwa kiolesura; unabofyaje kwenye kitufe cha kucheza wakati unachoweza kufanya ni kuruka? Nilitatua hii kwa kuondoa vifungo vingine vyote! Ninaweza kuchochea kitufe kilichobaki wakati wowote mchezaji anaruka, kwa kusikiliza tukio la 'up'.

tundu = io (); socket.on ('arduino:: state', function (msg) {let data = JSON.parse (msg); if (data.state === 'up') {// tunaruka!}}));

Kutoka hapa niliweza kuingia kwenye mchezo, na kutumia pedi kwa kitu cha kufurahisha zaidi - mchezo wenyewe.

Hatua ya 6: Kubadilisha Nambari ya Kuruka kwa Mchezaji

Wakati huu ningehitaji kushughulikia kila pedi peke yake, na kumfanya mhusika aanze kuruka wakati wowote mguu wa mchezaji unapoondoka kwenye pedi. Wakati wa mhusika kwenye skrini kuvuka shimoni la mgodi ni mrefu kuliko wakati wa mchezaji kuruka kutoka upande mmoja kwenda upande. Hili ni jambo zuri, kwani inampa mchezaji nafasi ya kupata tena usawa, angalia miguu yao, na angalia mchezaji akikamilisha kuruka kwenye skrini. Ikiwa hii isingekuwa hivyo, ningempunguza kasi mchezaji.

tundu = io ();

socket.on ('arduino:: state', kazi (msg) {

hebu data = JSON.parse (msg); ikiwa (data.side === 'left' && data.state === 'up') {// tunaruka kutoka upande wa kushoto}});

Hatua ya 7: Kubadilisha Pato

Pamoja na utaratibu wa kuingiza kazi, nilihitaji kufanya kazi kwenye pato. Mchezo unacheza vizuri kwenye kompyuta kibao au simu, kwa sababu inajaza skrini. Lakini, wakati unaruka karibu, ni ndogo sana kuona, kwa hivyo eneo la kucheza kwenye skrini linahitaji kupanuliwa. Mengi!

Kwa bahati mbaya, kupanua mali zote za kielelezo ni kazi inayotumia wakati mwingi. Kwa hivyo, nilidanganya! Kwa kuwa mchezo hauitaji kuelewa nafasi ya X, Y ya kubonyeza panya, au tukio la kugusa, ninaweza kuongeza tena turubai yote!

Hii ilihusisha utapeli kwenye CSS na JavaScript ili kitu kilichopo cha turubai cha HTML5 kiendeshe skrini kamili.

Kwa kuongezea, mchezo unachezwa katika hali ya picha ambayo ilimaanisha kutumia upeo wa mali isiyohamishika ya skrini tulihitaji kuzungusha turubai kwa digrii 90.

#SGXCanvas {

msimamo: kabisa; z-index: 0; badilisha: zunguka (-90deg); kubadilisha-asili: juu kulia; upana: auto; }

Hatua ya 8: Inafanya kazi

Inafanya kazi!
Inafanya kazi!

Kwa mchezo wangu wa kwanza nilielekeza kompyuta yangu ndogo upande wake, na nilicheza hivi.

Hatua ya 9: Kuandaa Chumba

Kuandaa Chumba
Kuandaa Chumba

Kujenga kidhibiti mwili ni mwanzo tu wa safari, sio mwisho. Sehemu iliyobaki ya mwili inahitaji kuzingatiwa.

Kwanza, mikeka ya shinikizo ilizunguka sakafuni wakati ulipotua juu yao. Hii ilirekebishwa kwa urahisi na pedi zingine zenye nene mbili. Wanafanya kazi vizuri, lakini labda hawatashikilia kuchakaa kwa machozi mengi.

Ifuatayo, laptop inaonekana kidogo, ambayo inakusumbua kutoka kwa mchezo yenyewe. Kwa hivyo, Televisheni kutoka kwenye chumba cha kupumzika "ilikopwa" na kupelekwa kwa MakerSpace ya ndani, ambapo ilikuwa imewekwa kwenye ukuta na kuunganishwa.

Katika siku za usoni ingekuwa nzuri kuongeza nyayo kwenye mikeka ya shinikizo (labda ya kuchapa mwezi wa kwanza wa Neil Armstrong!) Kuongoza mchezaji. Pia kuweka bora na kuzunguka kwa Runinga kungeongeza kwa kujisikia. Labda wale walio na wakati na nafasi nyingi wangeweza kutengeneza uso wa mwamba wa karatasi, uliowekwa upande wowote wa mikeka, kuiga hisia ya claustrophobic ya kuanguka chini ya shimoni la mgodi!

Hatua ya 10: Imekamilika

Na hapo unayo. Mradi rahisi wa siku ambao huongeza mchezo wa asili, na hukuweka sawa wakati unacheza!

Unaweza pia kutumia Makey Makey ambayo inaiga moja kwa moja mitambo ya kushinikiza inayotumiwa kwenye mchezo wa asili, ili kupunguza kazi hii. Lakini hiyo imesalia kama zoezi kwa msomaji:)

Nambari yote iko katika tawi maalum katika repo ya Space Bounce:

Ilipendekeza: