Агуулгын хүснэгт:

Тоглоомын физик хянагч бий болгох: 10 алхам (зурагтай)
Тоглоомын физик хянагч бий болгох: 10 алхам (зурагтай)

Видео: Тоглоомын физик хянагч бий болгох: 10 алхам (зурагтай)

Видео: Тоглоомын физик хянагч бий болгох: 10 алхам (зурагтай)
Видео: хэрхэн 1000 төгрөгийг 10000 болгох вэ 2024, Долдугаар сарын
Anonim
Тоглоомын физик хянагч бий болгох
Тоглоомын физик хянагч бий болгох
Тоглоомын физик хянагч бий болгох
Тоглоомын физик хянагч бий болгох

Nintendo Wii -ийг эхлүүлэх үед тоглогчдыг сонгосон тоглоомдоо оноо авахын тулд буйдангаа орхиж, үсрэх, бүжиглэх, жиргэх зэргээр урамшуулдаг байв. Wii -ийг бүтээхэд сурч мэдсэн муруй байгаа хэдий ч даралтын дэвсгэр дээр тохирох цагт биеэр үсэрч тоглоомыг удирдах боломжийг олгодог тусгай төхөөрөмжийг бүтээхэд хялбар байдаг.

Энэхүү заавар нь би 'Space Bounce' тоглоомыг (https://marquisdegeek.com/spacebounce/ хаягаар https://github.com/MarquisdeGeek/SpaceBounce хаягаар шууд тоглох боломжтой) физик хянагч ашиглахад хэрхэн дасан зохицсоныг харуулж байна.

Хангамж

  • Ардуино
  • Хоёр даралтын дэвсгэр (минийх Маплинаас ирсэн
  • Даралтын дэвсгэрийн хувьд хоёр резистор (100 К, гэхдээ ихэнх нь зүгээр)
  • Хоёр LED (заавал биш)
  • LED -ийн хувьд хоёр резистор (100 К, гэхдээ ихэнх нь зүгээр. Мөн нэмэлт)
  • Зөөврийн компьютер

Алхам 1: Эргэн тойроорой

Эргэн тойроорой!
Эргэн тойроорой!

Би үсрэх интерфэйсийг зохион бүтээж эхэлсэн бөгөөд тоглоомыг хянаж үзэхэд хоёр дэвсгэртэй байх нь үндсэн санаагаа хамгийн сайн илэрхийлэх болно гэдгийг ойлгосон. Өөрөөр хэлбэл та зүүн ханан дээр барих мэдрэмжийг дуурайхын тулд зүүн дэвсгэр дээр зогсож, зохих мөчид баруун дэвсгэр рүү үсрэх бөгөөд таны дэлгэц дээрх дүр мөн адил болно.

Алхам 2: Дэрийг холбох

Хавтасыг холбох
Хавтасыг холбох
Хавтасыг холбох
Хавтасыг холбох

Тиймээс би хоёр дэвсгэр худалдаж аваад ажилдаа орлоо. Энд үзүүлсэн даралтын дэвсгэр нь миний олж мэдсэн хамгийн энгийн (бас хамгийн хямд!), Тус бүр 10 фунт стерлинг юм. Тэд дөрвөн утастай бөгөөд тэдгээрийн хоёр нь энгийн унтраалга шиг ажилладаг: та дэвсгэр дээр зогсоход холболт үүсч, үсрэх үед утас тасардаг. Би үүнийг энэ үндсэн хэлхээгээр Arduino -д өгсөн.

Алхам 3: Гэрлийг унтраах нь гайхалтай

Гэрлийг унтраах нь гайхалтай
Гэрлийг унтраах нь гайхалтай

Энэ нь ажилласан боловч тийм ч их урам зориг өгсөнгүй. Тиймээс, би даралтын дэвсгэр бүрийн төлөв байдлыг харуулахын тулд хэдэн LED нэмж оруулав.

LED нь тоглоом тоглох шаардлагагүй, гэхдээ тэдгээрийг хэлхээнд оруулснаар хэлхээний одоогийн төлөв байдал ямар байгааг би хялбархан харж чадна. Тиймээс, хэрэв тоглоом зөв хариу өгөхгүй байсан бол асуудал нь хэлхээ, Arduino програм хангамж эсвэл тоглоомын логиктой холбоотой эсэхийг шийдэх боломжтой байв.

Алхам 4: Кодыг эхлүүлж байна

Анхны тоглоом JavaScript дээр байсан тул би NodeJS програм бичихээр шийдсэн бөгөөд даралтын дэвсгэрийн өөрчлөлтийг сонсож, өгөгдлийг вэбсокетоор дамжуулан тоглоомын үйлчлүүлэгч рүү илгээдэг.

Нэгдүгээрт, Arduino дээр стандарт firmata суулгаарай, ингэснээр бид Node серверийг компьютер дээр ажиллуулж, Arduino -ийн төлөв байдлын өөрчлөлтийг сонсохын тулд Johnny Five номын санг ашиглах боломжтой болно. Дараа нь тоглоомын агуулгыг хүргэхийн тулд Express -ийг нэмнэ үү.

Серверийн код бүхэлдээ иймэрхүү харагдаж байна.

const express = шаарддаг ('илэрхийлэх');

const app = express (); const http = шаарддаг ('http'); const сервер = http.createServer (апп); const io = шаарддаг ('socket.io'). сонсох (сервер); const arduino = шаарддаг ('arduino-хянагч'); server.listen (3000, function () {console.log ('Экспресс сервер сонсож байна …');}); app.use ('/', express.static ('app')); const тав = шаардах ("Жонни-тав"); const board = new five. Board ({repl: false}); board.on ("бэлэн", функц () {ногоон = шинэ таван. Pin (3); io.on ('холбогдох', функц (сокет) {console.log ('Бид холбогдсон!'); LastLeft = false; lastRight = false; err, val) => {if (val) {green.on ();} other {green.off ();} if (val! == lastLeft) {lastLeft = val; let state = {side: 'left', төлөв: val? 'доош': 'дээш'} socket.emit ('arduino:: төлөв', JSON.stringify (төлөв), {for: 'хүн бүр'});}}) тав. Pin.read (баруун талд), (err, val) => {if (val) {red.on ();} else {red.off ();} // if (val! == lastRight) {lastRight = val; let state = {side: 'баруун', төлөв: val? 'доош': 'дээш'} socket.emit ('arduino:: төлөв', JSON.stringify (төлөв), {хувьд: 'хүн бүр'});}})}); });

Тэгээд ажиллуулдаг:

зангилааны сервер.js

Алхам 5: Тоглоомыг тохируулах

Эхний асуудал бол интерфэйс байв; Үсрэх л юм бол яаж тоглох товчлуур дээр дарах вэ? Би бусад бүх товчлууруудыг арилгах замаар үүнийг шийдсэн! Дараа нь тоглогч үсрэх бүрт "дээш" гэсэн үйл явдлын аль нэгийг сонсоод үлдсэн товчлуурыг дарж чадна.

залгуур = io (); socket.on ('arduino:: state', function (msg) {let data = JSON.parse (msg); if (data.state === 'up') {// бид үсэрч байна!}});

Эндээс би тоглоомонд орж, дэвсгэрийг илүү хөгжилтэй зүйлд ашиглах боломжтой боллоо - тоглоом өөрөө.

Алхам 6: Тоглогчийн үсрэх кодыг өөрчлөх

Энэ удаад би дэвсгэр бүрийг тус тусад нь авч үзэх хэрэгтэй бөгөөд тоглогчийн хөл дэвсгэрээс гарах бүрт дүрийг үсэрч эхлэх хэрэгтэй болно. Уурхайн босоо амыг дайран өнгөрөх дүр нь тоглогч нэг талаас хажуу тийш үсрэх хугацаанаас илүү урт байдаг. Энэ нь тоглогчид тэнцвэрээ сэргээж, хөлөө шалгаж, тоглогчийн үсрэлт хийж байгааг дэлгэц дээр харах боломжийг олгодог тул энэ нь сайн хэрэг юм. Хэрэв ийм зүйл байгаагүй бол би тоглогчийг удаашруулах байсан.

залгуур = io ();

socket.on ('arduino:: төлөв', функц (msg) {

өгөгдлийг зөвшөөрөх = JSON.parse (msg); if (data.side === 'left' && data.state === 'up') {// бид зүүн талаасаа үсэрч байна}});

Алхам 7: Гаралтыг өөрчлөх

Оролтын механизм ажиллаж байгаа тул би гаралт дээр ажиллах шаардлагатай болсон. Тоглоом нь таблет эсвэл утсан дээр сайн тоглодог, учир нь энэ нь дэлгэцийг дүүргэдэг. Гэхдээ та үсэрч байхдаа харах нь хэтэрхий жижиг тул дэлгэц дээрх тоглоомын талбайг томруулах хэрэгтэй. Олон!

Харамсалтай нь бүх график хөрөнгийг томруулах нь маш их цаг хугацаа шаардсан ажил юм. Тиймээс, би хуурсан! Тоглоом нь хулганы товшилтын X, Y байрлал, мэдрэгчтэй үйл явдлыг ойлгох шаардлагагүй тул би зурагны зургийг бүхэлд нь дахин томруулж чадна!

Энэ нь CSS болон JavaScript хоёуланг нь хакердсантай холбоотой бөгөөд одоо байгаа HTML5 зураг объектыг бүтэн дэлгэцээр ажиллуулах болно.

Цаашилбал, тоглоомыг 90 градус эргүүлэхэд шаардлагатай дэлгэцийн үл хөдлөх хөрөнгийг хамгийн их ашиглах зорилгоор хөрөг горимд тоглодог.

#SGXCanvas {

байр суурь: үнэмлэхүй; z-индекс: 0; хувиргах: эргүүлэх (-90 градус); хувиргах гарал үүсэл: баруун дээд; өргөн: авто; }

Алхам 8: Энэ нь ажилладаг

Энэ нь ажилладаг!
Энэ нь ажилладаг!

Эхний тоглоомондоо би зөөврийн компьютерээ хажуу тийш нь хазайлгаж, ингэж тоглосон.

Алхам 9: Өрөөг бэлтгэх

Өрөө бэлдэж байна
Өрөө бэлдэж байна

Физик хянагч бий болгох нь аяллын зөвхөн эхлэл бөгөөд төгсгөл биш юм. Үлдсэн физик орон зайг анхаарч үзэх хэрэгтэй.

Нэгдүгээрт, даралтын дэвсгэр нь таныг газардах үед шалан дээр эргэлддэг. Үүнийг хоёр талт наалдамхай дэвсгэрээр амархан засдаг. Тэд сайн ажилладаг, гэхдээ нэг их элэгдэлд тэсвэргүй байх.

Дараа нь зөөврийн компьютер нь жаахан тэнэг харагдаж байгаа нь тоглоомоос өөрийгөө сатааруулдаг. Тиймээс амралтын өрөөнөөс авсан зурагтыг "зээлж" орон нутгийн MakerSpace руу аваачиж, хананд наалдаж холбосон байна.

Ирээдүйд тоглогчийг чиглүүлэхийн тулд даралтын дэвсгэр дээр хөлийн ул мөр (Нил Армстронгын анхны хэвлэсэн зураг байж магадгүй!) Оруулах нь сайхан байх болно. ТВ -ийн илүү сайн бүрхүүл, хүрээ нь мэдрэмжийг нэмэгдүүлэх болно. Цаг зав, орон зай ихтэй та нар уурхайн босоо амнаас унах клаустрофобийн мэдрэмжийг дуурайж, дэвсгэрийнхээ хоёр талд байрлуулсан цаасан мачег чулуун нүүр хийж магадгүй юм.

Алхам 10: Бүрэн боллоо

Тэгээд тэнд танд байгаа. Анхны тоглоомыг сайжруулж, тоглож байхдаа чийрэгжүүлэх боломжийг олгодог хялбар өдрийн төсөл!

Энэ ажлын зарим хэсгийг багасгахын тулд та анхны тоглоомонд ашигладаг товчлуурыг шууд дуурайдаг Makey Makey ашиглаж болно. Гэхдээ энэ нь уншигчдын хувьд дасгал болж үлджээ:)

Бүх код Space Bounce репо дахь тусгай салбар дээр байна:

Зөвлөмж болгож буй: