Page 1 of 2
Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:14 pm
by Re1z0r
En ymmärrä miksei tämä toimi. No en kuitenkaan ole kauheasti koodannut pelejä niin ehkä jotain jäi huomaamatta
.
[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]
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:21 pm
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.
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:26 pm
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.
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:28 pm
by iTKEVAnAKKI
Toimiiko edes MouseWX() ja MouseWY()?? En tiedä mitä eroja näillä versioilla on...
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:30 pm
by Re1z0r
Ikävä kyllä ei. Alun perin kokeilin tota koodia ku luin sen täält foorumilt.
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:40 pm
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"
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:45 pm
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?!!?!
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.
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:45 pm
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
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:47 pm
by Re1z0r
Tietäsitkö mist löytys se numero? Olis hyvä saada toi toimimaa.
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:53 pm
by vilQuri
Kappas vanha versio en huomannu lukea
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 5:56 pm
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?
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 6:51 pm
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ä.
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 7:20 pm
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
Re: Hiiri tähtäin
Posted: Fri Aug 31, 2007 7:53 pm
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
Re: Hiiri tähtäin
Posted: Sat Sep 01, 2007 10:55 am
by Re1z0r
Joo kiitos vaan, nyt toimii
Re: Hiiri tähtäin
Posted: Sat Sep 01, 2007 5:24 pm
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]
Re: Hiiri tähtäin
Posted: Sat Sep 01, 2007 5:34 pm
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 )
Re: Hiiri tähtäin
Posted: Sat Sep 01, 2007 8:36 pm
by Re1z0r
Joo toimii, kiitos taas
Re: Hiiri tähtäin
Posted: Sat Sep 01, 2007 9:04 pm
by Re1z0r
Ei muute toimikkaa. Nää pitää nyt ampua järjestyksessä, muute ei kuole. Onko tähän mitään helpotusta
Re: Hiiri tähtäin
Posted: Sat Sep 01, 2007 9:39 pm
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.