Ֆիզիկական խաղի վերահսկիչ ստեղծելը. 10 քայլ (նկարներով)
Ֆիզիկական խաղի վերահսկիչ ստեղծելը. 10 քայլ (նկարներով)
Anonim
Ֆիզիկական խաղի վերահսկիչի ստեղծում
Ֆիզիկական խաղի վերահսկիչի ստեղծում
Ֆիզիկական խաղի վերահսկիչի ստեղծում
Ֆիզիկական խաղի վերահսկիչի ստեղծում

Երբ Nintendo Wii- ն գործարկվեց, խաղացողները խրախուսվեցին, այլևս ոչ, պահանջվեց, որ թողնեն բազմոցը և ցատկեն, պարեն և կծկվեն, որպեսզի իրենց ընտրած խաղում միավորներ վաստակեն: Թեև Wii- ի կառուցման մեջ կա կտրուկ ուսման կոր, հեշտ է կառուցել հատուկ սարք, որը թույլ է տալիս վերահսկել խաղը ՝ համապատասխան ժամանակ ֆիզիկապես ցատկելով ճնշման բարձիկների վրա:

Այս հրահանգը ցույց է տալիս, թե ինչպես եմ ես հարմարեցրել «Տիեզերական վերադարձ» խաղը (ուղիղ եթերում ՝ https://marquisdegeek.com/spacebounce/ ՝ https://github.com/MarquisdeGeek/SpaceBounce) աղբյուրի հետ ՝ ֆիզիկական վերահսկիչ օգտագործելու համար:

Պարագաներ

  • Արդուինո
  • Երկու ճնշման գորգ (իմը Maplin- ից էին)
  • Երկու դիմադրություն ՝ ճնշման գորգի համար (100 Կ, բայց մեծ մասը լավ է)
  • Երկու LED (ըստ ցանկության)
  • Երկու դիմադրություն, LED- ների համար (100 Կ, բայց մեծ մասը լավ է: Նաև ըստ ցանկության)
  • Նոթբուք

Քայլ 1: Անցնել շուրջը:

Անցնել շուրջը
Անցնել շուրջը

Ես սկսեցի նախագծելով ցատկող միջերեսը և, խաղի վերանայելով, հասկացա, որ երկու գորգ ունենալը լավագույնս կարտահայտի իր հիմնական գաղափարը: Այսինքն, դուք կանգնած եք ձախ գորգի վրա ՝ ձախ պատին պահելու զգացումը նմանեցնելու և համապատասխան պահին ցատկելով աջ գորգի վրայով, և ձեր էկրանին հայտնվող կերպարը նույնը կանի:

Քայլ 2: Տեղադրեք բարձիկներ

Բարձիկները միացնելը
Բարձիկները միացնելը
Բարձիկները միացնելը
Բարձիկները միացնելը

Այսպիսով, ես գնեցի երկու գորգ և սկսեցի աշխատել: Այստեղ ցուցադրված ճնշման գորգերն ամենապարզ (և ամենաէժանն են), որոնք ես գտա ՝ յուրաքանչյուրը 10 ֆունտ ստերլինգ: Նրանք ունեն չորս լար, որոնցից երկուսը գործում են պարզ անջատիչի պես. Երբ կանգնում ես գորգի վրա, կապ է ստեղծվում, իսկ վեր թռչելիս այն խզվում է: Ես սա սնուցեցի Arduino- ի մեջ այս հիմնական միացումով:

Քայլ 3. Լույսի ֆանտաստիկ սայթաքում

Սայթաքելով լույսը Ֆանտաստիկ
Սայթաքելով լույսը Ֆանտաստիկ

Աշխատեց, բայց այնքան էլ ոգեշնչող չէր: Այսպիսով, ես ավելացրեցի մի քանի LED ՝ նշելու յուրաքանչյուր ճնշման գորգի վիճակը:

LED- ները պարտադիր չեն խաղը խաղալու համար, բայց դրանք միացնելով սխեմային, ես հեշտությամբ կարող էի տեսնել, թե ինչպիսին էր շրջանագծի ներկայիս վիճակը: Հետևաբար, եթե խաղը ճիշտ չարձագանքեր, ես կարող էի աշխատել, եթե խնդիրը սխեմայի, Arduino ծրագրակազմի կամ խաղի տրամաբանության մեջ էր:

Քայլ 4: Սկսեք ծածկագրել

Հաշվի առնելով, որ սկզբնական խաղը JavaScript- ում էր, որոշեցի գրել NodeJS ծրագիր, որը լսում է ճնշման գորգի վիճակի փոփոխությունները և տվյալները ուղարկում է ցանցային ցանցերի միջոցով խաղի հաճախորդին:

Նախ, տեղադրեք ստանդարտ ֆիրման ձեր Arduino- ի վրա, որպեսզի մենք կարողանանք համակարգչի վրա գործարկել Node սերվեր և օգտագործել Johnny Five գրադարանը `Arduino- ի վիճակի փոփոխությունները լսելու համար: Այնուհետև ավելացրեք Express ՝ խաղի բովանդակությունը մատուցելու համար:

Ամբողջ սերվերի կոդն այսպիսին է.

const express = պահանջում ('արտահայտել');

const app = express (); const http = պահանջում ('http'); const սերվեր = http.createServer (ծրագիր); const io = պահանջում ('socket.io'): լսեք (սերվեր); const arduino = պահանջում («arduino-controller»); server.listen (3000, գործառույթ () {console.log ('Էքսպրես սերվեր լսում …');}); app.use ('/', express.static ('հավելված')); const հինգ = պահանջել («johnny-five»); const board = new five. Board ({repl: false}); տախտակ. Pin (3); io.on ('միացնել', գործառույթը (վարդակից) {console.log ('Մենք միացված ենք'); թող lastLeft = false; թող lastRight = false; five. Pin.read (ձախ, (err, val) => {if (val) {green.on ();} else {green.off ();} if (val! == lastLeft) {lastLeft = val; let state = {side: 'left', վիճակ ՝ val? 'down': 'up'} socket.emit ('arduino:: state', JSON.stringify (state), {for: 'everyone'});}}) հինգ. Pin.read (աջ, (err, val) => {if (val) {red.on ();} else {red.off ();} // if (val! == lastRight) {lastRight = val; let state = {side: 'right', state: val? 'down': 'up'} socket.emit ('arduino:: state', JSON.stringify (state), {for: 'everyone'});}})}); });

Եվ աշխատում է ՝

հանգույց server.js

Քայլ 5: Խաղի հարմարեցում

Առաջին խնդիրը միջերեսն էր. ինչպե՞ս եք «կտտացնում» նվագարկման կոճակին, երբ միակ բանը, որ կարող եք անել, ցատկելն է: Ես դա լուծեցի ՝ վերացնելով մնացած բոլոր կոճակները: Այնուհետև ես կարող եմ միացնել մնացած կոճակը, երբ խաղացողը ցատկում է ՝ լսելով «վեր» իրադարձությանը:

վարդակից = io (); socket.on ('arduino:: state', function (msg) {let data = JSON.parse (msg); if (data.state === 'up') {// մենք ցատկում ենք!}});

Այստեղից ես կարողացա մտնել խաղի մեջ և օգտագործել բարձիկներն ավելի զվարճալի բանի համար `բուն խաղը:

Քայլ 6. Փոփոխել նվագարկիչի Jump կոդը

Այս անգամ ես պետք է առանձին զբաղվեի յուրաքանչյուր պահոցի հետ և ստիպեի կերպարին սկսել ցատկել, երբ խաղացողի ոտքը թողնում էր պահոցը: Էկրանի կերպարի ՝ ականի լիսեռով անցնելու ժամանակը ավելի երկար է, քան խաղացողի մի կողմից ցատկելու ժամանակը: Սա լավ բան է, քանի որ այն հնարավորություն է տալիս խաղացողին վերականգնել հավասարակշռությունը, ստուգել ոտքերը և դիտել, թե ինչպես է խաղացողն ավարտում թռիչքը էկրանին: Եթե դա այդպես չլիներ, ես կդանդաղեցնեի խաղացողին:

վարդակից = io ();

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

թող տվյալներ = JSON.parse (msg); եթե (data.side === 'left' && data.state === 'up') {// ձախից վեր ենք թռչում}});

Քայլ 7: Արտադրության փոփոխություն

Մուտքային մեխանիզմը աշխատելով, ես պետք է աշխատեի ելքի վրա: Խաղը լավ է խաղում պլանշետի կամ հեռախոսի վրա, քանի որ այն լցնում է էկրանը: Բայց, երբ դու ցատկում ես, դա շատ փոքր է տեսնելու համար, այնպես որ էկրանին խաղալու տարածքը պետք է մեծացնել: Շատ!

Unfortunatelyավոք, բոլոր գրաֆիկական ակտիվների ընդլայնումը շատ ժամանակատար խնդիր է: Այսպիսով, ես խաբեցի! Քանի որ խաղը կարիք չունի հասկանալու մկնիկի կտտոցի կամ դիպչման իրադարձության X, Y դիրքը, ես կարող եմ պարզապես վերաչափել ամբողջ կտավը:

Սա ենթադրում էր կոտրում ինչպես CSS- ի, այնպես էլ JavaScript- ի վրա, որպեսզի առկա HTML5 կտավի օբյեկտը աշխատի ամբողջ էկրանով:

Ավելին, խաղը կատարվում է դիմանկարային ռեժիմով, ինչը նշանակում էր առավելագույնս օգտագործել էկրանի անշարժ գույքը, որն անհրաժեշտ էր կտավը 90 աստիճանով պտտելու համար:

#SGXCanvas {

պաշտոնը `բացարձակ; z- ինդեքս `0; փոխակերպել. պտտել (-90 աստիճան); վերափոխել-ծագումը `վերևի աջ; լայնությունը `ավտոմատ; }

Քայլ 8: Այն աշխատում է:

Աշխատում է!
Աշխատում է!

Իմ առաջին խաղի համար ես նոթբուքս թեքեցի նրա կողքով և խաղացի այսպես.

Քայլ 9: Սենյակի պատրաստում

Սենյակի պատրաստում
Սենյակի պատրաստում

Ֆիզիկական վերահսկիչ կառուցելը միայն ճանապարհորդության սկիզբն է, ոչ թե վերջը: Մնացած ֆիզիկական տարածքը պետք է հաշվի առնել:

Նախ, ճնշման գորգերը շարժվեցին հատակին, երբ դրանք վայրէջք կատարեք: Սա հեշտությամբ ամրագրվեց երկկողմանի կպչուն բարձիկներով: Նրանք լավ են աշխատում, բայց հավանաբար չեն դիմանա շատ մաշվածության:

Հաջորդը, նոութբուքը մի փոքր հիմար տեսք ունի, ինչը ձեզ շեղում է բուն խաղից: Այսպիսով, սրահից հեռուստացույցը «փոխառվեց» և տեղափոխվեց տեղական MakerSpace, որտեղ այն տեղադրված էր պատին և միացված:

Ապագայում հաճելի կլիներ ճնշման գորգերի վրա ոտնահետքեր ավելացնելը (գուցե Նիլ Արմսթրոնգի առաջին լուսնի տպագրությունը) `խաղացողին ուղղորդելու համար: Հեռուստատեսության համար ավելի լավ պատյանն ու շրջապատը կավելացնեն զգացումը: Հավանաբար, ձեզանից շատերը, ովքեր շատ ժամանակ և տարածք ունեն, կարող են պատրաստել թղթե մաչե երես, որը տեղադրված է գորգերի երկու կողմերում, ընդօրինակելու համար ականի լիսեռից ընկնելու կլաուստրոֆոբ զգացումը:

Քայլ 10: Այն ավարտված է:

Եվ ահա դուք ունեք այն: Հեշտ օրվա նախագիծ, որն ուժեղացնում է օրիգինալ խաղը և այն պահում է մարզավիճակում այն խաղալիս:

Կարող եք նաև օգտագործել Makey Makey- ն, որն ուղղակիորեն նմանակում է բնօրինակ խաղում օգտագործվող հիմնական սեղմումները `այս աշխատանքներից մի քանիսը նվազագույնի հասցնելու համար: Բայց դա որպես վարժություն է մնացել ընթերցողի համար:)

Ամբողջ ծածկագիրը գտնվում է Space Bounce ռեպոյի հատուկ մասնաճյուղում ՝

Խորհուրդ ենք տալիս: