Peliohjelmointi: Kontrollilaitteet. Teppo Soininen



Samankaltaiset tiedostot
Kontrollilaitteet. Arsenaali

Kohti luonnollisempaa konsolipelaamista. Studio 4 harjoitus 3

Pelisuunnittelua tulevaisuudessa. Karoliina Korppoo / Colossal Order

Pelaajat siirtävät nappuloitaan vastakkaisiin suuntiin pelilaudalla. Peli alkaa näin. Tuplauskuutio asetetaan yhtä kauas kummastakin pelaajasta.

Jypelin käyttöohjeet» Miten lisään ohjaimet peliin

BEYOND: Two Souls BEYOND Touch Sovellus

Såsom i ett spel Kirjasto pelissä. Verkko haltuun! Nätet i besittning!

Reaaliaikainen yli 2 pelaajan moninpeli mobiilille!

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

1 Tehtävän kuvaus ja analysointi

Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi

Pyöräkuormaajasimulaattori

Anna kehittävä pelihetki lapselle tai lapsille MIKSI? Tutun Hedelmätarha pelin toiminnan analyysi soveltuu moniin perinteisiin lautapeleihin.

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

OHJ-2710 Peliohjelmointi. Syksy 2012 Timo Kellomäki

Kajak Games uuden sukupolven yrittäjät. Pressure Cooker Kimmo Nikkanen, Kajak Games Osk

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009

Force Feedback Race Master

FORMULA 1 RACE MASTER

Ohjelmistojen mallintaminen, sekvenssikaaviot

Matinteko (1 / 10) Matinteko (2 / 10) Helpointa matin tekeminen on kahdella raskaalla upseerilla (esim. kuningattarella ja tornilla).

Excelin käyttö mallintamisessa. Regressiosuoran määrittäminen. Käsitellään tehtävän 267 ratkaisu.

Olio-ohjelmointi Javalla

BL40A1711 Johdanto digitaaleketroniikkaan: Sekvenssilogiikka, pitopiirit ja kiikut

Pinta-ala- ja tilavuuskäsitteiden oppimispeli

OPETTAMINEN VIRTUAALIYMPÄRISTÖSSÄ

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

oppimispeli esi- ja alkuopetusikäisten lasten matemaattisten taitojen tukemiseen

39DLL by 39ster. Nettipeli Tutorial by Lauri Paavolainen heinäkuuta ) Intro :

Made for efficient farmers

LUMATE-tiedekerhokerta, suunnitelma AIHE: PELIT JA TAKTIIKAT

Pelaaminen haltuun johdatus digitaalisen pelaamisen kulttuuriin

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

JOHDATUS TEKOÄLYYN TEEMU ROOS

Tutkimus peliohjaimen käytöstä Super Smash Bros. Melee pelissä. Aleksanteri Karanka

Tietorakenteet, laskuharjoitus 7, ratkaisuja

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Jypelin käyttöohjeet» Ruutukentän luominen

Raspberry Pi. Yhden piirilevyn tietokone. Tässä dokumentissa kerrotaan yleistä tietoa Rasberry Pi- tietokoneesta ja. sen toiminnoista.

Tietokoneen rakenne: Harjoitustyö. Motorola MC prosessori

CHERMUG-pelien käyttö opiskelijoiden keskuudessa vaihtoehtoisen tutkimustavan oppimiseksi

Luento 8. June 3, 2014

Epätäydellisen tiedon jatkuvat pelit. Mika Viljanen Peliteorian seminaari

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Puzzle SM Pistelasku

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

2. luento. CS-C2110 Ohjelmointistudio 1: mediaohjelmointi Syksy 2016 [Studio 1] Antti Tolppanen, Sanna Suoranta, Lauri Savioja

Hintakilpailu lyhyellä aikavälillä

PELITOIMINNOT NUORISOTYÖN VÄLINEENÄ. Marko Tiusanen Oulun nuorisotoimi Messi-hanke

IR-lämpömittarityypit

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Signaalien datamuunnokset. Näytteenotto ja pito -piirit

KANSAINVÄLISEN PELIN VAATIMUKSET SJL Lasse Sampakoski

BJR F2 (05) Vanhempainkokous

Heuristiikat liikeohjattavien pelien suunnitteluun ja arviointiin. Minna Hara

IR-lämpömittarityypit

Graafisen käyttöliittymän ohjelmointi

JYRSIN SISÄLLYSLUETTELO:

Toistetut pelit Elmeri Lähevirta. MS-E2142 Optimointiopin seminaari: Peliteoria ja tekoäly

LAITTEISTOKOKOONPANON SELVITTÄMINEN JA AJURIEN ASENTAMINEN

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.

5G Nopeasta tiedonsiirrosta älykkäisiin verkkoihin

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

JS-kehitys - yleiskuvaus. TIEA255 - Juho Vepsäläinen

SISÄLTÖ Xbox LIVE... 2 OHJAUSKOMENNOT... 2 PELIN ALOITTAMINEN... 3 PELINÄYTTÖ... 4 ASIAKASTUKI... 5

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

