Come creare la corda?


8

Vorrei ricreare questo gioco , ma non ho idea di come creare la corda o le sue influenze sulla palla.

inserisci qui la descrizione dell'immagine

Fondamentalmente, c'è una corda, "attaccata", ad un'estremità, al puntatore del mouse, e all'altra estremità attaccata a una palla enorme. Mentre l'utente sposta il mouse, la corda e la palla seguono, come se oscillassero un flagello o simili nella vita reale.

Come farei per creare una corda come nel gioco sopra?

Devo conoscere i concetti di base e la fisica dietro la creazione di una tale corda, non come usare una libreria preesistente per crearne una. Mi piacerebbe essere in grado di implementare una corda da zero, quindi ho bisogno di sapere come può essere fatto.

Grazie!

Risposte:


3

La corda nel tuo esempio è probabilmente solo una semplice articolazione fisica che limita la distanza della palla dal cursore del mouse. Questi giunti sono in genere chiamati "giunti a fune" o "giunti a molla".

Sembra che le increspature nella stringa non siano basate su una simulazione fisica reale. Molto probabilmente si tratta di una curva più bezier in cui i punti di controllo vengono ulteriormente allontanati dall'asse centrale quando la palla è più vicina alla posizione del mouse.

Mentre la risposta accettata spiega come creare una corda realistica all'interno del motore fisico, a volte è preferibile avere una soluzione molto più semplice (come indicato sopra). La soluzione più semplice (con un solo giunto) migliora notevolmente la stabilità della simulazione. I giunti multipli collegati che hanno forze elevate applicate tendono al jitter e possono provocare catene di giunti rotte e che si muovono in modo irregolare.

Naturalmente puoi anche combinare entrambi i metodi, creando la tua corda come tale:

  1. Una catena di nodi, collegati da giunti
  2. Un giunto fune / molla dal primo all'ultimo nodo della catena che assicura che non è possibile separare la catena oltre una determinata distanza massima (uno dei motivi principali per cui queste catene diventano instabili).

Ciò si tradurrà in una catena più realistica (che può persino reagire ad altri oggetti nel motore fisico) ma richiederà più potenza di elaborazione rispetto a una semplice giunzione a molla con un comportamento a catena "falso".


Grazie per la segnalazione! Come potrebbero essere manipolati i punti di controllo del bezier, perché l'esempio sembra molto realistico, non semplicemente come un bezier in cui viene raddrizzato e "schiacciato".
theonlygusti,

Non penso che sia molto realistico. Aggiunge solo alcune increspature alla corda, non si piega o altro ... a me sembra che sia solo raddrizzato e schiacciato.
Bummzack,

Ma ho notato che le curve possono essere angolate l'una con l'altra; come viene realizzato?
theonlygusti,

Aggiungi alcuni offset casuali per renderlo diverso ogni volta?
Bummzack,

Va bene si; sembra che sia stato fatto così nel gioco, ma in realtà (e questo sembrerà bizzarro a tutti) il linguaggio di programmazione che sto usando rende più facile creare un motore fisico come la risposta di Kyranstar sottolineato piuttosto che disegnare curve più bezier.
theonlygusti,

10

Fondamentalmente, dovrai creare un motore fisico. Una corda è concettualmente un mucchio di "nodi" collegati tra loro con molle.

Fondamentalmente, ogni tick, ogni nodo eserciterà una forza sui nodi sopra e sotto di essa proporzionale alla loro distanza a parte (o quanto lontano dalla loro comoda lunghezza di allungamento). Se vuoi attaccare una palla, collegala semplicemente con un giunto a molla al nodo inferiore della corda.

Questo è un ottimo tutorial per la creazione di un motore fisico, ma in realtà non va in vincoli o articolazioni.

Ecco un tutorial che copre le molle di base, che dovrebbero essere tutto ciò che serve per una corda del genere.

Questa è una corda creata nel mio motore fisico (di base) . Ovviamente ha alcune stranezze (la strana vibrazione) ma è generalmente quello che stai cercando. Quando disegni la corda, non disegnare i nodi.

Modificare:

Per creare una corda di bell'aspetto, un "giunto a corda" è in realtà molto più bello e più vicino al tuo esempio. Un giunto di stringa è fondamentalmente una molla, ma corregge gli oggetti solo quando sono troppo distanti (non quando sono troppo vicini).

Questa è invece la mia corda con un giunto a corda: inserisci qui la descrizione dell'immagine


"Quando disegni la corda, non disegnare i nodi." - Mi ha fatto ridere :) Grazie per aver preso in considerazione la mia estrema noobilità. La palla sarebbe solo un altro nodo allora? Di una massa maggiore? (Ogni nodo ha una massa?)
theonlygusti il

Si lo fanno! Generalmente il modo migliore per calcolare in modo intuitivo le masse è di dare a ogni palla una densità e semplicemente moltiplicarla per la sua area. Puoi sempre modificarlo per ottenere risultati migliori nel tuo gioco reale.
Kyranstar,

Normalmente, lo implementerei in un linguaggio orientato agli oggetti, con una classe per un nodo, con densità di proprietà, massa ecc., Ma sono costretto a usare un linguaggio in cui OOP è quasi impossibile; come imposteresti nodi, ecc., sotto questi vincoli?
theonlygusti,

Ad essere sincero, ho poca esperienza con le lingue non -OP. Potresti guardare Chipmunk2D , che è un motore fisico scritto in C. Ovviamente, avrai bisogno di un modo per memorizzare questi dati in un'unità coesiva.
Kyranstar,

Okay grazie; ultima domanda, il nodo grigio è un nodo nel senso degli altri? Cosa c'è di speciale nel farlo rimanere fermo?
theonlygusti,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.