Hiiriohjaus 2D-räiskinnässä [RATKAISTU]

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
GrinningGhoul
Newcomer
Posts: 6
Joined: Fri Dec 12, 2008 7:46 am

Hiiriohjaus 2D-räiskinnässä [RATKAISTU]

Post by GrinningGhoul » Fri Dec 12, 2008 8:31 am

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()
Last edited by GrinningGhoul on Sat Dec 13, 2008 7:53 am, edited 1 time in total.

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: Hiiriohjaus 2D-räiskinnässä

Post by Aavesoturi » Fri Dec 12, 2008 11:17 am

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
Last edited by Aavesoturi on Fri Dec 12, 2008 12:18 pm, edited 1 time in total.

GrinningGhoul
Newcomer
Posts: 6
Joined: Fri Dec 12, 2008 7:46 am

Re: Hiiriohjaus 2D-räiskinnässä

Post by GrinningGhoul » Fri Dec 12, 2008 11:28 am

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.

User avatar
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Hiiriohjaus 2D-räiskinnässä

Post by Murskaaja » Fri Dec 12, 2008 11:58 am

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
ASCII star wars Xtreme | Cool Bombers | Combat (kehitteillä)

RedShadow productions

GrinningGhoul
Newcomer
Posts: 6
Joined: Fri Dec 12, 2008 7:46 am

Re: Hiiriohjaus 2D-räiskinnässä

Post by GrinningGhoul » Sat Dec 13, 2008 7:37 am

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ä.

User avatar
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Hiiriohjaus 2D-räiskinnässä [RATKAISTU]

Post by Murskaaja » Sat Dec 13, 2008 5:28 pm

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:

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
En tiedä osasinko selittää selvästi, mutta viimeistään kokeilemalla oppii :) Mutta jos if-lausekkeiden käyttö on selvempää, kannattaa niitä toki suosia.

GrinningGhoul
Newcomer
Posts: 6
Joined: Fri Dec 12, 2008 7:46 am

Re: Hiiriohjaus 2D-räiskinnässä

Post by GrinningGhoul » Sun Dec 14, 2008 4:47 am

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ä.

Post Reply