Esimerkkikoodi ja funktio:
Code: Select all
SCREEN 640,480
SW=ScreenWidth()/2-32
SH=ScreenHeight()/2-32
DrawToWorld ON
Type ENEMY
Field x
Field y
Field can_see
EndType
map=LoadMap("media\testmap.til", "media\tileset.bmp")
plyX=0
plyY=64
For i=0 To 500
e.ENEMY = New(ENEMY)
e\x=Rand(-SW,SW)
e\y=Rand(-SH,SH)
Next i
Repeat
DrawGame
plyX = plyX + (RightKey()-LeftKey())*2
plyY = plyY + (UpKey()-DownKey())*2
If MouseHit(1)
e.ENEMY = New(ENEMY)
e\x=MouseWX()
e\y=MouseWY()
EndIf
start=Timer()
scanned_enemies=0
For e.ENEMY = Each ENEMY
If e\can_see Then Color cbgreen Else Color cbred
Circle e\x-5,e\y+5,10
If Distance(plyX,plyY, e\x,e\y)<160
'Muuta kahta viimeistä arvoa ja huomaa ero
e\can_see = CanSee(plyX,plyY,e\x,e\y, 8,8)
scanned_enemies+1
Else
e\can_see = 0
EndIf
Next e
ms=Timer()-start
Color cbBlue
Circle plyX-5,plyY+5,10
_text$=scanned_enemies+" scans in "+ms+"ms"
Color 255,255,255
Text 2,2,_text
DrawScreen
Forever
Function CanSee(p1X,p1Y, p2X,p2Y,_steps=8,approx=8)
dest_ang#=GetAngle(p1X,p1Y, p2X,p2Y)
dest_dist#=Distance(p1X,p1Y, p2X,p2Y)
For d=0 To dest_dist/_steps
px#=p1X+Cos(dest_ang)*(d*_steps)
py#=p1Y-Sin(dest_ang)*(d*_steps)
If Distance(px,py,p2X,p2Y)<=approx
Color cbgreen // Poista piirtofunktiot
Line p1X,p1Y,px,py // ellet koe tarvetta
Return 1
EndIf
If GetMap(2,px,py)=1 Then
Color cbred // Poista piirtofunktiot
Line p1X,p1Y,px,py // ellet koe tarvetta
Return 0
EndIf
Next d
EndFunction
Code: Select all
Function CanSee(p1X,p1Y, p2X,p2Y,_steps=8,approx=8)
dest_ang#=GetAngle(p1X,p1Y, p2X,p2Y)
dest_dist#=Distance(p1X,p1Y, p2X,p2Y)
For d=0 To dest_dist/_steps
px#=p1X+Cos(dest_ang)*(d*_steps)
py#=p1Y-Sin(dest_ang)*(d*_steps)
If Distance(px,py,p2X,p2Y)<=approx
'Color cbgreen // Poista piirtofunktiot
'Line p1X,p1Y,px,py // ellet koe tarvetta
Return 1
EndIf
If GetMap(2,px,py)=1 Then
'Color cbred // Poista piirtofunktiot
'Line p1X,p1Y,px,py // ellet koe tarvetta
Return 0
EndIf
Next d
EndFunction
Jos teillä on lisättävää tai löydätte jotain optimoitavaa, kertokaa siitä myös minulle. Tämä siis on käytössä pelissäni joten olisi ihan mukava jos jotain optimoitavaa olisi.