Open CristiJ92 opened 5 years ago
Nel caso diagonale vogliamo degli sprite ruotati a multipli di 45 gradi?
No, lo sprite ruota in base alla rotazione dello stick
Sembra che il personaggio si muova solo a multipli di 45°, gdot non capisce di quanto ruotare o il gioco è programmato per muoversi in 8-ways?
La seconda che hai detto :) Considerando che si può giocare sia con i tasti che con il pad, ho preferito mantenere allineata la gestione dello spostamento (non riuscirei a riprodurre la rotazione con angoli generici usando le frecce).
ho del codice che potresti riciclare dal progetto del corso di unreal che sto facendo... ti può essere utile? consiste nello sfruttare il dot product e il cross product dei vettori https://en.wikipedia.org/wiki/Dot_product https://it.wikipedia.org/wiki/Prodotto_vettoriale
ipotesi: gli stick restituiscono valori da -1 a +1 le frecce sono -1 e +1
TankMovementComponent.cpp: . . void UTankMovementComponent::IntendMoveForward(float Throw) { if (!ensure(LeftTrack && RightTrack))return; LeftTrack->SetThrottle(Throw); RightTrack->SetThrottle(Throw); }
void UTankMovementComponent::IntendTurnRight(float Throw) { if (!ensure(LeftTrack && RightTrack))return; LeftTrack->SetThrottle(Throw); RightTrack->SetThrottle(-Throw); }
void UTankMovementComponent::RequestDirectMove(const FVector& MoveVelocity, bool bForceMaxSpeed)
{
auto TankForward = GetOwner()->GetActorForwardVector().GetSafeNormal();
auto AIForwardIntention = MoveVelocity.GetSafeNormal();
auto ForwardThrow = FVector::DotProduct(TankForward, AIForwardIntention);// <==
auto RightThrow = (FVector::CrossProduct(TankForward, AIForwardIntention)).Z;// <==
IntendMoveForward(ForwardThrow);
IntendTurnRight(RightThrow);
}
TankTrack.cpp . .
void UTankTrack::SetThrottle(float Throttle)//<== somma i vettori e limita range da -1 a+1
{
CurrentThrottle = FMath::Clamp
void UTankTrack::DriveTrack()
{
auto ForceApplied = GetForwardVector()CurrentThrottleTrackMaxDrivingForce;
auto ForceLocation = GetComponentLocation();
auto TankRoot = Cast
si capisce qualcosa? XD
Sì sì, si capisce, ma questo prevede un approccio diverso al movimento (legittimo, ma diverso). Fondamentalmente, l'asse verticale stabilisce la velocità, quello orizzontale la rotazione, e il prodotto dei due fornisce il vettore della direzione. Questo mi sta bene per un carro armato che è difficile da girare di 180 gradi istantaneamente :) Nel nostro caso, sospendo il giudizio, visto che non sono il game designer :P Se però decidiamo di andare per quella strada invece del banale 8-way che sto usando ora, posso modificare di conseguenza.
Lasciamo pure in sospeso per ora, l'ideale sarebbe avere una rotazione lineare prima del MVP.
il codice te lo avevo lasciato come spunto per ovviare il problema dei tasti della tastiera visto che in questo modo ad unreal non gliene frega niente se l'input viene da tastiera o pad visto che le tratta nella stessa maniera
Direi di sistemare questo issue per il MVP
aggiornato il gdd: il commit lo farò più tardi assieme agli altri aggiornamenti gdd da fare
Lo sprite del protagonista flippa solo nelle direzioni nord sud est ovest, anche quando va in diagonale
Step: 1)Avvia il gioco 2)Play 3)Muoversi in diagonale