Basssss Geplaatst: 3 februari 2010 Rapport Geplaatst: 3 februari 2010 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? Reageren
Beagle Geplaatst: 3 februari 2010 Rapport Geplaatst: 3 februari 2010 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. Reageren
Basssss Geplaatst: 3 februari 2010 Auteur Rapport Geplaatst: 3 februari 2010 Dat had ik al door. Mijn vraag is juist hoe ik hem wél kan laten meedraaien? Reageren
hippiebus Geplaatst: 11 februari 2010 Rapport Geplaatst: 11 februari 2010 Dat had ik al door. 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 Reageren
Crypteq Geplaatst: 11 februari 2010 Rapport Geplaatst: 11 februari 2010 (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 Bewerkt: 11 februari 2010 door BC7 Reageren
Basssss Geplaatst: 12 februari 2010 Auteur Rapport Geplaatst: 12 februari 2010 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) Reageren
Beagle Geplaatst: 12 februari 2010 Rapport Geplaatst: 12 februari 2010 0045: 14@ == 16@ Kan niet. Reageren
Basssss Geplaatst: 13 februari 2010 Auteur Rapport Geplaatst: 13 februari 2010 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) Reageren
Dutchy3010 Geplaatst: 13 februari 2010 Rapport Geplaatst: 13 februari 2010 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. Reageren
Basssss Geplaatst: 13 februari 2010 Auteur Rapport Geplaatst: 13 februari 2010 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. 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. Reageren
Beagle Geplaatst: 13 februari 2010 Rapport Geplaatst: 13 februari 2010 0087: 14@ = 16@ Je hebt die nog steeds niet omgedraaid, je doet cosine 16@ om $COORD_X te verkrijgen, misschien gaat het daar fout. Reageren
Basssss Geplaatst: 13 februari 2010 Auteur Rapport Geplaatst: 13 februari 2010 Ik dacht dat ik ze had omgedraaid, maar alsnog helpt het niet. Reageren
Recommended Posts
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.