Tein tällaisen koodin. Jos et osaa taulukoita, kannattaa nyt opetella (katso ensin vaikka manuaalin selitys ja yritä sitten ymmärtää tämä. Yritin tehdä mahdollisimman yksinkertaisesti.)
Ensin ajattelin tehdä aivan yksinkertaisen mallin, mutta se soti luontoani vastaan. En yksinketaisesti voi tehdä esimerkkejä jotka ovat käytännössä hyödyttömiä.
Jouduin muuttamaan hiukan tota CurvePointObject2-funkkariakin.
Edit: no kerron nopeasti miten tässä taulukot toimivat:
wp( target, 0 ) pitää sisällään x-koordinaatit. Tämä voi olla esim: wp( 0, 0 ), tai wp( 42, 0 ). Toi nolla tarkoittaa että kyseessä on x-koordinaatti. Jos nollan sijalla on 1, kyseessä on y-koordinaatti. Miksi? Koska koodasin niin: Jokainen y-koordinaattit tallennetaan soluun: wp( wpCount, 1 ).
Se auto seuraa valmiiksi tehtyjä waypointteja, mutta hiiren 1-nappulalla voit luoda lisää.
Code: Select all
SCREEN 1024, 768
FrameLimit 40
//----------------------------------------------------------------
//Tehdään nopeasti pieni tilemappi jossa auto voi ajaa.
//Tavallisesti näiden koodien rinnalla olisi vain yksinkeraisesti
//LoadMap().
//Älä välitä tästä mapin teosta. Riittää että tiedät, että siinä
//asetetaan tekstuurit ja datanumero 1 niiden ristien kohdalle.
//----------------------------------------------------------------
map = MakeMap( 21, 21, 32, 32 )
set = LoadImage("media\tileset.bmp")
PaintObject map, set
For x = 1 To MapWidth()
For y = 1 To MapHeight()
If x = 1 Or y = 1 Or x = MapWidth() Or y = MapHeight() Then
EditMap map, 0, x, y, 144
Else
EditMap map, 0, x, y, 153
EndIf
//Asetetaan data
If ( y = 5 Or y = MapHeight() - 5 ) And ( x = 5 Or x = MapWidth() - 5 ) Then
EditMap map, 3, x, y, 1
EditMap map, 0, x, y, 4
EndIf
Next y
Next x
//===================================================================================
//Mapin teko loppuu. Tästä eteenpäin sinun tulisi tajuta. HUOM niille jotka tajuavat:
//Tiedän että olisin voinut tehdä seuraavia asioita myös edellisessä silmukassa, missä
//loin mapin, mutta näin se on selvempää, koska mapin luominen ei ole olennaista
//tässä esimerkissä.
//====================================================================================
car = LoadObject( "media\car2.bmp", 72 )
//Taulukko waypointeille (koko 4. Tarkoittaa että waypointteja voi olla vain 4. ÄLÄ YRITÄ TEHDÄ ENEMPÄÄ KUIN 4, muutoin peli kaatuu.
//(ellet sitten uudelleenvenytä taulukkoa)
ClearArray OFF //Nyt voimme turvallisesti uudelleenvenyttää taulukkoa
Dim wp( 3, 1 )
For x = 1 To MapWidth()
For y = 1 To MapHeight()
If GetMap2( 3, x, y ) = 1 Then
//Jos löydetään data1, merkitään koordinaatit muistiin taulukkoon "wp"
//Seuraavaa koodi muuttaa tilen koordinaatit maailmakoordinaateiksi.
wp( wpCount, 0 ) = x * 32 - ObjectSizeX( map ) / 2 - 16
wp( wpCount, 1 ) = y * 32 - ObjectSizeY( map ) / 2 + 16
wpCount + 1
EndIf
Next y
Next x
PositionObject car, wp( 0, 0 ), wp( 0, 1 )
Repeat
//Tarkastetaan onko auto tarpeeksi lähellä kohde-koordinaatteja (alle 20 pikselin päässä).
//Jos on, vaihdetaan kohdetta.
If Distance( ObjectX( car ), ObjectY( car ), wp( target, 0 ), wp( target, 1 ) ) < 32 Then
target + 1
If target > wpCount - 1 Then target = 0
EndIf
//Hiiren 1-nappula lisää uuden waypointin.
If MouseHit(1) Then
wpCount + 1
ReDim wp( wpCount - 1, 1 ) //Uudelleenvenytetään taulukkoa
wp( wpCount - 1, 0 ) = MouseWX() //Asetetaan uusimpaan soluun koordinaatit
wp( wpCount - 1, 1 ) = MouseWY()
EndIf
CurvePointObject2( car, wp( target, 0 ), wp( target, 1 ) )
MoveObject car, 5
DrawGame
Text 20, 20, target + " / " + ( wpCount - 1 )
Color cbWhite
DrawToWorld ON
For i = 0 To wpCount - 1
Circle wp( i, 0 ), wp( i, 1 ), 5
Next i
Color cbRed
Circle wp( target, 0 ), wp( target, 1 ), 5
DrawToWorld OFF
Color cbWhite
DrawScreen
Forever
//HUOMAA muutokset jotka tein tähän funkkariin: ( -objectY() ja -y )
Function CurvePointObject2(_obj, x, y, _smoothness = 10)
angle# = ObjectAngle(_obj)
newangle# = GetAngle(ObjectX(_obj),-ObjectY(_obj),x,-y )
angle# = CurveAngle(newangle, angle, _smoothness)
RotateObject _obj, angle
EndFunction
Edit.
Siitä piti sanoa, että älä omassa pelissäsi käytä noita piirtokomentoja näyttämään missä waypointit ovat. Ne ovat vain havainnollistamassa tässä esimerkissä, mutta todellisuudessa piirtokomennot ovat aivan liian hitaita jotta niitä olisi järkevä käyttää tässä.