Como criar corda?


8

Eu gostaria de recriar este jogo , mas não tenho idéia de como criar a corda ou suas influências na bola.

insira a descrição da imagem aqui

Basicamente, há uma corda "presa", em uma extremidade, ao ponteiro do mouse e, na outra extremidade, anexada a uma bola massiva. À medida que o usuário move o mouse, a corda e a bola seguem, como se estivesse balançando um martelo na vida real.

Como eu criaria uma corda como no jogo acima?

Preciso conhecer os conceitos básicos e a física por trás da criação dessa corda, não como usar uma biblioteca pré-existente para criar uma. Eu gostaria de poder implementar uma corda do zero, então preciso saber como isso pode ser feito.

Obrigado!

Respostas:


3

A corda no seu exemplo é provavelmente apenas uma junção física simples que limita a distância da bola ao cursor do mouse. Essas articulações são normalmente chamadas de "junta de corda" ou "junta de mola".

Parece que as ondulações na string não são baseadas em uma simulação física real. Provavelmente, essa é uma curva de bezier, na qual os pontos de controle ficam mais afastados do eixo central quando a bola está mais próxima da posição do mouse.

Embora a resposta aceita explique como criar uma corda realista dentro do mecanismo físico, às vezes é preferível ter uma solução muito mais simples (conforme descrito acima). A solução mais simples (com apenas uma junta) melhora muito a estabilidade da simulação. Várias articulações conectadas com grandes forças aplicadas tendem a tremer e podem resultar em correntes quebradas e em movimento irregular das articulações.

Obviamente, você também pode combinar os dois métodos, criando sua corda como tal:

  1. Uma cadeia de nós conectados por juntas
  2. Uma junta de corda / mola do primeiro ao último nó da corrente que garante que você não possa separar a corrente além de uma determinada distância máxima (um dos principais motivos pelos quais essas correntes se tornam instáveis).

Isso resultará em uma corrente em movimento mais realista (que pode até reagir a outros objetos no mecanismo físico), mas exigirá mais poder de processamento do que apenas uma junta de mola com comportamento em cadeia "falso".


Obrigado por apontar isso! Porém, como os pontos de controle do bezier seriam manipulados, porque o exemplo parece muito realista, não simplesmente como um bezier onde é endireitado e "esmagado".
theonlygusti

Eu não acho que parece muito realista. Ele apenas adiciona algumas ondulações à corda, não se dobra nem nada ... para mim, parece que está sendo endireitado e esmagado.
precisa saber é o seguinte

Mas notei que as curvas podem estar em ângulos diferentes entre si; como isso está sendo alcançado?
theonlygusti

Adicione algumas compensações aleatórias para parecer sempre diferente?
bummzack

Ok sim; parece que foi assim que foi feito no jogo, mas na verdade (e isso parecerá bizarro para todos) a linguagem de programação que estou usando facilita a criação de um mecanismo de física, como a resposta da Kyranstar apontou, em vez de desenhar curvas mais escuras.
theonlygusti

10

Basicamente, você precisará criar um mecanismo de física. Conceitualmente, uma corda é um monte de "nós" conectados com molas.

Basicamente, a cada escala, cada nó exerce uma força sobre os nós acima e abaixo proporcionalmente à distância entre eles (ou a que distância estão de seu confortável comprimento de alongamento). Se você quiser prender uma bola, basta conectá-la com uma junta de mola ao nó inferior da corda.

este é um ótimo tutorial para criar um mecanismo de física, mas na verdade não entra em restrições ou articulações.

Aqui está um tutorial sobre as molas básicas, que devem ser tudo o que você precisa para uma corda como essa.

Esta é uma corda criada no meu mecanismo de física (muito básico) . Obviamente, tem algumas peculiaridades (a vibração estranha), mas geralmente é o que você está procurando. Quando você desenha a corda, apenas não desenhe os nós.

Editar:

Para fazer uma corda de boa aparência, uma "junta de corda" é realmente muito melhor e mais próxima do seu exemplo. Uma junta de corda é basicamente uma mola, mas apenas corrige os objetos quando eles estão muito afastados (não quando estão muito próximos).

Esta é minha corda com uma junta de cordas: insira a descrição da imagem aqui


"Quando você puxa a corda, não desenhe os nós." - me fez rir :) Obrigado por levar em consideração minha extrema falta de consideração. A bola seria apenas outro nó então? De uma massa maior? (Será que cada nó tem uma massa?)
theonlygusti

Sim, eles fazem! Geralmente, a melhor maneira de calcular intuitivamente as massas é dar uma densidade a cada bola e apenas multiplicá-la por sua área. Você sempre pode ajustar isso para obter melhores resultados no seu jogo real.
Kyranstar

Normalmente, eu implementaria isso em uma linguagem orientada a objetos, com uma classe para um nó, com propriedades densidade, massa etc., mas sou forçado a usar uma linguagem em que a OOP é quase impossível; como você configuraria nós etc. sob essas restrições?
theonlygusti

Para ser sincero, tenho muito pouca experiência com idiomas não-POO. Você pode olhar para o Chipmunk2D , que é um mecanismo de física escrito em C. Obviamente, você precisará de uma maneira de armazenar esses dados em uma unidade coesa.
Kyranstar

Ok, obrigada; última pergunta, o nó cinza é um nó no sentido dos outros? O que há de especial nisso para que ele permaneça imóvel?
theonlygusti
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.