Peli on ylhäältäpäin kuvattu 2D-räiskintä. Pelihahmo kääntyy hiirellä, eteen-, taakse- ja sivuliikkuminen tapahtuu näppäimistöllä. Kursori on piilotettu ja hiiren liikuttaminen sivulle kääntää hahmoa oman akselinsa ympäri, samaan tyyliin kuin esim. Tapan Kaikki -pelissä. Toimii muuten, mutta kursorin ajautuminen reunaan pysäyttää kääntymisen. Kuinka tämän saisi estettyä?
Koodi: RotateObject ukko,-MouseX()
Hiiriohjaus 2D-räiskinnässä [RATKAISTU]
-
- Newcomer
- Posts: 6
- Joined: Fri Dec 12, 2008 6:46 am
Hiiriohjaus 2D-räiskinnässä [RATKAISTU]
Last edited by GrinningGhoul on Sat Dec 13, 2008 6:53 am, edited 1 time in total.
-
- Active Member
- Posts: 163
- Joined: Fri Aug 31, 2007 7:07 pm
- Location: Helsinki
- Contact:
Re: Hiiriohjaus 2D-räiskinnässä
Aseta hiiri jokaisella luuppi kerralla ruudun keskelle (PositionMouse ScreenWidth()/2, ScreenHeight()/2) ja käytä RotateObjectissa MouseX():n sijaan MouseMoveX():ää.
EDIT: juu en ajatellu tuota rotateobjectia, eli sen tilalle turnobject
EDIT: juu en ajatellu tuota rotateobjectia, eli sen tilalle turnobject
Last edited by Aavesoturi on Fri Dec 12, 2008 11:18 am, edited 1 time in total.
-
- Newcomer
- Posts: 6
- Joined: Fri Dec 12, 2008 6:46 am
Re: Hiiriohjaus 2D-räiskinnässä
Kokeilin kursorin heittämistä ruudun keskelle mutta se sai hahmon pyörähtämään väärään suuntaan. Muistaakseni olen kokeillut myös MouseMoveX():ää, eikä sekään toiminut kunnolla. Valitettavasti en pääse nyt tarkistamaan asiaa, koska päivitin Coolbasicin juuri, eikä tässä versiossa jostain syystä toimi cbKey()-toiminto joten en pääse alkuvalikkoa pidemmälle... Oletko kokeillut että tuo esimerkkisi toimii?
Muistaakseni PositionMouse + MouseMoveX saivat ukon vain tärähtelemään paikallaan.
Muistaakseni PositionMouse + MouseMoveX saivat ukon vain tärähtelemään paikallaan.
Re: Hiiriohjaus 2D-räiskinnässä
Ihan hyvin se toimii. Tosin rotateobjectin tilalle turnobject ja sen pitää luonnollisesti tulla ennen hiiren sijoittamista keskelle.
Code: Select all
sotilas = LoadObject("media\soldier.bmp",72)
ShowMouse OFF
Repeat
TurnObject sotilas, Min(8,Max(-8,-MouseMoveX()))
MoveObject sotilas, (UpKey()-DownKey())*3, (RightKey()-LeftKey())*3
PositionMouse ScreenWidth()/2,ScreenHeight()/2
DrawScreen
Forever
-
- Newcomer
- Posts: 6
- Joined: Fri Dec 12, 2008 6:46 am
Re: Hiiriohjaus 2D-räiskinnässä
Joo, nyt toimii. Kiitoksia vain kummallekkin. Tuli mieleen että ehkä aikaisemmat viritykseni epäonnistuivat siinä että laitoin ne jonkinlaisen if-lausekkeen sisään kuten näppäimillä liikkumisenkin. Tuo Min ja Max -komentojen käyttö jää kyllä minulle vähän hämäräksi, varsinkin kun Coolbasicin oma esimerkki on niin yksinkertainen ja näyttää erilaiselta. Lähinnä tuo sulkeiden käyttö tuntuu oudolta. Jos pienen valaistuksen saisi tuon lausekkeen toimintaan, tyyliin miksi mikäkin on missäkin kohdassa niin olisi hyvä. Ei haluttaisi jättää ohjelmaan mitään kohtia joita ei täysin ymmärrä.
PS: Sain ohjelman toimimaan kun korvasin KeyHitit KeyDownilla, outo juttu. Versiossa 10.1 KeyHitit toimi kyllä.
PS: Sain ohjelman toimimaan kun korvasin KeyHitit KeyDownilla, outo juttu. Versiossa 10.1 KeyHitit toimi kyllä.
Re: Hiiriohjaus 2D-räiskinnässä [RATKAISTU]
Tuossa koodissa siis min() ja max() käytöllä rajoitin kääntymisen määrää per ruudunpiirtokierros. Se toimii ihan hyvin ilmankin, mutta silloin sotilas kääntyy holtittomasti jos hiirtä liikuttaa liikaa. Veikkaan, että min() max() toiminta koodissani selkiytyy aika paljon kun sen jakaa osiin:
En tiedä osasinko selittää selvästi, mutta viimeistään kokeilemalla oppii Mutta jos if-lausekkeiden käyttö on selvempää, kannattaa niitä toki suosia.
Code: Select all
kääntyminen = -MouseMoveX()
kääntyminen = Max(-8, kääntyminen) 'ei anneta sotilaan kääntyä oikealle kuin korkeintaan 8 astetta.
kääntyminen = Min(8, kääntyminen) 'sama rajoitus vasemmalle kääntymiseen.
TurnObject sotilas, kääntyminen
-
- Newcomer
- Posts: 6
- Joined: Fri Dec 12, 2008 6:46 am
Re: Hiiriohjaus 2D-räiskinnässä
Kyllä se nyt taisi aueta... kiitän. Oma logiikkani soti vain noiden sulkeiden käyttöä vastaan, kun molemmat menevät kiinnin vasta tuolla lopussa. Ja omassa aikaisemmassa yrityksessäni taisin yrittää lukea hiiren liikkeen kaksi kertaa; liikutetaanko vasemmalle vai oikealle. Tämä hiiriohjauksen epäkohta olikin piikkinä lihassa ihan liian kauan, joten tämä oli suuri voitto... Kumma muuten etten löytänyt vastaavaa ketjua joten piti kysyä itse. Useimmat ilmeisesti tekevät hiiriohjauksen juuri Pain! -tyyppisesti tai sitten ohjaavat vain näppäimistöllä. Tai sitten olen ainut joka ei osannut? Ja nyt en itse kirjoita tähän ketjuun enempää niin ei tule tarpeettoman pitkä, kun asia kerran on jo selvä.