Android skákací míč

hlasů
4

Takže já jsem jen se snaží udělat si míč odrazit kolem obrazovky, která by měla zpomalit kvůli gravitaci a reflektovat (odraznou) ze stěny jako normální by míč. Může mi někdo dát nějaké základy a velmi jednoduchou implementaci to? Jako další příklady se zdají trochu „přehnané“ a zdá se, že jdou nad rámec toho, co chci dělat. Snažil jsem se toto:

public void updateLogic() {

    if (x < -1) {

        xPos += (-x * gravity);
    } else if (x > 1) {

        xPos -= (x * gravity);
    }
    if (y > 1) {

        yPos += (y * gravity);
    } else if (y < -1) {

        yPos -= (-y * gravity);
    }
}

To je nejbližší jsem sám. Mimochodem hodnoty x a y jsou z akcelerometru. Jakákoliv pomoc by byla velmi ocenil, díky!

Položena 22/12/2010 v 22:26
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
6

Myslím, že budete potřebovat 3 věci za to, síly (x a y, které máte), rychlosti (říkají jim XVEL a Yvel) a pozice (xpozice a ypozice které také mají). Pozice míče se aktualizuje (v nejjednodušším způsobem) od:

xPos += dt*xVel; 
yPos += dt*yVel;

xVel += dt*x;
yVel += dt*y;

Proměnná ‚dt‘ je timestep , který určuje, jak rychle míč se bude pohybovat. Je-li nastavena příliš velká, i když program bude nestabilní! Zkuste dt = 0,001 nebo tak na start a postupně nastavte ji vyšší.

Pak se dostat míč odráží od stěn, stačí otočit rychlost, pokud narazí na zeď:

if (xPos > xMax) {
    xPos = xMax;
    xVel *= -1.0;
} else if (xPos < 0.0) {
    xPos = 0.0;
    xVel *= -1.0;
}

a stejná pro y. Dále jen ‚xpozice = ...‘ je prostě zastavit míč se přes okraj obrazovky. Pokud byste se chtěli míč odrazit o něco menší pokaždé, když narazí do zdi, změňte ‚-1.0‘ až ‚-0.9‘ nebo něco podobného (to je součinitel restituce ).

Doufejme, že by mělo být vše. Hodně štěstí!

Odpovězeno 22/12/2010 v 22:55
zdroj uživatelem

hlasů
2

Youtube videa

Zdrojový kód k dispozici na GitHub .

  1. Vaše x souřadnic by neměly být ovlivněny gravitací.
  2. Chtěl bych poradit proti použití akcelerometrů, dokud se pochopit, jak fyzikální práci pro jednoduchý případ.

Rozbít ho do etap. Nejprve se ujistěte, že můžete získat míč padající konstantní rychlostí.

Jakmile budete mít, že práce, starat o gravitaci způsobuje rychlost zvýšit.

Jakmile budete mít, že práce, starat o křižovatku s stěn a změn rychlosti. Jednoduchý algoritmus pro odráží od stěn by znásobit x rychlost o -1, když narazí na svislou stěnu, a násobit rychlost y o -1, když narazí na vodorovnou stěnu.

Odpovězeno 22/12/2010 v 22:56
zdroj uživatelem

hlasů
2

Několik poznámek k vaší aktuální kód:

  • Obě tyto řádky dělat přesně to samé:

    yPos -= (-y * gravity);
    yPos += (y * gravity);
    

    Podobně, oba tyto řádky to samé:

    xPos += (-x * gravity);
    xPos -= (x * gravity);
    
  • Nejste manipulaci s případy -1 <= x <= 1nebo-1 <= y <= 1

Několik poznámek k pojmům:

  • Začněte s jedním míčkem.
  • Chcete míč k dispozici dvě oddělená rychlosti (jak buď pozitivní nebo negativní), jeden v x-směru a jeden ve směru y. Každý snímek, přidejte tyto rychlosti do polohy míčku.
  • Potom přidejte detekci kolizí. Zkontrolujte, zda každý snímek v případě, že střed míče je mimo obrazovku. Pokud je to, aby to odrazit (nejjednodušší způsob, jak to udělat, je, aby jej o míč v y-rychlost pozitivní, když to jde mimo nejvíce negativní hodnotu Y na obrazovce, a to podobně jako u ostatních obrazovky okrajů) .
  • Zlepšit detekci kolizí: uvidíme, jestli můžete přijít na to, jak zkontrolovat, zda některý díl míče it mimo obrazovku (Tip: zkontrolujte, zda je míč mimo levé straně obrazovky, stačí pouze zkontrolovat leváky většina souřadnic míče)
  • Pak gravitace v úvahu - gravitace bude konstantní číslo odečte od y rychlost každém snímku, dokud y-rychlost hity 0.
Odpovězeno 22/12/2010 v 23:10
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more