KESKEISIMMÄT OPPIMISTAVOITTEET KOROSTETTAVAT YDINKOHDAT. TEKNISET TAIDOT perusluistelu - liu ut

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

Teknologia strategisen oppimisen apuvälineenä. Jonna Malmberg Oppimisen ja Koulutusteknologian tutkimusyksikkö

Alkuun HTML5 peliohjelmoinnissa

TORNADO -PELIKUULOKKEET

Selaimen kautta käytettävällä PaikkaOpin kartta-alustalla PaikkaOppi Mobiililla

Peliteoria luento 1. May 25, Peliteoria luento 1

ELEC-C3240 Elektroniikka 2

TIES474 Pelinkehityshaaste Kesä syklin purku & 2. aloitus. Jukka Varsaluoma

Verilogvs. VHDL. Janne Koljonen University of Vaasa

Ohjelmoinnin peruskurssi Y1

Toiminnan järjestäminen JyPK:n juniorijoukkueissa. 5v5 joukkueet (6-9v)

Muutamia peruskäsitteitä

Ongelmallisesti pelaavan nuoren auttaminen

Lasten ja nuorten pelaaminen Lastensuojelun Keskusliitto

Tasohyppelypeli. Piirrä grafiikat. Toteuta pelihahmon putoaminen ja alustalle jääminen:

Asynkroninen ohjelmointi.net 4.5 versiolla

Lataa Liikaa pelissä? (20 kpl) - Mari Pajula. Lataa

Mainonta ja tuotesijoittelu digitaalisissa peleissä. Olli Raatikainen Viestintätieteet

MAT Todennäköisyyslaskenta Tentti / Kimmo Vattulainen

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Toiminnan järjestäminen JyPK:n juniorijoukkueissa. 5v5 joukkueet (6-9v)

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

BM20A5840 Usean muuttujan funktiot ja sarjat Harjoitus 7, Kevät 2018

Transkriptio:

Peliohjelmointi: Kontrollilaitteet Teppo Soininen Lähteet: Core Techniques and Algorithms in Game Programming, MSDN, www.xbox.com, www.playstation.com

Arsenaali Tietokonepeleissä käytettäviä kontrollilaitteita on valtava määrä Kaikilla alustoilla, joilla pelejä pelataan on jokin vakio kontrolleri PC: Hiiri ja näppäimistö Konsolit: Controller Pad (nimitykset vaihtelee valmistajan mukaan) 2

Useimpiin alustoihin saa hankittua vakiolaitteiden lisäksi erikoisempia kontrollilaitteita joita kuitenkin tuetaan useissa erikoistuneemmissa peleissä Joystick (mm. lentopelit) Ratti ja polkimet (mm. autopelit) Näppäimistöt konsoleille (ei vättämättä tehty pelit mielessä) Nintendon Zapper (mm. Duck hunt) 3

Markkinat ovat täynnä myös paljon erikoisempia laitteita Tanssimatto Polkupyörä Onkivapa Eyetoy 4

Näppäimistö Näppäimistöön saadaan määriteltyä todella suuri määrä toiminnallisuutta Yli sata nappulaa + kombinaatiot Hyvä peleihin joissa pelaajalla on hallittavanaan paljon toiminnallisuutta Hidas oppia (etenkin lasten) Näppäimistön tilan esittämiseen on monia eri tapoja alustasta riippuen esim.: Win32 metodit GetKeyState() ja GetAsyncKeyState() kertoo yhden näppäimen tilan kerrallaan Win32 metodi GetKeyboardState() palauttaa osoittimen 256 tavun taulukkoon joka kertoo kaikkien näppäinten tilan 5

Kontrollit voidaan koodata selvittämällä jokaisen nappulan tila yksitellen seuraavasti if ( ( GetKeyState( VK_RCONTROL ) & 0x80 ) && ( GetKeyState( VK_NUMPAD8 ) & 0x80 ) ) { g_camera.jump(); } if ( GetKeyState( VK_RIGHT ) & 0x80 ) { g_camera.strafe( -0.1f ); } Ei välttämättä hyvä tapa toteuttaa, sillä jokainen GetKeyState() metodi tarvitsee oman systeemikutsun GetKeyboardState( kb_state ); if ( ( kb_state[ VK_RCONTROL ] & 0x80 ) && ( kb_state[ VK_NUMPAD8 ] & 0x80 ) ) { g_camera.jump( 1.0f ); }... Parempi tapa, sillä tarvitaan vain yksi systeemikutsu (usein nopeampaa) 6

Näppäimistöltä saadun datan käsittelyn voi tehdä synkronisesti tai asynkronisesti Synkroninen: ohjelma odottaa käyttäjän syötettä näppäimistöltä ja toimii vasta kun syöte on saatu Yksinkertainen toteuttaa Ei kuluta turhaan laskentatehoa jos mitään ei tarvitse tehdä ennen kuin syöte on saatu Toimii hyvin menuissa, ei-reaaliaikasovelluksissa ja erikoisemmissa peleissä (esim. The Incredible Machine) Asynkroninen: kysytään jatkuvasti nappuloiden tilaa ja jatketaan ohjelman suorittamista vaikka mitään nappulaa ei olisi paineettukaan Hyvä ratkaisu pelejä varten Ei järkevää esim. Menuissa 7

