type vihuille omat reitit
-
- Advanced Member
- Posts: 349
- Joined: Mon Aug 27, 2007 9:00 pm
- Location: Lapinjärvi, Finland
- Contact:
Re: type vihuille omat reitit
En aivan ymmärtänyt että haluatko määritellä reitit etukäteen vai että vihut menevät itse omia reittejään. Siispä tein esimerkit molemmista.
Esimerkki jossa vihut liikkuvat itsekseen, lisää vihuja hiiren oikealla napilla.
Esimerkki jossa hahmoille ensin kerrotaan mitä pitää tehdä ja sitten ne liikkuvat niin.
Esimerkkeihin jäi hieman ylimääräisiäkin juttuja joten koita löytää se olennainen. Toivottavasti auttaa.
Esimerkki jossa vihut liikkuvat itsekseen, lisää vihuja hiiren oikealla napilla.
Code: Select all
SCREEN 800,600
Type vihu
Field obj
End Type
Global isäntäukko, map, ukko
map=LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject map,0,0,0.5
isäntäukko=LoadObject("media/guy.bmp",72)
ShowObject isäntäukko,OFF
ukko=CloneObject(isäntäukko)
SetupCollision ukko,map,2,4,2
Repeat
If MouseHit(2) Then lisää_vihu(MouseWX(),MouseWY())
MoveObject ukko,(UpKey()-(DownKey()/2))*3
TurnObject ukko,(LeftKey()-RightKey())*3
päivitä_vihut()
CloneCameraPosition ukko
DrawScreen
Forever
Function päivitä_vihut()
For v.vihu=Each vihu
MoveObject v\obj,3
If CountCollisions(v\obj) Then TurnObject v\obj,Rand(-60,60)
Next v
End Function
Function lisää_vihu(_x,_y)
If GetMap (2,_x,_y)=0 Then
v.vihu=New(vihu)
v\obj=CloneObject(isäntäukko)
PositionObject v\obj,_x,_y
RotateObject v\obj,Rand(360)
SetupCollision v\obj,map,2,4,2
SetupCollision v\obj,ukko,2,2,2
EndIf
End Function
Code: Select all
SCREEN 800,600
Type hahmo
Field obj
Field dest
Field nimi$
Field nopeus
End Type
dir$="media\"
LisääHahmo(dir$+"guy.bmp","order=go destination=-50,0!order=go destination=200,200!order=go destination=200,-200!order=go destination=-200,-200!order=go destination=-200,200","reiska",2)
LisääHahmo(dir$+"guy.bmp","order=go destination=50,0!order=go destination=-200,200!order=go destination=-200,-200!order=go destination=200,-200!order=go destination=200,200","tapsa",2)
LisääHahmo(dir$+"guy.bmp","order=go destination=-50,0!order=follow duration=10000 name=tapsa","Jaakko",2)
Repeat
PäivitäHahmot()
DrawScreen
Forever
Function LisääHahmo(_obj$,reitti$,nimi$,nopeus)
If FileExists(_obj$)
h.hahmo=New(hahmo)
h\obj=LoadObject(_obj$,72)
ObjectString h\obj,reitti$
ObjectInteger h\obj,1
h\nopeus=nopeus
h\nimi=nimi$
For HH.HAHMO=Each HAHMO
If HH<>H Then
SetupCollision H\OBJ,HH\OBJ,2,2,2
SetupCollision HH\OBJ,H\OBJ,2,2,2
EndIf
Next HH
EndIf
End Function
Function PäivitäHahmot()
DrawToWorld OFF,OFF,ON
For h.hahmo=Each hahmo
reitinpituus=CountWords(ObjectString(h\obj),"!")
sana$=GetWord(ObjectString(h\obj),ObjectInteger(h\obj),"!")
käsky$=Readsetup(sana$,"order"," ")
Select käsky$
Case "go"
minne$=Readsetup(sana$,"destination"," ")
x=Int(GetWord(minne$,1,","))
y=Int(GetWord(minne$,2,","))
If Not h\dest Then h\dest=MakeObject()
PositionObject h\dest,x,y
If Distance2(h\dest,h\obj)<5 Then
DeleteObject h\dest
h\dest=0
Goto seuraavakäsky
EndIf
Case "follow"
ketä$=Readsetup(sana$,"name"," ")
For hh.hahmo=Each hahmo
If hh<>h Then
If Lower(hh\nimi$)=ketä$ Then
'CloneObjectPosition h\dest,hh\obj
'CloneObjectOrientation h\dest,hh\obj
h\dest=hh\obj
EndIf
EndIf
Next hh
kauanko=int(Readsetup(sana$,"duration"," "))
If Not ObjectFloat (h\obj) Then
ObjectFloat h\obj,(Timer()+kauanko)
Else
If ObjectFloat (h\obj) <Timer() Then
ObjectFloat h\obj,0
h\dest=0
Goto seuraavakäsky
EndIf
EndIf
Case "stop"
kauanko=int(Readsetup(sana$,"duration"," "))
If Not ObjectFloat (h\obj) Then
ObjectFloat h\obj,(Timer()+kauanko)
Else
If ObjectFloat (h\obj) <Timer() Then
ObjectFloat h\obj,0
Goto seuraavakäsky
EndIf
EndIf
End Select
jatkuu:
If h\dest Then
RotateObject h\obj,CurveAngle2(GetAngle2(h\obj,h\dest),ObjectAngle(h\obj),11)
MoveObject h\obj,h\nopeus
EndIf
Color cbwhite
Text ObjectX(h\obj)-ObjectSizeX(h\obj)/2,ObjectY(h\obj)+ObjectSizeY(h\obj)/2+15 ,isoalkukirjain(h\nimi)
Next h
Return 0
seuraavakäsky:
ObjectInteger h\obj,Int(ObjectInteger (h\obj)+1)
If ObjectInteger (h\obj)>reitinpituus Then
ObjectInteger h\obj,1
EndIf
Goto jatkuu
End Function
Function Readsetup(_setup$,_entry$,_erotin$)
pituus=CountWords(_setup$,_erotin$)
For i=1 To pituus
sana$=GetWord(_setup$,i,_erotin$)
If Lower(GetWord(sana$,1,"="))=Lower(_entry$) Then Return Lower(Str(GetWord(sana$,2,"=")))
Next i
Return ""
End Function
Function isoalkukirjain(_txt$)
eka$=Left(_txt$,1) 'otetaan ensimmäinen kirjain
muut$=Mid(_txt$,2) 'otetaan muut kirjaimet
Return Str( Upper(eka$)+muut$) 'yhdistetään
End Function
Function CurveAngle2(targetangle#,oldangle#,incre#) 'Curves "oldangle" to "targetangle" by "incre" (e.g.homing missile)
targetangle = WrapAngle(targetangle) : oldangle = WrapAngle(oldangle)
If (oldangle + 360) - targetangle < targetangle - oldangle Then oldangle = 360 + oldangle
If (targetangle + 360) - oldangle < oldangle - targetangle Then targetangle = 360 + targetangle
oldangle = oldangle - (oldangle-targetangle) / incre
Return oldangle
End Function
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
Runoblogi, vuodatusta ja sekoiluja.
Re: type vihuille omat reitit
Osaatko käyttää dataa? Jos osaat niin hyvä. Tee datalla karttaan waypointit. Ja sitten kun käyt ukon alla olevan datan läpi ja se numero joka sieltä putkahtaa esim. 5. niin vihollinen tajuaa, että kannattaa kääntyä oikealle ja taas 8. olisi sellaanen jonka botti typerillään aivoillansa päättää mihinkä suuntaan käännytään. Tajusitko? Tuota selvemmin en osaa selittää.
Funktio parempaan kartan tarkistukseen ukon kohalta:
Pitäisi toimia... Jos ei toimi nii ei sitte muokatkaa itte.
Funktio parempaan kartan tarkistukseen ukon kohalta:
Code: Select all
Function ObjGetMap(obj,kerros,tile)
If GetMap(kerros,ObjectX(Obj),Objecty(Obj))=tile then
Return 1
EndIF
EndFunction
Pitäisi toimia... Jos ei toimi nii ei sitte muokatkaa itte.
Solar Eclipse
We're in a simulation, and God is trying to debug us.
Re: type vihuille omat reitit
kiitti molemmat mutta kuka teistä tietää kuinka nää lehmät saa liikkumaan omia erillaisia reittejä
Code: Select all
SCREEN 800, 600
objBall = LoadObject("media/cow.bmp")
ShowObject objBall, OFF
Type BALLS
Field obj
EndType
For i = 1 To 100
b.BALLS = New(BALLS)
b\obj = CloneObject(objBall)
PositionObject b\obj, Rand(-390, 390), Rand(-270, 270)
Next i
Repeat
Text 0,0, " mites nää saa sillee liikkuu että kaikki kulkee omia reittejä"
DrawScreen
Forever