Kontrollilaitteet. Arsenaali



Samankaltaiset tiedostot
Peliohjelmointi: Kontrollilaitteet. Teppo Soininen

Kohti luonnollisempaa konsolipelaamista. Studio 4 harjoitus 3

Pelisuunnittelua tulevaisuudessa. Karoliina Korppoo / Colossal Order

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

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

BEYOND: Two Souls BEYOND Touch Sovellus

Reaaliaikainen yli 2 pelaajan moninpeli mobiilille!

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

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

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

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

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

Toimitsijaohjeet Kurran G2-F1-joukkueille

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

IR-lämpömittarityypit

IR-lämpömittarityypit

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

OHJ-2710 Peliohjelmointi. Syksy 2012 Timo Kellomäki

Pyöräkuormaajasimulaattori

Force Feedback Race Master

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

oppimispeli esi- ja alkuopetusikäisten lasten matemaattisten taitojen tukemiseen

Konfiguraatiotyökalun päivitys

Pelaaminen haltuun johdatus digitaalisen pelaamisen kulttuuriin

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

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

Riikka Marttinen, Helsingin Tikoteekki, Windows 7:n helppokäyttötoiminnot

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

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

Pinta-ala- ja tilavuuskäsitteiden oppimispeli

Ongelmallisesti pelaavan nuoren auttaminen

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

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

C++-harjoitustyön raportti: Musta maija

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

Oppiminen ja oivaltaminen

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

Ensimmäinen vilaus N-Gagesta nähtiin viime

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

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

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

FORMULA 1 RACE MASTER

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Näppäri kymmensormiharjoitusohjelma Helsingin ATK-Palvelu Oy

Helppokäyttöisyyttä Windows Vista käyttöjärjestelmän asetuksilla

SoberIT Software Business and Engineering Institute T Testaussuunnitelma paperiprototyyppi ja Kevät 2003 HELSINKI UNIVERSITY OF TECHNOLOGY

Luento 8. June 3, 2014

Monipuolinen esimerkki

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

Ohjelmistojen mallintaminen, sekvenssikaaviot

1. Taustatietoa näppäimistönkuuntelusta

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

Jypelin käyttöohjeet» Ruutukentän luominen

Bayesin pelit. Kalle Siukola. MS-E2142 Optimointiopin seminaari: Peliteoria ja tekoäly

Kodu Ohjeet. Jos päivityksiä ei löydy niin ohjelma alkaa latautumaan normaalisti.

LAITTEISTOKOKOONPANON SELVITTÄMINEN JA AJURIEN ASENTAMINEN

Olio-ohjelmointi Javalla

BL40A1711 Johdanto digitaaleketroniikkaan: Sekvenssilogiikka, pitopiirit ja kiikut

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

Evolutiivisesti stabiilin strategian oppiminen

Pelilabra. Pelilabra on noin minuuttia pitkä, pääasiallisesti nopaton skenaario jossa pelaajat kokevat tyypillisen Oululaisen pelikoulutuksen.

OPETTAMINEN VIRTUAALIYMPÄRISTÖSSÄ

Visma Fivaldi -käsikirja Asiakaskohtaiset hinnat

Heuristiikat liikeohjattavien pelien suunnitteluun ja arviointiin. Minna Hara

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

CSC:N SHAKKIKOULU. esittää: Kuinka mestari ajattelee?

D505 Laitteiden käyttöohjeet. Ajatus liikkuu iloa oppimiseen!

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

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

LUMATE-tiedekerhokerta, suunnitelma AIHE: PELIT JA TAKTIIKAT

Nollasummapelit ja bayesilaiset pelit

Rajapinta (interface)

Made for efficient farmers

VEIKKAUKSEN VERKKOKUMPPANUUS

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

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

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Tutkimustiedonhallinnan peruskurssi

Säännöt & Asetukset. Säännöt & Asetukset. Versio 1.00 /

RollerMouse Pro3 Käyttöohje

SYÖTTÖPOHJA LUKUJEN SYÖTTÖÖN ERI TARKOITUKSIIN

OHJ-1160 Laaja Ohjelmointi 2

Seniorit ja tietokonepelit. Tietokonepelien pelaamisesta senioreiden näkökulmasta. Seniorien pelitapahtuma Enter ry

Ongelma(t): Mistä loogisista lausekkeista ja niitä käytännössä toteuttavista loogisista piireistä olisi hyötyä tietojenkäsittelyssä ja tietokoneen

Muutamia peruskäsitteitä

5 Näppäimistö. 5.1 Näppäimistön eventit

Metodien tekeminen Javalla

JOHDATUS TEKOÄLYYN TEEMU ROOS

Lasten ja nuorten pelaaminen Lastensuojelun Keskusliitto

Ulkoiset laitteet Käyttöopas

Oppiminen ja oivaltaminen

Ohjelmoinnin perusteet Y Python

Sekvenssipiirin tilat

7/20: Paketti kasassa ensimmäistä kertaa

Ongelma(t): Mistä loogisista lausekkeista ja niitä käytännössä toteuttavista loogisista piireistä olisi hyötyä tietojenkäsittelyssä ja tietokoneen

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

TORNADO -PELIKUULOKKEET

AUTO3030 Digitaalitekniikan jatkokurssi, harjoitus 2, ratkaisuja

Transkriptio:

Arsenaali Kontrollilaitteet 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) Lähteet: Core Techniques and Algorithms in Game Programming, MSDN, www.xbox.com, www.playstation.com 2 Useimpiin alustoihin saa hankittua vakiolaitteiden lisäksi erikoisempia kontrollilaitteita joita kuitenkin tuetaan useissa erikoistuneemmissa peleissä Joystick (mm. lentopelit) Ratti ja polkimet (mm. autopelit) Markkinat ovat täynnä myös paljon erikoisempia laitteita Tanssimatto Polkupyörä Onkivapa Eyetoy Näppäimistöt konsoleille (ei vättämättä tehty pelit mielessä) Nintendon Zapper (mm. Duck hunt) 3 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 6 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) 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 7 8

Hyvä ratkaisu pelejä varten Ei järkevää esim. Menuissa 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) 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 10 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 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 100 50-100 100 11 12

F(x) -100-50 100 50-100 100 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 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) -100-50 50 100 13 14 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 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 15 16

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 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 ) ); 17 18