Სარჩევი:

თამაშის ფიზიკური კონტროლერის შექმნა: 10 ნაბიჯი (სურათებით)
თამაშის ფიზიკური კონტროლერის შექმნა: 10 ნაბიჯი (სურათებით)

ვიდეო: თამაშის ფიზიკური კონტროლერის შექმნა: 10 ნაბიჯი (სურათებით)

ვიდეო: თამაშის ფიზიკური კონტროლერის შექმნა: 10 ნაბიჯი (სურათებით)
ვიდეო: 10 გასაოცარი სასარგებლო გამოგონება ბუჩქების გადარჩენისთვის კემპინგისთვის! შეიძლება დაგჭირდეთ! 2024, ივლისი
Anonim
თამაშის ფიზიკური კონტროლერის შექმნა
თამაშის ფიზიკური კონტროლერის შექმნა
თამაშის ფიზიკური კონტროლერის შექმნა
თამაშის ფიზიკური კონტროლერის შექმნა

როდესაც Nintendo Wii ამოქმედდა, მოთამაშეებს მოუწოდეს, დაეტოვებინათ დივანი და გადახტომოდნენ, ეცეკვებინათ და ეჩხუბათ, რათა მიეღოთ ქულები მათ მიერ არჩეულ თამაშში. მიუხედავად იმისა, რომ Wii– ს მშენებლობაში არის მკვეთრი სწავლის მრუდი, ადვილია ააწყოთ პერსონალური მოწყობილობა, რომელიც საშუალებას მოგცემთ გააკონტროლოთ თამაში ფიზიკურად ხტომა ზეწოლის ბალიშებზე შესაბამის დროს.

ეს ინსტრუქცია გვიჩვენებს, თუ როგორ მოვახერხე თამაში 'Space Bounce' (პირდაპირ ეთერში https://marquisdegeek.com/spacebounce/ წყაროსთან https://github.com/MarquisdeGeek/SpaceBounce) ფიზიკური კონტროლერის გამოსაყენებლად.

მარაგები

  • არდუინო
  • ორი ზეწოლის საგებები (ჩემი იყო Maplin– დან
  • ორი რეზისტორი, წნევის საგნისთვის (100 K, მაგრამ უმეტესობა კარგადაა)
  • ორი LED (სურვილისამებრ)
  • ორი რეზისტორი, LED- ებისთვის (100 K, მაგრამ უმეტესობა კარგადაა. ასევე სურვილისამებრ)
  • Ლეპტოპი

ნაბიჯი 1: ხტომა გარშემო

ხტომა გარშემო!
ხტომა გარშემო!

მე დავიწყე ხტომის ინტერფეისის დიზაინი და თამაშის განხილვისას მივხვდი, რომ ორი საგნის ქონა საუკეთესოდ გამოხატავდა მის მთავარ იდეას. ანუ, თქვენ დგახართ მარცხენა ხალიჩაზე, რათა მოახდინოთ მარცხენა კედელზე დაჭერის შეგრძნების სიმულაცია და შესაბამის მომენტში გადაახვიეთ მარჯვენა ხალიჩაზე და თქვენი ეკრანის პერსონაჟიც იგივეს გააკეთებს.

ნაბიჯი 2: ბალიშების დაკავშირება

ბალიშების დაკავშირება
ბალიშების დაკავშირება
ბალიშების დაკავშირება
ბალიშების დაკავშირება

შევიძინე ორი ხალიჩა და დავიწყე მუშაობა. აქ ნაჩვენები წნევის საგნები ყველაზე მარტივი (და იაფია!) რაც მე ვიპოვე, თითოეული 10 ფუნტად. მათ აქვთ ოთხი მავთული, რომელთაგან ორი მოქმედებს როგორც მარტივი გადამრთველი: როდესაც დგახართ ხალიჩაზე, ხდება კავშირი, ხოლო როდესაც ახტებით მაღლა ის გატეხილია. მე არდუინოში შევიტანე ეს ძირითადი წრე.

ნაბიჯი 3: სინათლის ფანტასტიკის ჩახშობა

ტრიალი სინათლის ფანტასტიკა
ტრიალი სინათლის ფანტასტიკა

ის მუშაობდა, მაგრამ არ იყო ძალიან შთამაგონებელი. ამრიგად, მე დავამატე რამდენიმე LED, თითოეული წნევის საგნის მდგომარეობის დასადგენად.

LED- ები არ არის საჭირო თამაშის სათამაშოდ, მაგრამ წრეში მათი დამატებით მე ადვილად ვხედავდი რას ფიქრობდა მიკროსქემის ამჟამინდელი მდგომარეობა. ამიტომ, თუ თამაში სწორად არ რეაგირებდა, მე შემეძლო განვსაზღვრო თუ პრობლემა იყო წრეში, არდუინოს პროგრამულ უზრუნველყოფაში ან თამაშის ლოგიკაში.

ნაბიჯი 4: კოდის დაწყება

იმის გათვალისწინებით, რომ ორიგინალური თამაში იყო JavaScript– ში, გადავწყვიტე დამეწერა NodeJS პროგრამა, რომელიც უსმენდა ზეწოლის მდგომარეობის ცვლილებებს და მონაცემებს უგზავნის ვებ – სოკეტების საშუალებით თამაშის კლიენტს.

პირველ რიგში, დააინსტალირეთ სტანდარტული ფირმა თქვენს Arduino– ზე ისე, რომ ჩვენ შევძლოთ Node სერვერის გაშვება კომპიუტერზე და გამოვიყენოთ Johnny Five ბიბლიოთეკა Arduino– ს მდგომარეობის ცვლილებების მოსასმენად. შემდეგ დაამატეთ ექსპრესი თამაშის შინაარსისთვის.

მთელი სერვერის კოდი ასე გამოიყურება:

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}); board.on ("მზადაა", ფუნქცია () {მწვანე მწვანე = ახალი ხუთეული. ლიდერი (5); ნება წითელი = ახალი ხუთეული. ლიდერი (6); ნება მარცხნივ = ახალი ხუთი. პინი (2); მარჯვენა მარჯვნივ = ახალი ხუთი. პინი (3); io.on ('დაკავშირება', ფუნქცია (სოკეტი) {console.log ('ჩვენ დაკავშირებულნი ვართ!'); ნება lastLeft = ყალბი; ნება lastRight = ყალბი; ხუთი. 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'});}}) five. 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'});}})}); });

