Мазмуну:

Физикалык оюн контроллерин түзүү: 10 кадам (сүрөттөр менен)
Физикалык оюн контроллерин түзүү: 10 кадам (сүрөттөр менен)

Video: Физикалык оюн контроллерин түзүү: 10 кадам (сүрөттөр менен)

Video: Физикалык оюн контроллерин түзүү: 10 кадам (сүрөттөр менен)
Video: Тануки жогорку ылдамдыкта дөбөдөн түшүп баратат!! 🛹🌪🦊 - Tanuki Sunset Classic GamePlay 🎮📱 🇰🇬 2024, Июль
Anonim
Физикалык оюн контроллерин түзүү
Физикалык оюн контроллерин түзүү
Физикалык оюн контроллерин түзүү
Физикалык оюн контроллерин түзүү

Nintendo Wii ишке киргизилгенде, оюнчуларга диванды таштап, тандоо оюнунда упай топтоо үчүн секирүү, бийлөө жана чайкоо талап кылынган. Wii үчүн куруунун кыйшык сызыгы бар болсо да, оюнду көзөмөлдөөгө мүмкүндүк берген, ыңгайлаштырылган түзмөктү куруу оңой учурда, басымдын үстүнө физикалык түрдө секирүү аркылуу.

Бул көрсөтмө менин "Space Bounce" оюнун (https://marquisdegeek.com/spacebounce/ дареги боюнча https://github.com/MarquisdeGeek/SpaceBounce) физикалык контроллерди колдонууга кантип ылайыкташтыргандыгымды көрсөтөт.

Жабдуулар

  • Arduino
  • Эки басымдуу төшөк (меники Маплинден болгон
  • Эки резистор, басым төшөгү үчүн (100 К, бирок көбү жакшы)
  • Эки LED (милдеттүү эмес)
  • Светодиоддор үчүн эки резистор (100 К, бирок көбү жакшы. Ошондой эле милдеттүү эмес)
  • Ноутбук

1 -кадам: айланып секирүү

Айланайын!
Айланайын!

Мен секирүүчү интерфейсти долбоорлоо менен баштадым жана оюнду карап чыккандан кийин, эки төшөктүн болушу анын негизги идеясын эң жакшы билдирерин түшүндүм. Башкача айтканда, сиз сол дубалда кармоо сезимин окшоштуруу үчүн сол матта турасыз жана керектүү учурда оң төшөккө секирип өтөсүз, жана сиздин экрандын каарманы дагы ошондой кылмак.

2 -кадам: Пластинкаларды туташтыруу

Патчтарды туташтыруу
Патчтарды туташтыруу
Патчтарды туташтыруу
Патчтарды туташтыруу

Ошентип, мен эки төшөк сатып алып, иштөөгө туура келди. Бул жерде көрсөтүлгөн басым төшөктөрү мен тапкан эң жөнөкөй (жана эң арзан!), Ар бири 10 фунт. Аларда төрт зым бар, алардын экөөсү жөнөкөй өчүргүч сыяктуу иштейт: төшөктө турганыңызда, байланыш түзүлөт, ал эми секиргенде үзүлөт. Мен муну Arduinoго ушул негизги схема менен бердим.

3 -кадам: Жарыкты өчүрүү фантастикалык

Жарыкты өчүрүү фантастикалык
Жарыкты өчүрүү фантастикалык

Бул иштеди, бирок абдан шыктандыруучу болгон жок. Ошентип, мен ар бир басым килемчесинин абалын көрсөтүү үчүн бир нече LED коштум.

Жарык диоддору оюнду ойнотуу үчүн талап кылынбайт, бирок аларды схемага кошуу менен мен учурдагы абал кандай болгонун оңой эле көрө алдым. Ошондуктан, эгер оюн туура реакция кылбаса, анда көйгөй схемада, Arduino программасында же оюндун логикасында болсо, мен иштеп чыкмакмын.

4 -кадам: Кодду баштоо

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

Биринчиден, стандарттык фирманы Arduinoго орнотуңуз, ошондо биз Node серверин иштете алабыз жана Johnny Five китепканасын колдонуп, Arduinoдон абалдын өзгөрүшүн угушат. Андан кийин оюндун мазмунун тейлөө үчүн Express кошуңуз.

Бүт сервер коду мындай көрүнөт:

const express = талап кылуу ('экспресс');

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

Жана иштетилет:

түйүн server.js

5 -кадам: Оюнду адаптациялоо

Биринчи көйгөй интерфейс болгон; кантип секирүү керек болгондо ойнотуу баскычын кантип "басасыз"? Мен муну башка бардык баскычтарды жок кылуу менен чечтим! Мен оюнчу секирген сайын калган баскычты иштете алам, же "жогору" окуяны угуу менен.

розетка = io (); socket.on ('arduino:: state', function (msg) {let data = JSON.parse (msg); if (data.state === 'up') {// биз секирип жатабыз!}});

Бул жерден мен оюнга кире алдым, жана оюнчуктарды дагы кызыктуу нерсеге колдоно алдым - оюндун өзү.

6 -кадам: Player секирүү кодун өзгөртүү

Бул жолу мен ар бир төшөк менен жекече иштешим керек жана оюнчунун буту төшөктөн чыкканда мүнөзү секире баштайт. Экранда каармандын мина шахтасынан өтүү убактысы оюнчунун бир жактан капталга секирүү убактысынан узагыраак. Бул жакшы нерсе, анткени ал оюнчуга тең салмактуулугун калыбына келтирүүгө, бутун текшерүүгө жана оюнчунун экранда секирип бүтүшүн көрүүгө мүмкүнчүлүк берет. Эгер андай болбогондо, мен оюнчуну жайлатып коймокмун.

розетка = io ();

socket.on ('arduino:: абал', функция (msg) {

маалымат болсун = JSON.parse (msg); if (data.side === 'left' && data.state === 'up') {// биз сол жактан секирип жатабыз}});

7 -кадам: Чыгууну өзгөртүү

Киргизүү механизми иштеп жатканда, мен чыгуунун үстүндө иштешим керек болчу. Оюн планшетте же телефондо жакшы ойнойт, анткени ал экранды толтурат. Бирок, сиз секирип баратканыңызда, аны көрүү үчүн өтө кичине, андыктан экранда ойноо аянтын чоңойтуу керек. Көп!

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

Бул CSS менен JavaScriptти бузууга алып келди, андыктан HTML5 кенеп объектиси толук экранда иштейт.

Мындан тышкары, оюн портрет режиминде ойнолот, бул биз кенепти 90 градуска буруш үчүн керек болгон кыймылсыз мүлктү максималдуу түрдө колдонууну билдирет.

#SGXCanvas {

позиция: абсолюттук; z-index: 0; айландыруу: айлантуу (-90deg); трансформация келип чыгышы: жогорку оң; туурасы: авто; }

8 -кадам: Бул иштейт

Ал иштейт!
Ал иштейт!

Биринчи оюнумда ноутбугумду жантайып, минтип ойнодум.

9 -кадам: Бөлмөнү даярдоо

Бөлмөнү даярдоо
Бөлмөнү даярдоо

Физикалык контроллерди куруу - бул сапардын башталышы гана, аягы эмес. Калган физикалык мейкиндикти эске алуу керек.

Биринчиден, басымдык төшөктөр сиз жерге түшкөндө полго айланды. Бул оңой эле эки тараптуу жабышчаак жаздыктар менен оңдолду. Алар жакшы иштешет, бирок, балким, бир топ эскирүүнү көтөрө алышпайт.

Андан кийин, ноутбук бир аз келесоо көрүнөт, бул сизди оюндун өзүнө алаксытат. Ошентип, эс алуу бөлмөсүндөгү сыналгыны "карызга" алып, жергиликтүү MakerSpaceке алып барышты, ал дубалга орнотулуп, туташтырылды.

Келечекте оюнчуну жетектөө үчүн кысымдык төшөктөргө (балким, Нил Армстронгдун биринчи айынын басылышы!) Издин изин кошуу жакшы болмок. Ошондой эле телевизор үчүн жакшыраак корпус жана курчоо сезимге кошумча болмок. Балким, убактыңыз жана мейкиндигиңиз барлар, шахтанын шахтасынан кулап түшкөн кластрофобдук сезимди тууроо үчүн, килемчелердин эки капталына жайгаштырылган, кагаздан жасалган маше рок бетин жасай алышкандыр!

10 -кадам: Бул толук

Жана ал жерде сизде бар. Оригиналдуу оюнду жакшырткан жана аны ойноп жатканда формаңызды сактаган жеңил күндүк долбоор!

Бул иштин айрымдарын азайтуу үчүн, түпнуска оюнда колдонулган баскычтарды түздөн -түз окшоштуруучу Makey Makeyди колдонсоңуз болот. Бирок бул окурман үчүн көнүгүү катары калды:)

Бардык коддор Space Bounce репонун атайын бөлүмүндө:

Сунушталууда: