Hiiri tähtäin

Voit pyytää apua ohjelmointiongelmiin täältä.
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Hiiri tähtäin

Post by Re1z0r »

En ymmärrä miksei tämä toimi. No en kuitenkaan ole kauheasti koodannut pelejä niin ehkä jotain jäi huomaamatta :roll: .

[codebox]

Code: Select all

'FPS

peli:


Type monsterit
    Field obj
End Type



FrameLimit 40

monsteri = LoadObject("media\cow.bmp"360)
ShowObject monsteri,OFF



tähtäin = LoadObject("media\target.bmp"360)

vihu.monsterit = New(monsterit)
vihu\obj=CloneObject(monsteri)

Repeat
    
    If MouseHit(1) And ObjectsOverlap(monsteri,tähtäin,2) Then
        DeleteObject vihu\obj
        Delete vihu
    EndIf    
    
    PositionObject tähtäin, MouseX(),MouseY()
    
    DrawScreen

Forever  
[codebox]
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Hiiri tähtäin

Post by TheFish »

Asetat tähtäimen sijainnin maailman koordinaateilla, mutta mousex() ja mousey() palauttavat ruudun koordinaatteja. Komenna

Code: Select all

ScreenPositionObject tähtäin, MouseX(),MouseY().
Vähän aiheen vierestä voisi sanoa, että et tarvitse pyöritysarvoja ainakaan tähtäimelle, joten kannattaa jättää se 360 objektin latauksen lopusta pois.
CoolBasic henkilökuntaa
Kehittäjä
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Re: Hiiri tähtäin

Post by Re1z0r »

Ei mun coolBasic tue tollasta komentoa, sattuu olemaa vähä vanhempi versio ku uusin sekoaa koneella nii pahasti että hirvittää :( Olisko mitää koodii Beta 10.2?? Nii ja ku yrittää pistää tota komentoo nii tulee joku muu virheilmotus ku MAV. Joku fatal error.
iTKEVAnAKKI
Advanced Member
Posts: 335
Joined: Tue Aug 28, 2007 3:55 pm
Location: Siellä jossain

Re: Hiiri tähtäin

Post by iTKEVAnAKKI »

Toimiiko edes MouseWX() ja MouseWY()?? En tiedä mitä eroja näillä versioilla on...
Projektit:
Joku projekti meneillään... Mitähän siitäkin tulee ;)
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Re: Hiiri tähtäin

Post by Re1z0r »

Ikävä kyllä ei. Alun perin kokeilin tota koodia ku luin sen täält foorumilt.
User avatar
vilQuri
Active Member
Posts: 239
Joined: Wed Aug 29, 2007 6:25 pm
Location: Turku

Re: Hiiri tähtäin

Post by vilQuri »

Kylläpäs toimii Minulla ainakin!!

Ongelmana on se että sinulla lukee sielä "PositionObject tähtäin, MouseX() ,MouseY()"
siellä pitäisi olla "PositionObject tähtäin, MouseWX() ,MouseWY()" Koska MouseX() ja MouseY() kertovat vain hiiren sijainnin vaaka suunnassa
mutta kun taas MouseWX() ja MouseWY() kertovat hiiren sijainnin pelimailmassa. Tässä koodisi korjattu versio:

Code: Select all

'FPS

peli:


Type monsterit
    Field obj
End Type



FrameLimit 40


monsteri = LoadObject("media\cow.bmp"360)
ShowObject monsteri,OFF



tähtäin = LoadObject("media\target.bmp"360)

vihu.monsterit = New(monsterit)
vihu\obj=CloneObject(monsteri)

Repeat
   
    If MouseHit(1) And ObjectsOverlap(monsteri,tähtäin,2) Then
        DeleteObject vihu\obj
        Delete vihu
    EndIf   
   
    PositionObject tähtäin, MouseWX(),MouseWY()
   
    DrawScreen

Forever 


Huom! jos haluat että valkoinen hiiri ei näy pelissä vain pelkkä tähtäin niin pistä Repeatin alle "ShowMouse OFF"
iTKEVAnAKKI
Advanced Member
Posts: 335
Joined: Tue Aug 28, 2007 3:55 pm
Location: Siellä jossain

Re: Hiiri tähtäin

Post by iTKEVAnAKKI »

vilQuri wrote:Kylläpäs toimii Minulla ainakin!!

Ongelmana on se että sinulla lukee sielä "PositionObject tähtäin, MouseX() ,MouseY()"
siellä pitäisi olla "PositionObject tähtäin, MouseWX() ,MouseWY()" Koska MouseX() ja MouseY() kertovat vain hiiren sijainnin vaaka suunnassa
mutta kun taas MouseWX() ja MouseWY() kertovat hiiren sijainnin pelimailmassa.
Mistä lähtien?!!?! :shock: MouseX() ja MouseY() kertovat hiiren sijainnin pelimaailmassa, MouseWX() ja MouseWY() näytöllä. Ja hänellä on vanha versio jossa ei ole MouseWX() tai mouseWY()tä. Tai ScreenPositionObjectia.

Kun mouseX() ja mousey() kerrotaan jollain tietyllä luvulla niin saadan ruudun koordinnatit(?). En ole varma, enkä nyt muista sitä lukua jos se on niin.
Projektit:
Joku projekti meneillään... Mitähän siitäkin tulee ;)
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Re: Hiiri tähtäin

Post by Re1z0r »

Ei toimi yhä toi mouseWX mouseWY juttu, varmuuden vuoksi kopioin sun korjaamas koodin ja pistin sen uudelle tiedostolle mut ei toimi. Sitten pistin vielä hakuun noi komennot mut ei löytyny mitää. Et en tiedä, ehkä täs mun coolbasicissa o tullu jotai häikkää asennuksessa tai jossai :(
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Re: Hiiri tähtäin

Post by Re1z0r »

Tietäsitkö mist löytys se numero? Olis hyvä saada toi toimimaa.
User avatar
vilQuri
Active Member
Posts: 239
Joined: Wed Aug 29, 2007 6:25 pm
Location: Turku

Re: Hiiri tähtäin

Post by vilQuri »

Kappas vanha versio en huomannu lukea :oops:
iTKEVAnAKKI
Advanced Member
Posts: 335
Joined: Tue Aug 28, 2007 3:55 pm
Location: Siellä jossain

Re: Hiiri tähtäin

Post by iTKEVAnAKKI »

Ite en tiedä sitä, ja yritin selata vanhaa foorumia, mutta en löytänyt sitä :( Mutta lähetin Harakalle PMn ja toivottavasti hän tietää. Miksi uusi Cb ei toimi?
Projektit:
Joku projekti meneillään... Mitähän siitäkin tulee ;)
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Hiiri tähtäin

Post by TheFish »

Pienen testailun jälkeen havaitsin tuon korjautuvan toimivan näin:

Code: Select all

'FPS

peli:


Type monsterit
    Field obj
End Type



FrameLimit 40


monsteri = LoadObject("media\cow.bmp"360)
ShowObject monsteri,OFF

tähtäin = LoadObject("media\target.bmp"360)

vihu.monsterit = New(monsterit)
vihu\obj=CloneObject(monsteri)

Repeat
   
    If MouseHit(1) And ObjectsOverlap(monsteri,tähtäin,2) Then
        DeleteObject vihu\obj
        Delete vihu
    EndIf   
   
    PositionObject tähtäin, MouseX()-ScreenWidth()/2,-MouseY()+ScreenHeight()/2

    DrawScreen

Forever 
Tuossa kyllä tulee mav jos lehmä on ammuttu ja klikkaa hiirellä. Siinä pitää tarkastaa on lehmä elossa vielä.
Last edited by TheFish on Fri Aug 31, 2007 8:11 pm, edited 1 time in total.
CoolBasic henkilökuntaa
Kehittäjä
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Hiiri tähtäin

Post by koodaaja »

Dödi, täällähän pitää oikaista muutamat väitteet faktoiksi;

[quote = "vilQuri"]MouseX() ja MouseY() kertovat vain hiiren sijainnin vaaka suunnassa[/quote]

Eivät vaakasuunnassa vaan ruutukoordinaatteina.

[quote=iTKEVAnAKKI]MouseX() ja MouseY() kertovat hiiren sijainnin pelimaailmassa, MouseWX() ja MouseWY() näytöllä[/quote]

Toisin päin, mousewx = mouse world x, hiiren maailman (pelimaailman) koordinaatit, sama y:llä.

[quote = "TheFish"]en oikein tiedä itse, että minkä takia tuo y koordinaatti piti tehdä eritavalla kuin x[/quote]

Siksi, että maailman koordinaateissa y kasvaa ylöspäin mentäessä, ruutukoordinaateissa alaspäin mentäessä. Ja noihin koordinaatteihin on lisättävä vielä camerax() ja cameray(), jotta toimisi ihan oikein.

Itse en tekisi tähtäintä objektilla, vaan seuraavasti:

Code: Select all

Map = LoadMap("Media\cdm2.til","Media\tileset.bmp")
Guy = LoadObject("Media\soldier.bmp",72)

Mouse = LoadImage("Media\cursor.bmp")
ShowMouse mouse

SetupCollision Guy,Map,2,4,2

Repeat

    TranslateObject Guy, (KeyDown(32)-KeyDown(30))*2, (KeyDown(17)-KeyDown(31))*2
    RotateObject Guy, GetAngle(ObjectX(Guy), -ObjectY(Guy),MouseWX(),-MouseWY())
    
    UpdateGame()
    
    CloneCameraPosition(Guy)
    DrawScreen
    
Forever
iTKEVAnAKKI
Advanced Member
Posts: 335
Joined: Tue Aug 28, 2007 3:55 pm
Location: Siellä jossain

Re: Hiiri tähtäin

Post by iTKEVAnAKKI »

Tässä olisi nyt harakan antamat functiot:

Code: Select all

Function MouseWorldX()
    Return CameraX()-ScreenWidth()/2+MouseX()
End Function

Function MouseWorldY()
    Return CameraY()+ScreenHeight()/2-MouseY()
End Function
Projektit:
Joku projekti meneillään... Mitähän siitäkin tulee ;)
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Re: Hiiri tähtäin

Post by Re1z0r »

Joo kiitos vaan, nyt toimii :D
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Re: Hiiri tähtäin

Post by Re1z0r »

Joo tuli uus ongelma: Tein vastustajat Typella mut pystyn tappamaan vain ensimmäisen niistä.
[codebox]

Code: Select all

'FPS

peli:


Type monsterit
    Field obj
End Type



FrameLimit 40

monsteri = LoadObject("media\cow.bmp"360)
ShowObject monsteri,OFF

tähtäin = LoadObject("media\target.bmp"360)
ShowMouse OFF



Repeat
    
    PositionObject tähtäin, MouseX()-ScreenWidth()/2,-MouseY()+ScreenHeight()/2
    
    If TIMER()>record+1000 Then
        record=TIMER()
        vihu.monsterit = New(monsterit)
        vihu\obj=CloneObject(monsteri) 
        ObjectOrder tähtäin,1
        PositionObject vihu\obj, -600,0 
    EndIf
    
    For vihu.monsterit = Each monsterit
        MoveObject vihu\obj,5
            
            If MouseHit(1) And ObjectsOverlap(tähtäin,vihu\obj,2) Or MouseHit(1) And ObjectsOverlap(vihu\obj,tähtäin,2) Then
                DeleteObject vihu\obj
                Delete vihu  
            EndIf
            
            If ObjectX(vihu\obj)>600 Then
                DeleteObject vihu\obj
                Delete vihu
            EndIf    
                
     Next vihu
    
    DrawScreen

Forever        
[/codebox]
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Hiiri tähtäin

Post by koodaaja »

Re1z0r wrote:Joo tuli uus ongelma: Tein vastustajat Typella mut pystyn tappamaan vain ensimmäisen niistä.

Code: Select all

'FPS

peli:


Type monsterit
    Field obj
End Type



FrameLimit 40

monsteri = LoadObject("media\cow.bmp"360)
ShowObject monsteri,OFF

tähtäin = LoadObject("media\target.bmp"360)
ShowMouse OFF



Repeat
    
    PositionObject tähtäin, MouseX()-ScreenWidth()/2,-MouseY()+ScreenHeight()/2
    
    If TIMER()>record+1000 Then
        record=TIMER()
        vihu.monsterit = New(monsterit)
        vihu\obj=CloneObject(monsteri) 
        ObjectOrder tähtäin,1
        PositionObject vihu\obj, -600,0 
    EndIf
    
    For vihu.monsterit = Each monsterit
        MoveObject vihu\obj,5
            
            If MouseHit(1) And ObjectsOverlap(tähtäin,vihu\obj,2) Or MouseHit(1) And ObjectsOverlap(vihu\obj,tähtäin,2) Then
                DeleteObject vihu\obj
                Delete vihu  
            EndIf
            
            If ObjectX(vihu\obj)>600 Then
                DeleteObject vihu\obj
                Delete vihu
            EndIf    
                
     Next vihu
    
    DrawScreen

Forever        
Itselläni tuli mavi heti ensimmäiseen osuttuani.

Code: Select all

If (MouseHit(1) And ObjectsOverlap(tähtäin,vihu\obj,2)) Or (MouseHit(1) And ObjectsOverlap(vihu\obj,tähtäin,2)) Then
    DeleteObject vihu\obj
    Delete vihu  
ElseIf ObjectX(vihu\obj)>600 Then
    DeleteObject vihu\obj
    Delete vihu
EndIf
Noin ainakin pitäisi toimia. ( nuo sulut tuossa iffissä ovat lähinnä selkeyden ja oikeaoppisuuden vuoksi, ainakin itselläni toimi ilmankin )
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Re: Hiiri tähtäin

Post by Re1z0r »

Joo toimii, kiitos taas
Re1z0r
Newcomer
Posts: 18
Joined: Tue Aug 28, 2007 7:14 pm
Location: Korpilahti
Contact:

Re: Hiiri tähtäin

Post by Re1z0r »

Ei muute toimikkaa. Nää pitää nyt ampua järjestyksessä, muute ei kuole. Onko tähän mitään helpotusta :|
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Hiiri tähtäin

Post by koodaaja »

Re1z0r wrote:Ei muute toimikkaa. Nää pitää nyt ampua järjestyksessä, muute ei kuole. Onko tähän mitään helpotusta :|
Kuolevathan O,o ainakin minulla. Oletko muuttanut koodia? Ainakin tuolla ylemmällä koodilla pelittää mainiosti.
Post Reply