Fördröjning på sprite/Utföra uppgift i Java efter en viss tid

Permalänk
Medlem

Fördröjning på sprite/Utföra uppgift i Java efter en viss tid

Jag har två sprite´s utritade i mitt android spel. Jag vill att en ytterligare ska komma in i spelet efter x sekunder och fortsätta så genom spelets gång.

Vad skulle ett effektivt och enkelt sätt vara för att utföra detta?

Tack.

Permalänk
Medlem

Gör en "timer"-klass som hantera allt du behöver med tid att göra.
Kan du även använda till din mainloop för att hantera fps och dylikt.

Bara en vanlig clock() borde ju fungera utmärkt.
När x sekunder har gått anropar du din resourcemanager/spritemanager eller vad du nu använder för nåt.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av NoPaiN^:

Gör en "timer"-klass som hantera allt du behöver med tid att göra.
Kan du även använda till din mainloop för att hantera fps och dylikt.

Bara en vanlig clock() borde ju fungera utmärkt.
När x sekunder har gått anropar du din resourcemanager/spritemanager eller vad du nu använder för nåt.

Jag gjorde detta utan vidare resultat:

public void render () { currentState = GameState.READY; Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); ball.update(Gdx.graphics.getDeltaTime()); enemy.update(Gdx.graphics.getDeltaTime()); sprite.setPosition(ball.position.x, ball.position.y); sprite.setSize(ball.getHeight(), ball.getWidth()); spriteTwo.setPosition(enemy.positionTwo.x, enemy.positionTwo.y); spriteTwo.setSize(enemy.getWidth(), enemy.getHeight()); spriteThree.setPosition(enemy.positionTwo.x + 10, enemy.positionTwo.y + 10); spriteThree.setSize(enemy.getWidth(), enemy.getHeight()); //*********************** //Timer //Starts drawing stuff on screen batch.begin(); sprite.draw(batch); spriteTwo.draw(batch); Timer.schedule(new Task() { @Override public void run() { batch.begin(); spriteThree.draw(batch); batch.end(); } }, 5); batch.end(); }

EDIT: Jag använder libgdx biblioteket

Permalänk
Medlem

Utföra uppgift i Java efter en viss tid

Jag kodar ett androidspel för tillfället och har just nu tre sprites som jag printar ut. Men de printas ut så fort spelet startas. Jag vill att den ska printas ut efter säg 10 sekunder. Har läst om timerfunktionen men har för mig att det är god regel att inte använda timer i spel?

Vad kan jag göra?

Permalänk
Hostinger

Jag tror att du ska använda Threads. Det finns ett bra tutorial av Threads här: http://examples.javacodegeeks.com/android/core/thread/android...

Det är som timerfunktionen i Java, men optimiserad för Android.

Visa signatur

Gratis webbhotell - hostinger.se

Permalänk
Medlem
Skrivet av Kaspero:

Jag tror att du ska använda Threads. Det finns ett bra tutorial av Threads här: http://examples.javacodegeeks.com/android/core/thread/android...

Det är som timerfunktionen i Java, men optimiserad för Android.

Tack! Men för att få det hela lite klarare. I det exemplet så sleepar dem ju applicationen. Skulle jag kunna sätta sleep på en funktion eller en klass isf kanske? Så att en sprite målas ut när spelet startas och sedan sleepar jag en annan rendermetod i säg 20 sekunder som sedan målas ut efter 20 sek? Har jag fattat det rätt?

Permalänk
Medlem
Skrivet av Progrmor:

Tack! Men för att få det hela lite klarare. I det exemplet så sleepar dem ju applicationen. Skulle jag kunna sätta sleep på en funktion eller en klass isf kanske? Så att en sprite målas ut när spelet startas och sedan sleepar jag en annan rendermetod i säg 20 sekunder som sedan målas ut efter 20 sek? Har jag fattat det rätt?

Ganska svårt att ge några exakta svar då ingen vet hur ditt program är uppbyggt. I exemplet körs sleep på en tråd, inte hela applikationen. Nu har jag som sagt ingen aning om hur du byggt upp ditt program eller vad som kommer ge ditt program bra prestanda men i exemplet kör de sleep på just den tråden (thread.sleep) vilket pausar endast den tråden, resten av programmet fortsätter som vanligt.

Permalänk
Medlem
Skrivet av Massy:

Ganska svårt att ge några exakta svar då ingen vet hur ditt program är uppbyggt. I exemplet körs sleep på en tråd, inte hela applikationen. Nu har jag som sagt ingen aning om hur du byggt upp ditt program eller vad som kommer ge ditt program bra prestanda men i exemplet kör de sleep på just den tråden (thread.sleep) vilket pausar endast den tråden, resten av programmet fortsätter som vanligt.

Jag skrev detta:

public void enemyPrint() throws InterruptedException { spriteThree.draw(batch); thr.sleep(5000); }

Skulle detta pausa klassen från att utföras tills efter 5 sekunder?

Permalänk
Medlem

Typ

long oldTime = System.currentTimeMillis(); boolean didDeplyNewSprites = false; while(gameRTunning) { if(System.currentTimeMillis() - oldtime >= 10000) if(!didDeplyNewSprites) { deployNewSprites(); didDeplyNewSprites = true; } }

Sen ställde du samma fråga för en månad sen : http://www.sweclockers.com/forum/10-programmering-och-digital...

Permalänk
Medlem
Skrivet av iXam:

Typ

long oldTime = System.currentTimeMillis(); boolean didDeplyNewSprites = false; while(gameRTunning) { if(System.currentTimeMillis() - oldtime >= 10000) if(!didDeplyNewSprites) { deployNewSprites(); didDeplyNewSprites = true; } }

Sen ställde du samma fråga för en månad sen : http://www.sweclockers.com/forum/10-programmering-och-digital...

Som jag aldrig fick ordentligt svar på.

Permalänk
Hedersmedlem

*Trådar sammanfogade, rubrik justerad*

Sammanfogat dina trådar då vi inte tillåter korspostning.

Citat:

§ 3.3 Det är inte tillåtet att skapa flera trådar om samma ämne (så kallad korspostning). Detta gäller oavsett om trådarna placeras i samma forumdel eller i olika forumdelar. Om en moderator har låst en tråd är det inte tillåtet att skapa en ny tråd om samma ämne. Regeln finns för att alla ska få samma chans att få sina trådar uppmärksammade och för att forumet ska bli så överskådligt som möjligt.

/moderator

Visa signatur

Danskjävel så krattar som en skrivare...