» »

[C#] [XNA] Premikanje objekta

[C#] [XNA] Premikanje objekta

furion ::

Pozdravljeni.

Imam problem saj ne vem kako postaviti avto v premikanje uporabljajoc arrow keyse.

Trenutno imam za obracanje takole:
if (keyboard.IsKeyDown(Keys.Left));
Rotation2 += rotationSpeed;

in

if (keyboard.IsKeyDown(Keys.Right));
Rotation2 -= rotationSpeed;

Nato pa:

effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateRotationY(modelRotation)
* Matrix.CreateTranslation(carsPosition);

Kar ni OK, saj se avto vrti okoly Y osi(ob boku), rad bi pa, da se vrte okoli svojega centra oz. okoli svojega "kljuna".

Poskusil sem se spraviti avto v gibanje naprej in sicer takole:
Vector3 v = new Vector3(0, 0, speed);
Matrix forwardMovement = Matrix.CreateRotationY(Rotation2);

v = Vector3.Transform(v, forwardMovement);
modelVelocityAdd.Z += v.Z;
modelVelocityAdd.X += v.X;
modelVelocity += modelVelocityAdd;
modelPosition = modelVelocity / 200;


Vendar je tudi to spodletelo, saj avto ne potuje s "kljunom" naprej, temvec od leve proti desni. Navsezadnje pa izgine ko spustim UP key.


A mi lahko prosim kdo pomaga stvar urediti kot je treba?

Vesoljc ::

jah, brez znanja vektorjev ter matrik ter pripadajoce matematike bo tule teszko slo... ti priporocam da si preberes kak clanek o osnovah 3d matematike (rotacije okoli poljubne tocke recimo, kar bo resilo tvoj prvi problem).
druga stvar ki pa jo narobe delas v samem startu pa je premikanje z fiksnimi enotami. za koliko se bo avto premaknil, ce se bo tvoja funkcija klicala 20x na sekundo? koliko se bo premaknil ce se bo funkcija klicala 100x na sekundo? kar rabis je "time based movement" go google :)
Abnormal behavior of abnormal brain makes me normal...

furion ::

jah, potem pa tole:

if (keyboard.IsKeyDown(Keys.Right));
{
elapsed = (float)gameTime.ElapsedGameTime.TotalMilliseconds;
modelRotation2 += elapsed * MathHelper.ToRadians(0.0012f) * speed;
}
??? Tako je boljse?

Rotacijo okoli poljubne tocke si bom pogledal, zanima me pa se zadeva z premikanjem naprej/nazaj.


Za Xbox controller je vse tko izi...:(

furion ::

Sicer pa navsezadnje ideja o rotaciji okoli Y sploh ni tako slaba (rotacija okoli kljuna ni nic boljsa). Morda bi se mi splacalla rotacija okoli osi v centru vozila.

Zanima me, ce kdo ve kako najnaredim, da se bo vozilo premikalo naprej(v smeri v katero je obrnjeno) uporablajoc arrow keyse.

Senitel ::

Poleg množenja matrik moraš pogledat samo še kaj počneta naslednji dve matriki: translacija (translate) in rotacija (rotate) okrog poljubne osi... Z množenjem tega v pravilnem zaporedju dosežeš vse kar si napisal dosedaj.
Kako sedaj prestavljaš avto sem ter tja in ga obračaš kamor ti paše in okrog katerega koli izhodišča ti paše, boš moral pa malo vedet kaj so to matrike.

furion ::

Vem kaj so matrike in delno poznam njihovo uporabo, tude vektorje kapiram,.

Senitel, hvala za nasvet, bom poskusil pa vam bom sporocil cese mi bo zapletlo...

furion ::

Ok, hvala sem zrihto.

Dela kot je treba. :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Po treh letih spet prestopna sekunda

Oddelek: Novice / Znanost in tehnologija
167737 (4715) CaqKa
»

DirectX - težavica

Oddelek: Programiranje
141193 (926) Senitel
»

Potres spremenil rotacijo Zemlje (strani: 1 2 3 4 )

Oddelek: Novice / Znanost in tehnologija
15118239 (14174) MrStein
»

Mehanika, kinetika

Oddelek: Znanost in tehnologija
222352 (1958) Thomas

Več podobnih tem