Jump to content

Recommended Posts

Geplaatst:

Ik weet niet precies of dit hier hoort of in het School & Studie subforum. Maar heb het hier gezet omdat het vooral gaat om het positie in SCM zetten.

Hoe kan ik een offset positie berekenen, in SCM, als hij gedraaid is? Zie als voorbeeld plaatje. Bij het eerste rondje heeft de blauwe stip de coördinaten X = 1,2 en Y = 1,7, hoe bereken ik de blauwe stip in rondje twee dan? :{

rekenvraag.jpg

Geplaatst:

De offset is niet relatief aan de hoek van de ped/speler. Hoe je dus gedraaid staat in San Andreas, de offset x = 1.2 en y = 1.7 zullen altijd op dezelfde plek zitten relatief aan de positie van de speler.

Geplaatst:

Dat had ik al door. :puh: Mijn vraag is juist hoe ik hem wél kan laten meedraaien? :{

Kan je niet steeds hoek van de speler checken?

en dan gewoon x+1.2 y+1.7

Geplaatst: (bewerkt)

Ik heb met een soortgelijks iets lopen kl*ten...

Wat je kan gebruiken is:

Opgegeven graden * pi / 180
X = sin(-(uitkomst van opgegeven graden) * lengte + Opgegeven X locatie)
Y = Cos((uitkomst van opgegeven graden) * lengte + opgegeven Y posistie)

Om de offset te veranderen kan je doen:

- Voor de rotatie: aantal graden optellen/ aftrekken bij de huidige angle.

- Voor de lengte, bij de lengte optellen.

BC7 :cya:

Bewerkt: door BC7
Geplaatst:

Ik snapte niet helemaal je rekensom dus ik heb er maar wat van gemaakt, komt het wat in de goede richting? :$

// Lengte berekenen
00A0: store_actor $PLAYER_ACTOR position_to $COORD_X $COORD_Y $COORD_Z 
003A: 32@ == $COORD_X
003A: 33@ == $COORD_Y
0059: 32@ += 1.2
0059: 33@ += 1.7
0509: 15@ = distance_between_XY $COORD_X $COORD_Y and_XY 32@ 33@

// Graden berekenen
14@ = Actor.Angle($PLAYER_ACTOR)
0013: 14@ *= 3.1415926535
0017: 14@ /= 180.0 
0045: 14@ == 16@
0013: 14@ *= -1.0

// X uitrekenen
02F7: $COORD_X = sine 14@
005F: $COORD_X *= 15@

// Y uitrekenen
02F6: $COORD_Y = cosine 16@ 
005F: $COORD_Y *= 15@

// Actor plaatsen
4@ = Actor.Create(Gang2, #FAM1, 32@, 33@, -0.1)

Ik heb getest en hij crasht op het moment van deze rekensom. :$ (#FAM1 is wel geladen op dat moment)

Geplaatst:

Hij crasht nog steeds. :(

// Lengte berekenen
00A0: store_actor $PLAYER_ACTOR position_to $COORD_X $COORD_Y $COORD_Z 
0089: 32@ = $COORD_X
0089: 33@ = $COORD_Y
0059: 32@ += 1.2
0059: 33@ += 1.7
0509: 15@ = distance_between_XY $COORD_X $COORD_Y and_XY 32@ 33@

// Graden berekenen
14@ = Actor.Angle($PLAYER_ACTOR)
0013: 14@ *= 3.1415926535
0017: 14@ /= 180.0 
0087: 14@ = 16@
0013: 14@ *= -1.0

// X uitrekenen
02F7: $COORD_X = sine 14@
005F: $COORD_X *= 15@

// Y uitrekenen
02F6: $COORD_Y = cosine 16@ 
005F: $COORD_Y *= 15@

// Actor plaatsen
4@ = Actor.Create(Gang2, #FAM1, 32@, 33@, -0.1)

Geplaatst:

1. 32@ en 33@ zijn timers. Een fractie van een seconde nadat je gezegd hebt dat die een bepaalde waarde aan moet nemen, is die al weer veranderd. Deze moet je dus nooit gebruiken voor andere doeleinden dan het "tellen" vanaf een bepaald moment.

2. 0059 is een opcode voor $ += $, je kunt hiervoor beter 000B voor gebruiken.

3. Ik vermoed dat deze "0087: 14@ = 16@" andersom moet zijn. Je wilt toch 16 gelijkstellen aan 14? In dit geval zeg je dat 14 hetzelfde getal moet worden als 16.

Geplaatst:

Ik voel me nu erg dom. :$ Nouja, ik heb het gefixed en het komt in de buurt, maar de gast spawnt een beetje te ver weg.

naamloos-46.jpg

En hij spawnt altijd op dat punt, rond de coördinaten 3.0727, 2.1296, hoe dichtbij of ver weg ik ook zit. :(

// Lengte berekenen
00A0: store_actor $PLAYER_ACTOR position_to $COORD_X $COORD_Y $COORD_Z 
0089: 30@ = $COORD_X
0089: 31@ = $COORD_Y
000B: 30@ += 1.2
000B: 31@ += 1.7
0509: 15@ = distance_between_XY $COORD_X $COORD_Y and_XY 30@ 31@

// Graden berekenen
14@ = Actor.Angle($PLAYER_ACTOR)
0013: 14@ *= 3.1415926535
0017: 14@ /= 180.0 
0087: 14@ = 16@
0013: 14@ *= -1.0

// X uitrekenen
02F7: $COORD_X = sine 14@
005F: $COORD_X *= 15@

// Y uitrekenen
02F6: $COORD_Y = cosine 16@ 
005F: $COORD_Y *= 15@

// Actor plaatsen
4@ = Actor.Create(Gang2, #FAM1, $COORD_X, $COORD_Y, -0.1)
Marker.CreateAboveActor(1@, 4@)

Ik had hem eventjes een marker gegeven zodat ik hem kon vinden. :puh:

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...