Programmeringstips

Diskussion i 'Frågor, support och diskussion' startad av tkarki, 19 feb 2010.

  1. tkarki

    tkarki Teen Droid Medlem

    Blev medlem:
    5 nov 2009
    Inlägg:
    381
    Mottagna gillanden:
    2

    MINA ENHETER

    Behöver lite tips...
    Har programmerat endel tidigare men nu var det rätt längesen men gav mig i kast med att ändra Snake lite som följer med android SDK. (bästa sättet att lära sig tycker jag! Särskilt som jag inte har några superbra idéer på något annat att utveckla för tillfället)

    Har dock ett litet problem som jag inte kommit fram till någon lösning på men säker på att ni har en eller flera riktigt bra lösningar för detta.

    Vill ändra så att fördröjningen mellan maskens rörelser minskar snabbt från början, och sen långsammare och långsammare men aldrig vänder om till bli högre igen.

    Alltså typ, startar på 400ms fördröjning, 320, 260, 210, 170, 150, 130, 120, 115, ...
    Eller liknande.. Anpassningsbart förstås men ungefär något sådant, kan bara inte komma ihåg hur man kommer dit så nu behöver jag lite tips!

    Tacksam för lite tips, gärna med kod exempel!
     
  2. Luff

    Luff Infant Droid Medlem

    Blev medlem:
    20 feb 2010
    Inlägg:
    4
    Mottagna gillanden:
    0

    MINA ENHETER

    Går att göra på en massa olika sätt. Hittade på ett förslag, finns säkerligen effektivare. Ett tips är att leta rätt på hemsidor som lär ut grunderna i hur man kodar spel i java, mycket av det lär ju fungera på android med.

    Kod:
    max_delay = 400; //startvärde
    min_delay = 50; // se det som ett riktmärke. når hit när speed är oändligt stor
    retardation = 0.1; // ska vara mindre än noll.  högt värde = snabb acceleration
    max_speed = 150; //utan gräns kommer det ta sjukt lång tid att bromsa
    
    delay = max_delay;
    speed = 0;
    
    void accelerate(){
    if(speed < max_speed)
      speed++;
      delay = min_delay + (max_delay /1+retardation*speed);
    }
    
    void decelerate(){
    if(speed > 0)
      speed = speed - 20; //vill kanske bromsa snabbare än vi accelererar
      if(speed < 0)
        speed = 0;
      delay = min_delay + (max_delay /1+retardation*speed);
    }
    
    Du får testa lite olika värden och försöka hitta något du trivs med.
     
    Last edited: 20 feb 2010
  3. Luff

    Luff Infant Droid Medlem

    Blev medlem:
    20 feb 2010
    Inlägg:
    4
    Mottagna gillanden:
    0

    MINA ENHETER

    Ops, missade att du ville att accelerationen ska vara avtagande. Fixat.
     
    Last edited: 20 feb 2010
  4. tkarki

    tkarki Teen Droid Medlem

    Blev medlem:
    5 nov 2009
    Inlägg:
    381
    Mottagna gillanden:
    2

    MINA ENHETER

    Hej!

    Äntligen tittat lite på detta men antingen gör jag något fel eller så har det blivit något galet med din kod... (eller så har jag missförstått funktionen)

    Testar accelrate med olika värden på speed.. T.ex.
    speed 1 ger delay på 450,1
    speed 2 ger delay på 450,2
    ...

    Testat lite olika kombinationer men inget i närheten av mitt exempel ovan...
    Du skriver också att retardation ska vara under noll men 0,1 är ju faktiskt över noll? Fel eller rätt?
     
  5. yrara

    yrara Teen Droid Medlem

    Blev medlem:
    30 sept 2009
    Inlägg:
    428
    Mottagna gillanden:
    8

    MINA ENHETER

    Ifall det bara är den nya hastigheten du vill räkna ut så kan du väl sätta den till
    fördröjning = fördröjning * 0,8

    400 * 0,8 = 320
    320 * 0,8 = 256
    256 * 0,8 = 204
    204 * 0,8 = 163

    Känns väl hyfsat nära dina egna siffror...
     
  6. tkarki

    tkarki Teen Droid Medlem

    Blev medlem:
    5 nov 2009
    Inlägg:
    381
    Mottagna gillanden:
    2

    MINA ENHETER

    Mnjo men vill ju att minskningen ska bli mindre och mindre ju längre det går men man skulle ju kunna ha en ökande faktor... (0,8, 0,81 ...) men även det gör det lite väl mycket i slutet...
    Men kanske blir någon sådan variant jag kan använda mig av.
     
  7. yrara

    yrara Teen Droid Medlem

    Blev medlem:
    30 sept 2009
    Inlägg:
    428
    Mottagna gillanden:
    8

    MINA ENHETER

    Alltså, kör du med procent så blir ju minskningen i millisekunder mindre och mindre. Eftersom du hela tiden minskar med 20% (t.ex.) av ett mindre och mindre ursprungstal. Från 400 en minskning med 80 ms, till 320. Från 320 en minskning med 64 ms till 256. Från 256 en minskning med 52 ms till 204... etc.