Peleissä usein järkevää tehdä eri tilanteisiin erityyppiset toteutukset Menuissa synkronista ja pelissä asynkronista Pelissä saattaa ilmetä tilanteita joissa koko ohjelma on hyvä saada staattiseen tilaan odottamaan jotain komentoa Pelin keskeyttäminen (pelaaja saattaa haluta tehdä jotain muuta tietokoneellaan kesken pelin) Uuden tason pelaamisen aloittaminen (pelaaja saattaa haluta valmistautua tulevaan koitokseen) 8

Hiiri Osotinlaite palauttaa 2D koordinaatin sekä yhden tai useamman nappulan tilan Hiireltä saatu 2D koordinaatti esitetään usein muutoksena edellisestä tilanteesta Nappuloiden tilat voidaan käsitellä samaan tapaan kuin näppäimistön nappuloiden tilat Hiiren käyttö on huomattavasti helpompi oppia kuin näppäimistön Hyvä tapa hoitaa kriittisiä toimintoja Yksittäin varsin rajallinen (ellei käytä innovatiivista suunnittelua kuten esim. Doom 3:ssa) 9

Joystick Joystick palauttaa tiedon tikun asennosta ja mahdollisten nappuloiden tilasta Vanhat tikut palauttivat vain arvoja 1 ja 0 sen mukaan mihin sitä väänsi (9 arvoa: C, N, W, S, E, NW, NE, SW, SE) Nykyään lähes kaikki tikut palauttavat arvoja joltain min-max väliltä (suuntiakin saattaa olla enemmän, esim. tikun varren kierto) Joystickin käyttö on hyvin intuitiivista Joystickin nappeja voidaan käsitellä samaan tapaan kuin näppäimisön nappeja 10

Joystickin vastekäyrä on vakiona usein lineaarinen Useissa peleissä saattaa ilmetä tarvetta muuttaa joystickin vastekäyrää jonkin funktion F(x) mukaan F(x) -100-50 50 100-100 100 F(x) -100-50 50 100-100 100 11

Joystickeissa saattaa olla enemmänkin analogisia säätimiä Vastekäyrä samanlainen kuin edellä, skaala saattaa olla erilainen Käsittelyn voi hoitaa samaan tapaan kuin itse tikullekin -100-50 50 100 Joissain joystickeissa Force Feedback valmius Ohjaimessa moottoreita joita ohjaillaan ohjelmistollisesti Parantaa hyvin käytettynä pelikokemusta Ideana tehdä valmiita efektejä joita suoritetaan ohjelmassa halutuissa tilanteissa Ohjelmoiminen riippuu paljon API:sta (DirectInput, SDL) 12

Game Pad Tyypillinen Padi (Xbox, PlayStation): 2 analogista ohjainta 1 digitaalinen ohjain Nappuloita Ohjaimia käsitellään samalla tavalla kuin joystickin tikkua Mahdollisia ongelmia: kontrolli toimii kahdella eri ohjaimella samanaikaisesti Nappuloita voi käsitellä samaan tapaan kuin näppäimistön nappuloita Xbox:n ohjaimessa on analogisia nappuloita joilla 256 eri tasoa Voidaan käsitellä samaan tyyliin kuin analogisia suuntohjaimia 13

Kontrollilaite abstraktio Kontrollilaitteet vaikuttavat paljon pelin pelattavuuteen Erilaisten kontrollilaitteiden tukeminen parantaa pelikokemusta Pelaajan olisi hyvä pystyä customoimaan kontrolleja Kooditasolla saattaa olla työlästä toteuttaa toiminnallisuus kaikille kontrollilaitteille erikseen Järkevä suunnittelu vähentää työmäärää huomattavasti Tehdään kooditasolla geneerinen kontrolleri luokka Sisältää funktiot kaikkien pelin toimintojen ohjaamiseen Kantaluokasta periytetään jokaista laitetta varten oma luokkansa jota pelissä käytetään 14

1. Periytetyt luokat hakevat kontrollilaitteelta tiedon annetusta syötteestä 2. Käsitellään saatu syöte (mihin toimintoon mikäkin nappula on mapatty, lasketaan vastekäyrän muutos jne.) 3. Kutsutaan kantaluokan metodeja käsitellyn syötteen perusteella 15

Esimerkki: hiiri luokan Update() metodi void Update() { // Haetaan syöte POINT mousepos; GetCursorPos( &mousepos );... //Käsitellään syötettä axis.x = ( direction.y * m_up.z ) - ( direction.z * m_up.y ); axis.y = ( direction.z * m_up.x ) - ( direction.x * m_up.z ); axis.z = ( direction.x * m_up.y ) - ( direction.y * m_up.x );... // Kutsutaan kantaluokan metodeja Rotate( y_rotation, axis ); Rotate( -y_direction, D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) ); } 16