2 Threads - Trotzdem ruckeln im Spiel

  • Antworten:8
DennisG
  • Forum-Beiträge: 35

04.11.2012, 22:05:48 via Website

Heyho,
ich hab 2 Threads, der eine für das Gameplay also auswerten der Positionen, neu Setzen und Zeichnen.
Der andere lädt eine XML Datei und ließt aus ihr einige Daten aus. Nun immer wenn die Methode die die XML Datei lädt im zweiten Thread aufgerufen wird stockt das Spiel für wenige Millisekunden (also leider spürbar).
Ich habe extra schon die Methode in einem zweiten Thread gepackt und gehoft das somit das ruckeln nur im zweitem Thread bleibt, doch leider brachte dies nichts.

Wisst ihr eine Lösung?

Antworten
DennisG
  • Forum-Beiträge: 35

04.11.2012, 22:18:52 via Website

Recht Simpel :/
1threada = new Thread() {
2 public void run() {
3 beforeTime = System.nanoTime();
4 try
5 {
6 updateGame();
7 }
8 finally
9 {
10
11 }
12
13 sleepTime = delay-((System.nanoTime()-beforeTime)/1000000L);
14 if(gamestop)
15 {
16 sleepTime = 10000;
17 }
18 handler.postDelayed(this, sleepTime);
19 }
20 };
21 threada.start();
22
23
24 if(isMultiplayer){
25 threadmulti = new Thread() {
26 public void run() {
27 try
28 {
29 multiplayer_daten();
30 }
31 finally
32 {
33
34 }
35 sleepTimem = 10000;
36 handlermulti.postDelayed(this, sleepTimem);
37 }
38 };
39 threadmulti.start();
40 }

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

05.11.2012, 09:36:51 via Website

So aus dem Bauch raus: Bei spielen solltest du alles was du nicht während des Games berechnen musst einfach nicht machen.

Wenn du zur Laufzeit einen Thread erzeugst ist das ein recht 'teueres' Objekt und das System kann kurzfristig ruckeln. Daher würde Ich den Thread anfangs anlegen und wenn möglich nur noch zur gewünschten Zeit starten mittens #run().

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
DennisG
  • Forum-Beiträge: 35

05.11.2012, 12:39:23 via Website

Ok ich habe soweit alles aus den Methoden herausgenommen was für mich als überflüssig empfunden wurde.
Nun hackt es aber trotzdem noch, immer genau dann wenn er die Daten lädt also ich stelle eine Verbindung zu einem Server her rufe eine XML Datei auf und lese die Daten davon ab. Sobald er die Daten runter geladen hat macht er weiter...

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

05.11.2012, 14:03:42 via Website

Bleibt das spiel ganz stehen in der Zeit oder wie ist das zu verstehen ?
Wenn das so ist blockiert dein Lade Thread ein anderes Object und der Spiele Thread darf solange nicht drauf zugreifen wenn du es falsch implementiert hast.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
DennisG
  • Forum-Beiträge: 35

05.11.2012, 14:40:42 via Website

Jap, es bleibt ganz stehen.
Also ich hab Variablen welche ich in der Klasse definiert habe,
diese dann erst in der updateGame() Methode verwende und
alle 10 Sekunden bei multiplayer_daten() Methode Update. Aber hier vermute ich nicht das es hackt, auch ohne die Variablen hackt es genau dann wenn multiplayer_daten() aufgerufen wird.

Ich habe die Methoden in einer Klasse sollte man diese in verschiedene legen und würde das helfen? Ich frage dies zuerst weil es ein großer Aufwand wäre die Variablen von einer weiteren Klasse wieder in die ursprüngliche zu bekommen.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

05.11.2012, 14:57:41 via Website

Aus dem Code oben kann man sowas nicht sehen. Tippe mal generell drauf das eine multiplayer_daten Methode hier irgendwo das Problem im bauch hat.
Du solltest diese evtl mal posten. Schau mal ob du Objekte in beiden teilen benutzt, das kann z.b ein Problem darstellen.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten