Vinnaren i pepparkakshustävlingen!
2020-01-04, 15:59
  #1
Medlem
Hej, håller på med ett online spel och har problem med den här koden:

if (itemId == 1779 && objectId == 7849) {

try
{
Thread.currentThread().sleep(2000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
c.sendMessage("test");
}

Det jag försöker göra är att när koden används så pausar den i 2 sekunder och sedan så gör den "c.sendMessage("test");" koden funkar men problemet är att hela spelet fryser under två sekunder, jag vill att allt ska vara som vanligt bara att just koden pausar och ingenting annat.
Ledsen för felstav.
Citera
2020-01-04, 16:01
  #2
Medlem
Sleep (2000) gör väl pausen..
Detta går väl prova om du ändrar på värdet.
Citera
2020-01-04, 16:07
  #3
Medlem
Problemet är att om man pausar koden så pausar man koden. Du behöver skapa olika trådar. Det är en hel vetenskap, speciellt om de ska dela minne. Googla på Threading och det aktuella språket (C#?)
Citera
2020-01-04, 17:06
  #4
Medlem
Citat:
Ursprungligen postat av makumba
Sleep (2000) gör väl pausen..
Detta går väl prova om du ändrar på värdet.
Ja det är pausen, men som sagt problemet är att hela programmet stannar och det vill jag inte, jag vill bara att just koden ska stanna i 2 sekunder.
Citera
2020-01-04, 18:00
  #5
Medlem
Citat:
Ursprungligen postat av axxor
Ja det är pausen, men som sagt problemet är att hela programmet stannar och det vill jag inte, jag vill bara att just koden ska stanna i 2 sekunder.
Du gör sleep på fel tråd. Spawna fler trådar och gör sleep på rätt.
Posta lite kod så kan vi ge tips på vad som går fel om du inte hänger med på vad som ska göras.
Citera
2020-01-04, 18:07
  #6
Medlem
Sados avatar
Du måste inte göra ett flertrådigt program om du inte redan har det. Räcker med att göra en statemaskin för ovanstående kod och anropa den från huvudloopen eller vad du har.
Citera
2020-01-04, 18:08
  #7
Medlem
Despats avatar
Du borde kunna skapa ett Timer-objekt eller något liknande kanske? Då slipper du frysa trådar, åtminstone explicit.
Citera
2020-01-05, 05:03
  #8
Medlem
Ge dig inte in i multitrådad programmering i onödan, finns inget som säger att man måste ha flera trådar. Du kan köra en viss block av kod t.ex efter en viss tid ha gått, t.ex i millisekunder från systemklockan eller andra mer exakta verktyg.

Ha någon form av spel timer samt ta i beaktning delta-tid.
Citera
2020-02-04, 09:31
  #9
Medlem
Knastrass avatar
Kör en async task då på den koden.

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(new Runnable() {

public void run() {

// HÄR lägger du in koden som du vill köra i en separat tråd så resten av programmet kan köra samtidigt.

}
});
executor.shutDown();
__________________
Senast redigerad av Knastras 2020-02-04 kl. 09:34.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback