temp2 pitäs poistaa ja laittaa takas oikeassa kohtaa. En nyt enään saa sitä toimimaan. Ohjaus nääs kärsii kun menet liian kauas keskipisteestä.FrameLimit 40
Map= LoadMap("media/cdm2.til", "media/tileset.bmp")
Kohde=LoadObject("media/soldier.bmp",360)
SetupCollision kohde,map,2,4,2
temp=MakeObject()
temp2=MakeObject()
CameraFollow kohde, 1, 20
Liike = 0
Repeat
If MouseHit(1) And Liike = 0
temp=MakeObject()
PositionObject temp,MouseWX(),MouseWY()
Liike = 1
EndIf
If MouseHit(1) And Liike = 1
PositionObject temp,MouseWX(),MouseWY()
Liike = 1
EndIf
If Liike = 1 Then
PointObject temp2,temp
kulma# = CurveAngle(ObjectAngle(temp2),ObjectAngle(kohde), 2)
RotateObject kohde,kulma
MoveObject kohde,1
EndIf
If liike = 1
If Distance2(kohde,temp)<5 Then
DeleteObject temp
Liike = 0
EndIf
EndIf
DrawScreen
Forever
Kohde ei vaihda suuntaa
Kohde ei vaihda suuntaa
Eli tässä olisi koodin pätkä joka vähän kusee.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Kohde ei vaihda suuntaa
On hieman turhaa käyttää ylimääräistä objektia vain näyttämään kulmaa johon ollaan menossa, kun kahden objektin välisen kulman saa PointObjectia ja ObjectAnglea helpommin GetAngle2 -funktiolla, joka kertoo kahden objektin välisen kulman. Kahdellakin objektilla pitäisin toisen uudelleenluontia ja poistelua hieman epävarmana, sinne jää yllättävän helposti joku pieni aukko jonka jälkeen yritetään liikuttaa olematonta objektia tai luodaan turhaan useita kappaleita. Lisäksi sinulla on tuolla melkoinen läjä if-lauseita, joista suurimman osan saa yhdisteltyä. Pienten muokkausten jälkeen koodi näyttäisi tältä:
Kaksi ensimmäistä if-lausettasihan tekevät saman asian, oli liike = 0 tai liike = 1, joten sitä on turha tarkistaa. Kaksi jälkimmäistä taas tarkistavat saman asian (Liike = 1), joten ne voi laittaa yhteenkin. CurveAnglen ensimmäiseksi kulmaksi voi tosiaan laskea suoraan kohteen ja tempin välisen kulman, jolloin temp2 -objektia ei tarvita ollenkaan.
EDIT: Niin, ja alkuperäinen ongelmasihan johtuu siitä että temp2 pysyy origossa, ennen "PointObject temp2, temp" -riviä lisää "CloneObjectPosition temp2, kohde" niin koodi toimii, kun temp2 pysyy kohteessa kiinni niin kulmakin lasketaan kohteesta eikä maailman keskipisteestä.
Code: Select all
FrameLimit 40
Map= LoadMap("media/cdm2.til", "media/tileset.bmp")
Kohde=LoadObject("media/soldier.bmp",360)
SetupCollision kohde,map,2,4,2
temp=MakeObject()
CameraFollow kohde, 1, 20
Liike = 0
Repeat
If MouseHit(1) Then
PositionObject temp,MouseWX(),MouseWY()
Liike = 1
EndIf
If Liike = 1 Then
RotateObject kohde, CurveAngle(GetAngle2(kohde,temp),ObjectAngle(kohde), 2)
MoveObject kohde,1
If Distance2(kohde,temp)<5 Then Liike = 0
EndIf
DrawScreen
Forever
EDIT: Niin, ja alkuperäinen ongelmasihan johtuu siitä että temp2 pysyy origossa, ennen "PointObject temp2, temp" -riviä lisää "CloneObjectPosition temp2, kohde" niin koodi toimii, kun temp2 pysyy kohteessa kiinni niin kulmakin lasketaan kohteesta eikä maailman keskipisteestä.