kokkeile laittaa se ennen repeatiaHene wrote:Thänksit!DatsuniG wrote:Tarkistat funktiolla Distance2 pelaajan ja botin välisen etäisyyden. Tässä on pieni esimerkki kuinka toteuttaa botin liikkuminen tilekartoilla:Hene wrote:Otin uudeksi harjoitusprojektiksi opetella noita vihollissysteemejä ja tarvitsisin hieman apua...
Miten voisi toteuttaa seuraavanlaisen systeemin:
Pelaaja ohjaa objektia A yrittäen napata tietokoneen ohjaamaa objektia B. Jos objektin A ja B välinen etäisyys on pienempi kuin 100 pikseliä, objekti B liikkuu objektia A pakoon (Suurin ongelma nurkat).Code: Select all
map = LoadMap("Media\cdm2.til","Media\tileset.bmp") obj = LoadObject("Media/guy.bmp", 72) dis = 32 // Kuinka lähellä seinän tulee olla ennenkuin botti reagoi Repeat MoveObject obj, 1 // Tarkistetaan onko objectin edessä törmäyskerros If GetMap(2, ObjectX(obj) + Cos(ObjectAngle(obj)) * Dis, ObjectY(obj) + Sin(ObjectAngle(obj)) * Dis) Then // Edessä oli, joten katsotaan kumpaan suuntaan käännytään If GetMap(1, ObjectX(obj) + Cos(ObjectAngle(obj) + 90) * Dis, ObjectY(obj) + Sin(ObjectAngle(obj) + 90) * Dis) = 0 Then // Vasemmalla tyhjää, käännytään sinne RotateObject obj, ObjectAngle(obj) + 90 ElseIf GetMap(1, ObjectX(obj) + Cos(ObjectAngle(obj) - 90) * Dis, ObjectY(obj) + Sin(ObjectAngle(obj) - 90) * Dis) = 0 Then // Oikealla tyhjää, käännytään sinne RotateObject obj, ObjectAngle(obj) - 90 Else // Umpikuja, käännytään ympäri RotateObject obj, ObjectAngle(obj) + 180 EndIf // Kääntymisen voisi tehdä myös turnobjectilla, mutta silloin reagointietäisyyttä tulisi kasvattaa EndIf DrawScreen Forever
Mihinkös kohtaan tuo positionobject pitäisi lätkäistä? Heittää jatkuvasti memorian acces violationia vaikka kokeiltu ties mitä kohtaa... :/
toimiko?
mikä täs on vikana miks se tuhoaa kaikki vihut ko ampuu ja sen panoksen ei tartte edes osua?
Code: Select all
Type PISLAT
Field fieldi
End Type
Type VIHUT
Field fieldi
End Type
FrameLimit 20
SCREEN 975,495
tausta=LoadImage("kuvat\mappi.png")
jätkä=LoadObject("kuvat\jätkä.png")
pisla=LoadObject("kuvat\pistooli.png")
vihu=LoadObject("kuvat\vihu.png")
ShowObject vihu,OFF
seinä=LoadObject("kuvat\seinä.png")
ammus=LoadObject("kuvat\pati.png")
ShowObject ammus,OFF
hiiri=LoadObject("kuvat\hiiri.png")
hp=300
Repeat
If Timer() - aika > 3000
vihu1.VIHUT = New (VIHUT)
vihu1\fieldi = CloneObject (vihu)
PositionObject vihu1\fieldi,-500,Rand(-200,250)
aika = Timer()
EndIf
PositionObject hiiri,MouseWX(),MouseWY()
If MouseHit(1) Then
pisla1.PISLAT = New (PISLAT)
pisla1\fieldi = CloneObject (ammus)
CloneObjectPosition pisla1\fieldi,pisla
ResetObjectCollision pisla1\fieldi
PointObject pisla1\fieldi,hiiri
reload=5
EndIf
If reload>0 Then reload=reload-1
For vihu1.VIHUT = Each VIHUT
If ObjectsOverlap (vihu1\fieldi,seinä,1)=False Then
MoveObject vihu1\fieldi,1
EndIf
If ObjectsOverlap (vihu1\fieldi,seinä,1) Then
hp=hp-1
EndIf
Next vihu1
PositionObject jätkä,270,50
PositionObject pisla,266,50
PositionObject seinä,140,0
DrawImage tausta,0,0
Color cbred
Box 10,10,300,10,OFF
Box 10,10,hp,10
For pisla1.PISLAT = Each PISLAT
MoveObject pisla1\fieldi,20
Next pisla1
For vihu1.VIHUT = Each VIHUT
For pisla1.PISLAT = Each PISLAT
If ObjectsOverlap (pisla1\fieldi, vihu1\fieldi, 2) Then
DeleteObject pisla1\fieldi
Delete pisla1
ObjectInteger vihu1\fieldi,ObjectInteger(vihu1\fieldi) - 20
EndIf
If ObjectInteger(vihu1\fieldi)=0 Then
DeleteObject vihu1\fieldi
Delete vihu1
EndIf
Next pisla1
Next vihu1
DrawScreen
Forever