და მუშაობს:

კვანძის სერვერი. js

ნაბიჯი 5: თამაშის ადაპტირება

პირველი პრობლემა იყო ინტერფეისი; როგორ 'დააწკაპუნებ' დაკვრის ღილაკზე, როდესაც ერთადერთი რაც შეგიძლია არის ხტომა? მე გადავწყვიტე ეს ყველა სხვა ღილაკის ამოღებით! მე შემიძლია გავააქტიურო დარჩენილი ღილაკი, როდესაც მოთამაშე ხტება, მოსმენისას 'up' მოვლენისთვის.

სოკეტი = io (); socket.on ('arduino:: state', function (msg) {let data = JSON.parse (msg); if (data.state === 'up') {// ჩვენ ვხტებით!}});

აქედან შევძელი თამაშში მოხვედრა და ბალიშების გამოყენება რაღაც უფრო სახალისოდ - თავად თამაში.

ნაბიჯი 6: მოთამაშის გადახტომის კოდის შეცვლა

ამჯერად დამჭირდება თითოეულ ბალიშზე ინდივიდუალურად გამკლავება და პერსონაჟის ხტუნვა დაიწყოს, როდესაც მოთამაშის ფეხი ტოვებს ბალიშს. ეკრანის პერსონაჟის მიერ ნაღმების გადაკვეთის დრო უფრო გრძელია, ვიდრე მოთამაშის მიერ ერთი მხრიდან გვერდზე გადასვლის დრო. ეს კარგია, რადგანაც ის აძლევს მოთამაშეს შანსს დაიბრუნოს წონასწორობა, შეამოწმოს ფეხი და უყუროს მოთამაშეს ეკრანზე ნახტომის დასრულებას. ეს რომ არ ყოფილიყო, მოთამაშეს შეანელებდი.

სოკეტი = io ();

socket.on ('arduino:: state', function (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 repo– ში:

გირჩევთ: